Docker Compose
官方下载连接:https://docs.docker.com/compose/install/compose-plugin/#installing-compose-on-linux-systems
docker-compose是docker官方的开源项目,负责实现对docker容器集群的快速编排,可以管理多个docker容器组成一个应用,你需要定义一个YAML格式的配置文件,例:docker-compose.yml 写好多个容器之间的调用关系,然后,只要一个命令,就能同时启动、关闭这些容器
- 单机容器编排工具
- docker composr+docker swarm实现集群管理,未来我们通过k8s实现集群管理
- docker三剑客之一:docker machine(管理虚拟机) , docker compose(容器编排),docker swarm(集群)
- docker compose需要单独安装(epel源就有,版本低)语法yaml格式
1. compose极速上手指南
#课上使用yum安装的
[root@docker01 /]# yum install -y docker-compose
[root@docker01 /docker]# mkdir -p /server/compose/run-nginx
- 官方
#第一步
curl -SL https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
#第二步
[root@harbor ~]# chmod +x /usr/local/bin/docker-compose
[root@harbor ~]# docker-compose --version
#要是卸载的话
rm /usr/local/bin/docker-compose
- 支持的文件格式
compose.yaml
compose.yml
docker-compose.yaml
docker-compose.yml
默认支持的compose.yml
- 格式
#使用compose版本型号
version: "3.3"
#开头--注意有s 服务名
services:
#自定义容器名--最后会显示当前文件名加上这个容器名
web_ngx:
#起一个容器名,与上面保持一致
build: .
#构建镜像
container_name: web_ngx
#镜像
image: "nginx:1.20.2-alpine"
#指定管理的容器名(容器互联)
links:
- web_php
#映射的端口
ports:
- "8000:80"
#数据卷挂载,左边宿主机右边容器
volumes:
- /app/service:/data
#设置网络(网络互联)
networks:
- 网络名
#依赖于哪个容器,先启动哪个后启动哪个
depends_on:
- 第一个容器名
- 第二容器名
#被管理容器+镜像
web_php:
image: "php:7-fpm"
#设置网络(网络互联)
networks:
- 网络名
#这个相当于创建一个网络(定格写)
networks:
网络名
## 2. 启动命令
docker-compose up -d
-
redis参考写法
-
数据库参考写法
!
docker-compose命令格式 | 这个命令包含了docker container 和 docker image 命令 |
---|---|
容器命令 | |
up -d | up == run 创建并运行容器启动的时候后台运行类似于 docker run -d |
stop/start/restart | 关闭、开启、重启容器 |
ps | 查看容器运行情况 只有-q选项 |
top | 容器进程信息 |
logs | 容器日志 |
rm | 删除容器(需要容器已经关闭) |
镜像命令 | |
image | 查看镜像 |
- 修改docker-compose与生效
如果都docker-compose简单修改端口、数据卷、docker-compose up -d 会自动识别,重新创建容器
如果容器的名字也改了、会造成新旧容器的端口冲突,会失败,可以 up -d --remove-orphans 删除之前容器或失效容器 最后这个命令报错会提示命令复制即可
#管理指定的容器
version: "3.3"
services:
web_nginx:
image: "nginx:1.20.2-alpine"
links:
- "web_php"
ports:
- "8082:80"
web_php:
image: "php:7-fpm"
#启动运行
[root@docker01 /server/compose/run-nginx]# docker-compose up -d
#查看进程状态
[root@docker01 /server/compose/run-nginx]# docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------
runnginx_web_nginx_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8082->80/tcp,:::8082->80/tcp
runnginx_web_php_1 docker-php-entrypoint php-fpm Up 9000/tcp
3. compose文件的常用指令
- 挂载数据卷
- 容器之间的依赖,先后顺序
- 与Dockerfile用法不同
- 官方版本:https://docs.docker.com/compose/compose-file/compose-file-v3/
#depends_on:依赖,先启动指定的容器然后在启动当前容器
volumes: 数据卷
4. 案例-docker-compose与dockerfile
- ubuntu
- php
- 配置文件
- 代码目录
学习搭建思路:
- 先准备宿主机上一个ubuntu系统,进入到容器先手动搭建一遍
- 另起一个窗口在宿主机上准备好nginx相关配置文件,之后传送过去
#docker-compose调用dockerfile
#通过调用这个compose可以执行Dockerfile
version: "3.3"
services:
compose:
build: .
ports:
- "80:80"
expose:
- "9000"
#这个可以compose,可以dockefile--标记区分
FROM ubuntu:20.04
LABEL auther=quyi sys_version=20.04 php_version=php-7.4-fpm
RUN sed -i 's#archive.ubuntu.com|security.ubuntu.com#mirrors.aliyun.com#g' /etc/apt/sources.list\
&& apt update\
&& apt install -y nginx\
&& apt install -y php7.4-fpm\
&& mkdir -p /app/code/kode/\
&& mkdir -p /app/scripts/
ADD kodexp.tar.gz /app/code/kode/
COPY nginx.conf /etc/nginx/nginx.conf
COPY fg.conf /etc/nginx/conf.d/fg.conf
COPY www.conf /etc/php/7.4/fpm/pool.d/www.conf
COPY entrypoint.sh /app/scripts/
RUN chown -R www-data.www-data /app/code/kode/\
&& chmod 755 /app/scripts/entrypoint.sh
CMD ["/app/scripts/entrypoint.sh"]
[root@docker01 /docker/Dockerfile-ubuntu-php]# ll
total 13752
-rw-r--r-- 1 root root 113 May 26 23:56 docker-compose.yml
-rw-r--r-- 1 root root 638 May 26 23:36 Dockerfile
-rw-r--r-- 1 root root 62 May 26 23:00 entrypoint.sh
-rw-r--r-- 1 root root 330 May 26 23:31 fg.conf
-rw-r--r-- 1 root root 118 May 17 06:13 index.php
-rw-r--r-- 1 root root 14035010 May 25 17:10 kodexp.tar.gz
-rw-r--r-- 1 root root 1490 May 26 22:30 nginx.conf
-rw-r--r-- 1 root root 19595 May 26 23:31 www.conf
WARNING: Image for service compose was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
#重复的执行的镜像已生成,因为它不存在,要重建镜像,可以使用如下命令
5. 小结
- docker build构建镜像/docker run 运行容器
- 书写docker compose 的时候,通过docker run自行测试
- docker-compose指令说明:https://docs.docker.com/compose/compose-file/compose-file-v3/