Docker Compose基础
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/