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