Docker之Docker-compose使用
1. docker-compose介绍
Compose作为一个独立的工具,本身并没有与Docker客户端进行集成 ,需要单独安装。(注:在安装之前,主机上必须先安装好Docker引擎)
定义和运行多个docker容器的工具
一个文件 docker-compose.yml
一条命令 docker-compose up
2. docker-compose安装
1. RPM安装
yum install -y docker-compose-plugin
2. 二进制方式
curl -SL https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v
3. Docker-compose命令基础
我的样例
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '85:80'
- '86:81'
- '8443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
1. 指定配置文件
-f 用来指定配置文件的,该参数可以使用多次。
docker-compose -f docker-compose.yml -f docker-compose.admin.yml up
2. 指定项目名称
docker-compose启动容器时会默认地把当前的目录名称设置为容器名称的前缀
-p 用来指定容器名称
docker-compose -p yang up
3. 构建镜像
docker-compose build
4. 检查配置文件
docker-compose config 输出整个配置文件的内容
docker-compose config -q 不输出整个配置文件的内容,除非有语法问题
5. 创建容器(已废弃)
docker-compose create 只创建容器不运行
6. 进入服务容器
docker-compose exec app /bin/bash
7. 杀死服务容器
docker-compose kill app
docker-compose -f docker-compose.yml kill
8. 查看服务容器日志
docker-compose logs app
docker-compose -f docker-compose.yml logs
9. 暂停服务容器
docker-compose pause app
docker-compose -f docker-compose.yml pause
docker-compose unpause app 解除暂停
10. 查看容器与镜像
docker-compose ps
docker-compose ps -q 输出容器ID
docker-compose images
11. 重启服务容器
docker-compose restart app
docker-compose -f docker-compose.yml restart
12. 删除项目容器
docker-compose rm app 删除停止的容器
docker-compose rm -f app 强制删除停止的容器,不提示
13. 启动服务容器
docker-compose start app
docker-compose -f docker-compose.yml start
14. 停止服务容器
docker-compose stop app
docker-compose -f docker-compose.yml stop
15. 查看进程状态
docker-compose top app
docker-compose -f docker-compose.yml top
16. 启动项目
docker-compose up -d
docker-compose up --scale app=5 启动5个服务
4. Docker-compose配置文件
1. 样例
version: "3.9"
services: #用于定义不同的应用服务
myapp:
build: ./myapp
ports:
- "80:80"
container_name: myapp
depends_on: #指定服务间的依赖关系。
- database
networks:
- mynet
database:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 123456
ports:
- "3306:3306"
container_name: db
volumes:
- "mydata:/var/lib/mysql" #数据卷挂载
networks:
- mynet
networks:
mynet:
driver: bridge
volumes:
mydata:
2. image
指定服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取这个镜像。
image: redis
image: mysql:5.7
image: a4bc65fd
3. build
1. 除了可以基于指定的镜像,还可以基于一份Dockerfile,这个构建标签就是build,它可以指定Dockerfile所在文件夹的路径。
build: /path/to/build/dir 绝对路径
build: ./dir 相对路径
2. 如果要指定Dockerfile文件
build:
context: ./dir
dockerfile: Dockerfile
3. 如果同时指定了image和build两个标签,那么compose会构建镜像并且把镜像命名为image后面的那个名字
build: ./dir
image: webapp:tag
4. 构建过程中指定环境变量
build:
context: .
args:
buildno:1
password: secret
4. command
使用command可以覆盖容器启动后默认执行的命令
5. configs

source: Docker存在的配置的名称
target: 容器内部的目标路径
uid/gid: 指定配置文件存放时的用户归属
mode: 指定配置文件的权限
6. container_name
指定容器的名称
7. depends_on
解决容器的依赖和启动先后的问题
8. environment
设置镜像变量,它可以将变量保存到镜像里面,启动后的容器也会包含这些变量设置
9. networks
加入网络,这是一个顶级的选项,与服务,版本等选项同级
10. logging
用于配置日志服务
logging:
driver: syslog
options:
syslog-address: "tcp://192.168.1.100:123"
11. ports
映射端口的标签
ports:
- "3000"
- "3000-3005"
- "8000:8000"
- "127.0.0.1:8000:8000"
12. secrets
为每个服务配置独立的secrets,与config使用方法一致
13. volumes
volumes:
- /var/lib/mysql 挂载到容器内部的路径
- /opt/data:/var/lib/mysql 使用绝对路径
- datavolume:/var/lib/mysql 已经存在的数据卷
5. docker-compose.yml实例
1. 实例1
version: '2'
services:
log:
image: goharbor/harbor-log:v1.7.1
container_name: harbor-log
restart: always
dns_search: .
cap_drop:
- ALL
cap_add:
- CHOWN
- DAC_OVERRIDE
- SETGID
- SETUID
volumes:
- /var/log/harbor/:/var/log/docker/:z
- ./common/config/log/:/etc/logrotate.d/:z
ports:
- 127.0.0.1:1514:10514
networks:
- harbor
registry:
image: goharbor/registry-photon:v2.6.2-v1.7.1
container_name: registry
restart: always
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
volumes:
- /data/registry:/storage:z
- ./common/config/registry/:/etc/registry/:z
- ./common/config/custom-ca-bundle.crt:/harbor_cust_cert/custom-ca-bundle.crt:z
networks:
- harbor
dns_search: .
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "registry"
registryctl:
image: goharbor/harbor-registryctl:v1.7.1
container_name: registryctl
env_file:
- ./common/config/registryctl/env
restart: always
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
volumes:
- /data/registry:/storage:z
- ./common/config/registry/:/etc/registry/:z
- ./common/config/registryctl/config.yml:/etc/registryctl/config.yml:z
networks:
- harbor
dns_search: .
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "registryctl"
postgresql:
image: goharbor/harbor-db:v1.7.1
container_name: harbor-db
restart: always
cap_drop:
- ALL
cap_add:
- CHOWN
- DAC_OVERRIDE
- SETGID
- SETUID
volumes:
- /data/database:/var/lib/postgresql/data:z
networks:
- harbor
dns_search: .
env_file:
- ./common/config/db/env
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "postgresql"
adminserver:
image: goharbor/harbor-adminserver:v1.7.1
container_name: harbor-adminserver
env_file:
- ./common/config/adminserver/env
restart: always
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
volumes:
- /data/config/:/etc/adminserver/config/:z
- /data/secretkey:/etc/adminserver/key:z
- /data/:/data/:z
networks:
- harbor
dns_search: .
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "adminserver"
core:
image: goharbor/harbor-core:v1.7.1
container_name: harbor-core
env_file:
- ./common/config/core/env
restart: always
cap_drop:
- ALL
cap_add:
- SETGID
- SETUID
volumes:
- ./common/config/core/app.conf:/etc/core/app.conf:z
- ./common/config/core/private_key.pem:/etc/core/private_key.pem:z
- ./common/config/core/certificates/:/etc/core/certificates/:z
- /data/secretkey:/etc/core/key:z
- /data/ca_download/:/etc/core/ca/:z
- /data/psc/:/etc/core/token/:z
- /data/:/data/:z
networks:
- harbor
dns_search: .
depends_on:
- log
- adminserver
- registry
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "core"
portal:
image: goharbor/harbor-portal:v1.7.1
container_name: harbor-portal
restart: always
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
- NET_BIND_SERVICE
networks:
- harbor
dns_search: .
depends_on:
- log
- core
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "portal"
jobservice:
image: goharbor/harbor-jobservice:v1.7.1
container_name: harbor-jobservice
env_file:
- ./common/config/jobservice/env
restart: always
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
volumes:
- /data/job_logs:/var/log/jobs:z
- ./common/config/jobservice/config.yml:/etc/jobservice/config.yml:z
networks:
- harbor
dns_search: .
depends_on:
- redis
- core
- adminserver
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "jobservice"
redis:
image: goharbor/redis-photon:v1.7.1
container_name: redis
restart: always
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
volumes:
- /data/redis:/var/lib/redis
networks:
- harbor
dns_search: .
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "redis"
proxy:
image: goharbor/nginx-photon:v1.7.1
container_name: nginx
restart: always
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
- NET_BIND_SERVICE
volumes:
- ./common/config/nginx:/etc/nginx:z
networks:
- harbor
dns_search: .
ports:
- 80:80
- 443:443
- 4443:4443
depends_on:
- postgresql
- registry
- core
- portal
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "proxy"
networks:
harbor:
external: false
2. 实例2,wordprees博客部署
创建一个空文件夹,在文件夹下创建一个docker-compose.yml,内容如下:
version: '3'
services:
db:
image: mysql:5.7
volumes:
- "./.data/db:/var/lib/mysql"
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
links:
- db
ports:
- "8000:80"
restart: always
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
启动docker-compose up -d

浙公网安备 33010602011771号