IP地址检测
视频播放器
输入关键词搜索
登录
Docker容器速查手册

Docker容器速查手册

2023-02-26
编程开发

启动容器

1.命令行(docker run)

一般用于独立运行的容器(不向其他容器提供服务),或临时运行的容器

docker run -d -it \
    --entrypoint [path] \
    --name [container-name] \
    --hostname 主机名 \
    --restart always \
    --rm \
    -e TZ=Asia/Shanghai \
    --user [UID:PID] \
    -v [local/file/path]:[container/file/path] \
    -p [dest-port]:[src-port-in-docker] \
    -w [work directory] \
    [the-image-you-will-run] [cmd-command]
  • -d Run container in background and print container ID
  • -it 进入交互模式并分配tty
  • --entrypoint 与[cmd-command]可结合使用
  • --name container name。用于管理Docker容器
  • --hostname 主机名。用于标识Docker容器中运行的应用程序
  • --restart 设置是否自动重启
  • --rm 容器退出时自动删除实例
  • -e 如果是运行在服务器上,需要将时区的环境变量设置成中国时区,否则会默认使用UTC时区
  • --user 指定容器运行时的用户,例如--user $(id -u):$(id -g)
  • -v 挂载数据卷 必须保证主机上的挂载目录或文件存在!!!
  • -p 端口映射
  • -w 指定工作目录,即“当前目录”
  • cmd-commond 如果有多个命令时,需要用sh -c,命令用双引号扩起来,例如:sh -c "cd dir && python app.py"

2.docker-compose.yml

一般用于为其他容器提供服务的容器,容器实例运行后会被其他容器访问,如:数据库服务、邮件服务......

示例

services:
  mariadb:
    container_name: mariadb
    image: mariadb
    restart: always
    volumes:
      - $PWD/volume:/var/lib/mysql
    environment:
      - TZ=Asia/Shanghai
      - MARIADB_ROOT_PASSWORD=DMwA1oEucnOxGVmjuqoXGmI4Q0jrUO7BBhQlE4B9
    ports:
      - "18686:3306"

❗注意:docker-compose启动后,会自动创建一个[docker-compose.yml所在的目录名]_default的网络

更多命令可查看docker-compose配置文档:https://docs.docker.com/compose/compose-file/05-services/

启动/暂停 docker compose

# 启动,测试阶段可不加-d,方便定位错误信息
docker compose up -d 
# 暂停
docker compose down 
# 进入容器
cd [docker-compose.yml所在目录]
docker compose exec -it [service-name] bash

Dockerfile配置

  • FROM
  • MAINTAINER
  • RUN 构建镜像执行的命令,每一次RUN都会构建一层
  • ENTRYPOINT 容器进入时执行的命令
  • CMD 容器启动的命令,如果有多个则以最后一个为准,也可以为ENTRYPOINT提供参数
    • 推荐exec模式,运行效率高。但如果要使用shell中的某个特殊字符,就必须要用shell模式运行,比如管道符|、通配符*和变量$
      # exec模式
      # 用中括号扩起来不经过shell解释器,直接运行命令
      CMD ["gunicorn","-b","127.0.0.1:8000","app:app"]
      # shell模式
      # 命令会被shell解释器进程执行,用ps命令可以看到shell是父进程,而我们要运行的命令是fork的子进程
      CMD ./alist server
      
  • VOLUME容器内的某个目录定义为数据卷。容器运行时,如果用户没有挂载这个目录,docker就会用匿名的目录进行挂载,实现挂载的目录持久化存储。
    • 示例代码
      # 容器启动后会挂载这个数据卷
      VOLUME /app/data
      # 运行容器时需要将容器内的数据卷挂载到本地
      -v /local/path:/app/data
      # 如果容器内指定了VOLUME,但是docker run时没有用-v参数进行映射,那么docker会在宿主机创建一个匿名的目录与容器内的VOLUME路径进行映射
      

      匿名数据卷在容器被删除时并不会自动删除,除非手动执行docker volume prune命令清理所有未被使用的卷。因此,最好在启动容器时使用命名卷(named volume)或绑定挂载(bind mount),以便在容器被删除时卷也能被删除,从而避免潜在的存储空间占用和安全问题

  • USER 指定执行的用户组和用户
  • WORKDIR 切换当前执行的工作目录
  • HEALTHCHECH 健康检测指令
  • EXPOSE 暴露端口
  • ARG 在构建镜像时,给镜像传递参数
    # 譬如,在构建镜像时,指定MY_NAME变量
    docker build --build-arg MY_NAME=John -t my-image .
    # 在镜像内部使用MY_NAME变量
    ARG MY_NAME
    ENV MY_NAME ${MY_NAME}
    RUN echo "My name is ${MY_NAME}"
    
  • ENV 给容器内部设置环境变量
      ENV MY_NAME=John
    
  • ADD 添加文件,如果是压缩文件也解压
  • COPY 添加文件,以复制的形式

根据Dockerfile构建镜像

docker build -t [name:tag] .
# 例如
docker build -t playwright-agent:1.0 .
  • -t Name and optionally a tag in the name:tag
  • . Dockerfile in current directory,otherwith you have to specify a Dockerfile use -f

根据image镜像反推Dockerfile文件

docker history --no-trunc [IMAGE_NAME]

其他常用命令

容器运行状态查看

# 类似linux中的ps命令
docker ps
# 查看每个容器的cpu和内存还有网络情况
docker stats
# 查看容器内部的进程
docker top [CONTAINER]

删除容器/删除镜像

# 删除容器
docker rm -f [container_name]
# 删除镜像
docker rmi -f [image_name_or_id]

清理 cleanup

docker system prune -a --volumes

Alpine镜像

安装软件包

apk add --no-cache

软件包镜像加速 清华源镜像

sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories

进入容器

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

OPTIONS是可选的选项,包括:

  • -d 启用守护模式。
  • -i 保持STDIN打开,即使未附加。
  • -t 分配一个伪TTY。
  • -u 指定要使用的用户或UID。
  • -e 设置环境变量。
# 执行nginx容器的sh命令并分配tty
docker exec -it nginx sh
# 执行多条命令
docker exec -it mycontainer sh -c "command1 && command2"

查看容器内的运行日志

docker logs [OPTIONS] CONTAINER

可选参数

  • --details Show extra details provided to logs
  • -f, --follow Follow log output

加入到其他网络

docker network connect [network_name] [container_name]

作用:使A容器可以访问到另一个网络的B容器实例,docker自带dns解析,用[container_name]或是静态IP均可访问

判断容器之间网络是否互通

nc -zv playwright-agent 3000

这个命令会尝试连接到名为 playwright-agent 的容器的 3000 端口。如果连接成功,nc 会返回一条消息,表示端口开放并且可访问。

如果端口未开放或无法访问,nc 会返回一个错误消息,说明连接失败

THE END
0/500
暂无评论
📢网站公告
欢迎来到这里
⚙️实用工具
html转pdfmarkdown编辑器
本站推荐:腾讯云服务器仅需2.3折 (点击直达)
用户协议
隐私政策
Build Time: 2025-04-26 11:07:00