docker compose
docker compose介绍
docker compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。也可以理解为,将docker run命令的参数写到compose配置文件中,创建启动容器。
docker compose安装
执行命令:
]# curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose ]# chmod +x /usr/bin/docker-compose
docker compose组成
名称 | 说明 | 示例 |
---|---|---|
version | 指定compose版本 | version: "3.8" |
services | 定义服务 | services: |
networks | 定义网络 | |
volumes | 定义数据卷 | volumes: nginx1: |
services
参数 | 说明 | 示例 |
---|---|---|
image | 指定使用的镜像名称或镜像ID 如果指定了build,需要构建镜像,则是新构建镜像的名称 | image: tomcat:8.5.85 |
build | 指定Dockerfile所在的路径,用于构建自定义镜像 与image互斥的,如果image指定了一个存在的镜像,那么不会执行build | build: context: ./nginx1 指定从当前路径的nginx目录下进行构建 dockerfile: nginxbuild 指定dockerfile文件nginxbuild位置是nginx/nginxbuild |
container_name | 指定容器名称 | container_name: nginx1 |
command | 指定容器启动时要执行的命令 | command: tail -f /dev/null |
ports | 指定主机和容器之间的端口映射关系 | ports: - 18080:18080 - 18081:18081 |
volumes | 指定主机和容器之间的目录或文件映射关系 | volumes: - /app:/opt/app 映射本地目录 - nginx2:/nginx 挂载数据卷 |
user | 指定容器运行的用户 | user: root |
environment | 设置容器中的环境变量 | environment: - "va1=str1" 指定变量va1的值str1 |
networks | 指定容器所连接的网络 | networks: networks: 需要在networks中指定,详情见networks |
depends_on | 指定容器启动所依赖的其他容器 | |
restart | 指定容器在退出时的重启策略 | restart: always |
privileged | 是否配置特权模式 | privileged: true |
healthcheck | 配置容器的健康检查 | |
links | 连接到其他容器的服务 |
volumes
示例1:
volumes:
datavolu: 指定数据卷命名为datavolu,如果没有则进行创建
示例2:
volumes:
datavolu: 将创建的数据卷命名为datavolu
name: data1 将数据卷datavolu的别名设置为data1,即通过docker volumes ls查看到的卷名称
示例3:
volumes:
datavolu: 容器启动时挂载数据卷data1
external: true 挂载已有数据卷
networks
示例1:
networks:
webnet: 创建网络webnet
示例2:
networks:
webnet: 指定使用网络webnet,webnet网络已建立
external: true
示例3:
networks:
webnet: 网络名称webnet
name: net1 网络别名设置为net1,即docker network ls所显示的网络名称
示例4:
networks:
webnet: 网络名称
driver: bridge 网络模式为桥接
ipam:
driver: default
config: 定义网络信息
- subnet: "172.20.0.0/16" 定义网段
ip_range: "172.20.2.0/24"
gateway: "172.20.2.1" 定义网关
compose文件执行方式
1)docker-compose up -d docker compose文件名称为docker-compose.yml时
2)docker-compose -f nginx-compose.yml up -d nginx-compose.yml是compose文件名称
3)docker-compose -f nginx_php-compose.yml up -d --build 启动容器时需要进行镜像构建
docker compose文件名称为docker-compose.yml,在执行时可以不用指定compose文件路径、名称,即第一种执行方式
如果docker cmpose文件名称为自定义时,在执行时需要指定compose文件路径、名称,即第二种执行方式
如果需要进行镜像构建,则要指定--build参数,即第三种执行方式
注意,单个compose文件需要放到单独的目录中,如果将不同的compose文件放到一起,执行一个compose文件时,可能会影响到其他compose文件中定义的容器
docker compose示例
nginx容器
version: "3.8" services: ##指定服务名称:webnginx webnginx: ##指定镜像名称 image: nginx:1.24.0 ##指定容器名称 container_name: nginx1 ##指定映射端口 ports: - 20002:18080 - 20003:18081 ##指定挂载数据卷,映射目录 volumes: - /app:/opt/app - nginx2:/nginx ##指定重启策略为always restart: always ##指定数据卷 volumes: nginx2: ##挂载已有数据卷而不是新建 external: true
启动compose
alpine
启动alpine容器
version: "3.8" services: alp1: image: alpine:3.18 container_name: alpserver ports: - "18080:18080" networks: - alpnet command: /bin/sh -c "while true; do sleep 10; done" ##容器启动时,启动的主进程 networks: alpnet:
nginx+php
一个项目中,同时启动nginx,php容器
示例1:
version: "3.8" services: nginx1: image: nginx:1.24.0 ports: - "20002:18080" volumes: - "/app:/app" networks: - webnet depends_on: - php1 php1: image: php:7.4.33 volumes: - "/app:/app" networks: - webnet networks: webnet:
示例2:
启动nginx和php容器时,进行镜像的构建
docker-compose文件
version: "3.8" services: nginxweb1: ##nginx服务 ##新镜像名称ngser1:1 image: ngser:1 container_name: nginx1 ##从当前路径下构建ngser1镜像,dockerfile文件为nginxbuild build: context: . dockerfile: nginxbuild ports: - "20002:18080" volumes: - "/app:/app" networks: - webnet1 depends_on: - phpserver1 phpserver1: ##php服务 ##新镜像名称为phpser:1 image: phpser:1 container_name: php1 ##从当前路径下构建phpser1:1镜像,dockerfile文件为phpbuild build: context: . dockerfile: phpbuild volumes: - "/app:/app" networks: - webnet1 networks: webnet1:
nginxbuild文件
FROM nginx:1.24.0 ADD test.conf /nginx/conf/vhosts RUN usermod -u 1020 nginx && \ groupmod -g 1020 nginx && \ mkdir /app && \ chown -R nginx:nginx /app
phpbuild文件
FROM php:7.4.33 ADD www.conf /php/etc/php-fpm.d RUN useradd nginx -u 1020 -d /php &&\ groupmod -g 1020 nginx &&\ mkdir /app && \ chown -R nginx:nginx /php && \ chown -R nginx:nginx /app