链接: https://www.cnblogs.com/wtzbk/p/15125977.html
1、docker带来的问题
- 多次使用 Dockerfile Build Image 或者 DockerHub 拉取 Image;
- 需要创建多个 Container,多次编写启动命令;
- Container 互相依赖的如何进行管理和编排;
2、docker compose的好处
- 提供工具用于定义和运行多个 docker 容器应用;
- 使用 yaml 文件来配置应用服务(docker-compse.yml);
- 可以通过一个简单的命令 docker-compse up 可以按照依赖关系启动所有服务;
- 可以通过一个简单的命令 docker-compose down 停止所有服务;
- 当一个服务需要的时候,可以很简单地通过 --scale 进行扩容;
3、docker compose的介绍
- Docker Compose 是一个工具,用于定义和运行多容器应用程序的工具;
- Docker Compose 通过 yml 文件定义多容器的 docker 应用;
- Docker Compose 通过一条命令根据 yml 文件的定义去创建或管理多容器;
4、安装
1)下载:https://github.com/docker/compose/releases
注:https://dn-dao-github-mirror.daocloud.io/docker/compose/releases ,下载太慢的话可以去这个网址下载
2)拷贝:将下载的文件拷贝到服务器上的 /usr/local/bin/docker-compose
目录
3)赋权:sudo chmod +x /usr/local/bin/docker-compose
4)检查:docker-compose --version
5、版本兼容性
docker-compose 与 docker 引擎之间有版本对应关系,需要检查是否满足要求。
6、常见的命令
注:可以 docker-compose --help 查看帮助
#构建启动 nignx 容器
docker-compose up -d nginx
#进入 nginx 容器中
docker-compose exec nginx bash
#将会停止UP命令启动的容器,并删除容器
docker-compose down
#显示所有容器
docker-compose ps
#重新启动 nginx 容器
docker-compose restart nginx
#构建镜像
docker-compose build nginx
#不带缓存的构建
docker-compose build --no-cache nginx
#查看nginx的日志
docker-compose logs nginx
#查看nginx的实时日志
docker-compose logs -f nginx
#验证(docker-compose.yml)文件配置,
#当配置正确时,不输出任何内容,当文件配置错误,输出错误信息
docker-compose config -q
#以json的形式输出nginx的docker日志
docker-compose events --json nginx
#暂停nignx容器
docker-compose pause nginx
#恢复ningx容器
docker-compose unpause nginx
#删除容器
docker-compose rm nginx
#停止nignx容器
docker-compose stop nginx
#启动nignx容器
docker-compose start nginx
7、举个栗子
说明:启用一个带证书和鉴权的第三方仓库
1)编写 docker-compose.yml 文件
version: '3.0'
services:
third-part-registry:
image: registry:latest
container_name: third-part-registry
ports:
- 444:5000/tcp
environment:
- REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt
- REGISTRY_HTTP_TLS_KEY=/certs/server.key
- REGISTRY_AUTH=htpasswd
- REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
volumes:
- /root/registry/external_repository/data:/var/lib/registry
- /root/registry/external_repository/certs:/certs
- /root/registry/external_repository/auth:/auth
restart: always
2)检查 docker-compose.yml 语法是否正确:
命令:docker-compose config
说明:执行上面的命令,如果不发生报错,说明语法没有发生错误,注意 yml 文件需要在当前目录下,同时会生成下面的显示,即在原始 yml 的基础上补齐一些默认的选项。
name: external_repository
services:
third-part-registry:
container_name: third-part-registry
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/server.crt
REGISTRY_HTTP_TLS_KEY: /certs/server.key
image: registry:latest
networks:
default: null
ports:
- mode: ingress
target: 5000
published: "444"
protocol: tcp
restart: always
volumes:
- type: bind
source: /root/registry/external_repository/data
target: /var/lib/registry
bind:
create_host_path: true
- type: bind
source: /root/registry/external_repository/certs
target: /certs
bind:
create_host_path: true
- type: bind
source: /root/registry/external_repository/auth
target: /auth
bind:
create_host_path: true
networks:
default:
name: external_repository_default
3)使用上面的 yml 启动:docker-compose up -d // -d 表示在后端运行
4)查看启动的 docker 容器:
[root@HN01 external_repository]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b8eede952bf0 registry:latest "/entrypoint.sh /etc…" About a minute ago Up 9 seconds 0.0.0.0:444->5000/tcp third-part-registry