Docker Compose是一种用于定义和运行多容器Docker应用程序的工具。通过一个 docker-compose.yml 文件,您可以配置应用程序需要的所有服务(例如:Web服务器、数据库、缓存等)并轻松管理它们。
Docker Compose 使用的三个步骤:
此处我采用的是离线安装方式。
首先下载 docker-compose 到本地,下载地址:https://Github.com/docker/compose/
下载链接:https://github.com/docker/compose/releases/download/v2.30.1/docker-compose-Linux-x86_64
如果直接点击下载比较慢的话,建议复制链接地址到迅雷下载,这样可能会快一些。下载完成后,把它上传到 Linux 服务器,如下所示:
接着把可执行文件移到 Linux 系统命令目录(/usr/local/bin/)下,并重命名为 “docker-compose” :
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
授权:
chmod +x /usr/local/bin/docker-compose
验证是否安装成功:
docker-compose --version
如果能正常显示出正确的版本号,说明安装成功了。
如果需要卸载,直接删除即可:
sudo rm /usr/local/bin/docker-compose
用法:
docker-compose up [options]
示例:
docker-compose up -d
功能:
使用场景:
用于部署一个 Compose 应用。
默认情况下该命令会读取名为 docker-compose.yml 或 docker-compose.yaml 的文件。
当然用户也可以使用 -f 指定其他文件名。通常情况下,会使用 -d 参数令应用在后台启动。
用法:
docker-compose down [options]
功能:
使用场景:
选项:
all:删除所有服务的镜像。
local:仅删除那些不带有 :(表示镜像标签)或 latest 标签的镜像(通常是构建时创建的镜像)。
示例:
1)停止并移除容器、网络和默认网络
docker-compose down
2)停止并移除容器、网络、卷以及镜像
docker-compose down --volumes --rmi all
3)仅移除构建时创建的本地镜像
docker-compose down --rmi local
4)指定配置文件
chmod +x /usr/local/bin/docker-compose0
注意事项:
chmod +x /usr/local/bin/docker-compose1
停止 Compose 应用相关的所有容器,但不会删除它们。
被停止的应用可以很容易地通过 chmod +x /usr/local/bin/docker-compose3 命令重新启动。
chmod +x /usr/local/bin/docker-compose1 命令用于停止通过 docker-compose.yml 文件定义并启动的所有容器。这个命令不会移除容器、网络或卷,它只是停止了容器的运行。
chmod +x /usr/local/bin/docker-compose2
chmod +x /usr/local/bin/docker-compose2 命令用于启动之前已经创建但已停止的容器。
chmod +x /usr/local/bin/docker-compose3
重启已停止的 Compose 应用。
如果用户在停止该应用后对其进行了变更,那么变更的内容不会反映在重启后的应用中,这时需要重新部署应用使变更生效。
chmod +x /usr/local/bin/docker-compose4
用于列出 Compose 应用中的各个容器。
输出内容包括当前状态、容器运行的命令以及网络端口。
用于删除已停止的 Compose 应用。它会删除容器和网络,但是不会删除卷和镜像。
语法:
chmod +x /usr/local/bin/docker-compose5
选项:
示例:
1)删除所有停止的容器
chmod +x /usr/local/bin/docker-compose6
这个命令会删除所有在 docker-compose.yml 文件中定义且当前已停止的容器。
2)删除所有容器
chmod +x /usr/local/bin/docker-compose6 -a
这个命令会删除所有在 docker-compose.yml 文件中定义的容器,无论它们是运行中的还是已停止的。
3)删除容器和卷
chmod +x /usr/local/bin/docker-compose6 -v
这个命令会删除所有已停止的容器以及由 docker-compose.yml 文件定义的卷(如果它们存在并且是容器专用的)。
4)使用指定的 Compose 配置文件
chmod +x /usr/local/bin/docker-compose9
这个命令会使用 my-compose.yml 文件来删除容器。
5)删除镜像
chmod +x /usr/local/bin/docker-compose6 --rmi local
这个命令会删除所有通过 docker-compose 构建且在本地存在的镜像。
注意事项:
docker-compose --version2 命令用于查看 Docker Compose 应用中各个服务的日志。这个命令非常有用,因为它可以帮助你诊断问题或监视服务的行为。
基本用法:
docker-compose --version1
SERVICE(可选):指定要查看日志的服务名称。如果未指定,则显示所有服务的日志。
常用选项:
示例:
1)查看所有服务的日志
docker-compose --version2
2)查看特定服务的日志
docker-compose --version2 web
3)查看特定服务的最后10行日志
docker-compose --version2 --tail 10 web
4)查看所有服务的日志并包含时间戳
docker-compose --version2 -T
你可以将配置拆分为多个文件:
docker-compose --version6
Compose file format | Docker Engine release |
Compose specification | 19.03.0+ |
3.8 | 19.03.0+ |
3.7 | 18.06.0+ |
3.6 | 18.02.0+ |
3.5 | 17.12.0+ |
3.4 | 17.09.0+ |
3.3 | 17.06.0+ |
3.2 | 17.04.0+ |
3.1 | 1.13.1+ |
3.0 | 1.13.0+ |
2.4 | 17.12.0+ |
2.3 | 17.06.0+ |
2.2 | 1.13.0+ |
2.1 | 1.12.0+ |
2.0 | 1.10.0+ |
示例:
docker-compose --version7
指定Docker Compose文件格式的版本。常用版本为3.8,3.7等。
1)container_name
指定自定义容器名称,而不是生成的默认名称。
docker-compose --version8
2)image
指定容器运行的镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
docker-compose --version9
3)build
指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。
sudo rm /usr/local/bin/docker-compose0
也可以使用 context 指令指定 Dockerfile 所在文件夹的路径(或者是git仓库的URL)。同时使用 dockerfile 指令指定 Dockerfile 文件名。
sudo rm /usr/local/bin/docker-compose1
注意:
如果同时指定了 image和 build, image 不在具有单独使用它的意义,而是指定了目前要构建的镜像的名称。 也就是说 Compose 会使用 build 指令中指定的 Dockerfile 构建的镜像,之后构建的镜像名称使用 image 中指定的名字 webapp:tag命名。
4)command
使用 command 可以覆盖容器启动后默认执行的命令。
sudo rm /usr/local/bin/docker-compose2
5)depends_on
设置依赖关系。解决容器的依赖、启动先后的问题。
sudo rm /usr/local/bin/docker-compose3
注意:web 服务不会等待 redis 和 db 完全启动 之后才启动。
6)environment
添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True 或 False。
sudo rm /usr/local/bin/docker-compose4
如果变量名称或者值中用到 true|false,yes|no 等表达布尔含义的词汇,最好放到引号里,避免 YAML 自动解析某些内容为对应的布尔语义。这些特定词汇如下:
sudo rm /usr/local/bin/docker-compose5
7)expose
暴露端口,但不映射到宿主机,只被连接的服务访问。
仅可以指定内部端口为参数:
sudo rm /usr/local/bin/docker-compose6
8)ports
映射端口信息。
宿主机端口 : 容器端口 (即:HOST:CONTAINER) 的格式,或者仅仅指定容器的端口(宿主机将会随机选择端口)。
sudo rm /usr/local/bin/docker-compose7
注意:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 并且没放到引号里,可能会得到错误结果,因为 YAML 会自动解析 xx:yy 这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采用引号括起来的字符串格式。
9)extra_hosts
添加主机名映射。类似 docker client --add-host。
sudo rm /usr/local/bin/docker-compose8
以上会在此服务的内部容器中 /etc/hosts 创建一个具有 ip 地址和主机名的映射关系:
sudo rm /usr/local/bin/docker-compose9
10)networks
配置容器连接的网络,引用顶级 networks 下的条目 。
docker-compose up [options]0
11)entrypoint
指定服务容器启动后执行的入口文件。
12)user
指定容器中运行应用的用户名。
13)working_dir
指定容器中工作目录。
14)restart
restart:
docker-compose up [options]1
指定容器退出后的重启策略为始终重启。该命令对保持服务始终运行十分有效,在生产环境 中推荐配置为 always 或者 unless-stopped 。
docker-compose up [options]2
注:swarm 集群模式,请改用 restart_policy。
15)aliases
aliases :同一网络上的其他容器可以使用服务名称或此别名来连接到对应容器的服务。
docker-compose up [options]3
16)healthcheck
用于检测 docker 服务是否健康运行。
docker-compose up [options]4
17)env_file
从文件添加环境变量。可以是单个值或列表的多个值。
docker-compose up [options]5
也可以是列表格式:
docker-compose up [options]6
18)Compose中的环境变量
你可以使用.env
文件设置docker-compose.yml
中使用的变量:
docker-compose up [options]7
.env
文件:
docker-compose up [options]8
将主机的数据卷或者文件挂载到容器里。
docker-compose up [options]9
数据卷所挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)。
该指令中路径支持相对路径:
docker-compose up -d0
1)未显式声明网络环境
使用docker-compose up启动容器后,这些容器都会被加入app_default网络中。使用docker network ls可以查看网络列表,docker network inspect 可以查看对应网络的配置。
docker-compose up -d1
2)networks关键字指定自定义网络
例如:下面的docker-compose.yml文件,定义了front和back网络,实现了网络隔离。其中proxy和db之间只能通过app来实现通信。其中,custom-driver-1并不能直接使用,你应该替换为host, bridge, overlay等选项中的一种。
docker-compose up -d2
3)配置默认网络
docker-compose up -d3
4)使用已存在的网络
docker-compose up -d4
docker-compose.yml
简洁:使用多个文件来分离开发和生产配置。docker-compose.yml
放入版本控制系统中,以管理跨环境的配置。version: '3.8' # 指定Compose文件的版本 services: # 定义多个服务 web: # Web服务,通常是前端或后端的应用 image: nginx:latest # 使用Nginx镜像 ports: - "80:80" # 将容器的80端口映射到主机的80端口 volumes: - ./web:/usr/share/nginx/HTML # 挂载本地目录到容器中 environment: - NGINX_HOST=localhost # 设置环境变量 - NGINX_PORT=80 networks: - frontend # 连接到前端网络 depends_on: - app # 该服务将在'app'服务启动后才启动 docker-compose up [options]2 # 在容器崩溃后总是重启 app: # 应用服务,可以是任何语言的后端服务 build: # 从Dockerfile构建镜像 context: ./app # Dockerfile所在的目录 dockerfile: Dockerfile # 使用的Dockerfile名称 ports: - "3000:3000" # 将容器的3000端口映射到主机的3000端口 volumes: - ./app:/usr/src/app # 挂载本地代码目录到容器中 environment: - NODE_ENV=development # 设置环境变量 - PORT=3000 networks: - frontend # 连接到前端网络 - backend # 连接到后端网络 depends_on: - db # 该服务将在'db'服务启动后才启动 restart: on-failure # 仅在容器非正常退出时重启 db: # 数据库服务,使用MySQL image: mysql:5.7 # 使用MySQL 5.7镜像 volumes: - db_data:/var/lib/mysql # 持久化MySQL数据到命名卷 environment: MYSQL_ROOT_PASSWORD: example # MySQL root用户的密码 MYSQL_DATABASE: example_db # 自动创建的数据库名称 MYSQL_USER: user # 创建的用户名称 MYSQL_PASSWORD: password # 用户密码 networks: - backend # 连接到后端网络 restart: unless-stopped # 仅在手动停止时不重启 volumes: # 定义命名卷,用于数据持久化 db_data: # MySQL数据卷 networks: # 定义自定义网络 frontend: # 前端网络,连接web和app服务 backend: # 后端网络,连接app和db服务
本文部分内容参考博文:
1、Docker Compose配置详解:https://www.cnblogs.com/daikaiqiang/p/18382371
2、Docker Compose 菜鸟教程:https://www.runoob.com/docker/docker-compose.html
至此本文就全部介绍完了,如果觉得对您有所启发请记得点个赞哦!!!
此文由博主精心撰写转载请保留此原文链接:https://www.cnblogs.com/xyh9039/p/18540766
版权声明:如有雷同纯属巧合,如有侵权请及时联系本人修改,谢谢!!!