Compose介绍
docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
安装插件
1. yum update 2. yum install docker-compose-plugin 3. 4. # 安装完成后查看版本号 5. docker compose version
docker-compose常用命令
1. # 查看配置命令 2. $ docker compose config 3. 4. # 构建并后台启动 5. $ docker compose up -d 6. 7. # 将会停止UP命令启动的容器,并删除容器 8. $ docker compose down 9. 10. #重新启动nginx容器 11. $ docker compose restart 12. 13. # 启动已存在的容器命令 14. $ docker compose start 15. 16. # 停止正在运行的容器命令 17. $ docker compose stop 18. 19. #暂停容器 20. $ docker compose pause 21. 22. # 恢复容器 23. $ docker compose unpause 24. 25. # 构建镜像 26. $ docker compose bulid 27. 28. # 下载镜像 29. $ docker compose pull 30. 31. # 删除容器 32. $ docker compose rm 33. 34. # 查看运行的镜像 35. $ docker compose ps 36. 37. # 查看进程 38. $ docker compose top 39. 40. # 查看服务日志输出 41. $ docker compose logs
Docker-Compose模板文件
Compose模板文件默认路径是当前目录下的docker-compose.yml,可以使用.yml或.yaml作为文件扩展名。 Docker-Compose标准模板文件应该包含version、services、networks 三大部分,最关键的是services和networks两个部分。
image
image是指定服务的镜像名称或镜像ID
1. services: 2. web: 3. image: hello-world
build
利用Dockerfile自动构建镜像,然后使用镜像启动服务容器。
1. build: 2. context: ../ 3. dockerfile: path/of/Dockerfile
command
使用command可以覆盖容器启动后默认执行的命令。
command: bundle exec thin -p 3000
container_name
指定自定义容器名称
container_name: app
depends_on
表示服务之间的依赖关系。
1. version: "3" 2. services: 3. web: 4. build: . 5. depends_on: 6. - redis 7. redis: 8. image: redis 9. 10. #docker compose up:按依赖顺序启动服务,redis在web之前启动。 11. #docker-compose stop:按依赖顺序停止服务,web在redis之前停止。
pid
将PID模式设置为主机PID模式,跟主机系统共享进程命名空间。
pid: "host"
ports
映射端口
1. ports: 2. - "8000" 3. - "49022:22" 4. - "127.0.0.1:8001:8001"
extra_hosts
添加主机名映射。使用与docker客户端–add-host类似
1. extra_hosts: 2. - "somehost:162.242.195.82" 3. - "otherhost:50.31.209.229"
volumes
目录映射,可以直接使用 [主机:容器]格式,或者使用[主机:容器:ro]格式,后者对于容器来说,数据卷是只读的,可以有效保护宿主机的文件系统。
1. volumes: 2. # 只指定一个路径,Docker会自动在创建一个目录。 3. - /var/lib/mysql 4. # 主机使用绝对路径和容器目录映射 5. - /opt/data:/var/lib/mysql 6. # 以Compose配置文件的目录为中心的相对路径和容器目录映射 7. - ./cache:/tmp/cache 8. # 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。 9. - ~/configs:/etc/configs/:ro
dns
自定义DNS服务器。
1. dns:8.8.8.8 2. dns: 3. - 8.8.8.8 4. - 9.9.9.9
dns_search
配置DNS搜索域。
1. dns_search:example.com 2. dns_search: 3. - domain1.example.com 4. - domain2.example.com
entrypoint
设置入口命令
1. entrypoint: /code/entrypoint.sh 2. entrypoint: ["php", "-d", "memory_limit=-1", "vendor/bin/phpunit"] 3. entrypoint: java -jar penngo_test.jar
env_file
从文件添加环境变量
1. env_file: .env 2. env_file: 3. - ./common.env 4. - ./apps/web.env 5. - /opt/runtime_opts.env
environment
添加环境变量。
1. environment: 2. RACK_ENV: development 3. SHOW: 'true' 4. SESSION_SECRET: 5. 6. environment: 7. - RACK_ENV=development 8. - SHOW=true 9. - SESSION_SECRET
external_links
链接到docker-compose.yml外部的容器
1. external_links: 2. - redis_1 3. - project_db_1:mysql 4. - project_db_1:postgresql
cap_add
增加指定容器的内核能力(capacity)。
1. cap_add: 2. - ALL
cap_drop
去掉指定容器的内核能力(capacity)。
1. cap_drop: 2. - NET_ADMIN
cgroup_parent
创建了一个cgroup组名称为cgroups_1:
cgroup_parent: cgroups_1
devices
指定设备映射关系
1. devices: 2. - "/dev/ttyUSB1:/dev/ttyUSB0"
expose
暴露端口,但不映射到宿主机,只允许能被连接的服务访问。
1. expose: 2. - "3000" 3. - "8000"
labels
为容器添加Docker元数据(metadata)信息。
1. labels: 2. - "com.example.description=Accounting webapp" 3. - "com.example.department=Finance" 4. - "com.example.label-with-empty-value"
links
链接到其它服务中的容器
1. links: 2. - db 3. - db:database 4. - redis
log_driver
指定日志驱动类型。目前支持三种日志驱动类型:
1. log_driver: "json-file" 2. log_driver: "syslog" 3. log_driver: "none"
log_opt
日志驱动的相关参数。
net
设置网络模式。
1. net: "bridge" 2. net: "none" 3. net: "host"
实践操作
- docker-compose.yml文件
1. version: "3" 2. services: 3. mysql: 4. image: mysql:latest 5. container_name: mysql_slaver11 6. restart: always 7. privileged: true 8. ports: 9. - 3307:3306 10. environment: 11. MYSQL_ROOT_PASSWORD: 123456 12. TZ: Asia/Shanghai 13. volumes: 14. - /wuming/mysql/slaver11/data:/var/lib/mysql 15. - /wuming/mysql/slaver11/log:/var/log/mysql 16. - /wuming/mysql/slaver11/conf/my.cnf:/etc/mysql/my.cnf 17. mycat: 18. image: manondidi/mycat:latest 19. container_name: mycat 20. restart: always 21. ports: 22. - 8066:8066 23. volumes: 24. - /wuming/mycat/conf:/usr/local/mycat/conf 25. - /wuming/mycat/logs:/usr/local/mycat/logs 26. redis: 27. image: redis:latest 28. container_name: redis_master 29.
- 端口测试
1. netstat -npl | grep 3306 2. netstat -npl | grep 3307 3. netstat -npl | grep 8066
- 构建并后台启动
进入docker-compose对应的文件目录下,执行以下命令
1. # 对应目录下运行docker-compose文件 2. docker compose up -d
- 测试端口是否可以访问以及容器是否启动
1. # 安装telnet 2. yum -y install telnet 3. # 查看对方端口是否开 4. telnet 192.168.10.143 3307 5. docker ps