大致原理介绍

Docker Compose的优点:

  1. 声明式yaml语法, 更加可读和可维护.
  2. 快速启动和停止
  3. 容器间的依赖管理, Docker Compose允许定义多个容器之间的依赖关系和顺序, 简化了复杂应用的部署.

执行逻辑

  1. 定义应用配置: 首先需要创建一个YAML文件(通常命名为docker-compose.yml),用于定义应用的组件、服务、网络和卷等.
  2. 构建镜像: 默认会先读取本地镜像, 没有则向云端拉取.
  3. 启动容器: 使用docker-compose up -d命令来启动应用的容器. 这个命令会自动读取当前目录的docker-compose.yml文件. 此时会按规则执行yml文件所定义的内容.
  4. 扩展和更新: 如果需要更新, 可以编辑docker-compose.yml文件, 然后并使用docker-compose down停止容器, 然后再重新执行启动命令启动容器.

如何编写

首先给出一个简单的nginx的docker-compose.yml文件示例, 其中的解释已在文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version: '3'
services:
nginx:
image: nginx:latest # 镜像名字和版本
container_name: ${CONTAINER_NAME}
# $开头代表是环境变量, 会默认读取当前目录或者用户目录的.env文件.
# 当然, 也可以直接写 nginx名字
ports:
- 80:80 # 端口映射, 前面是主机端口, 后面是容器端口
- 443:443
volumes:
# 文件卷映射, 冒号前面为主机文件夹, 后面为容器文件夹
# 要先创建本地文件/目录, 不然会报错
- ./conf/conf.d:/etc/nginx/conf.d
- ./conf/nginx.conf:/etc/nginx/nginx.conf
- ./conf/ssl:/etc/nginx/ssl
- ./log:/var/log/nginx
- ./html:/usr/share/nginx/html
labels:
createdBy: "Apps" # 自定义标签
restart: always # 重启规则

networks:
diy-network: # 可以自定义docker网络, 也可以不写, 用默认的
external: true

常见项目的主要的解释如上, 更多内容就自行探索咯

一些注意事项

1.开放端口时, 本地端口注意不要冲突

2.关于网络组, 同一个网络组里面的容器才可以直接互相通信, 否则必须要走网桥

3.挂载文件卷时, 要记得先创建本地目录文件.
挂载的逻辑为: 创建容器时, 自动从主机复制文件/目录到容器里. 在这之前容器目录的所有内容会被清空.
也就是说, 容器目录里有而主机没有的内容会消失, 容器和主机都有的内容, 会被主机的内容覆盖.
之后容器运行的时候产生的修改会同步到主机里, 实现持久化保存.


参考文章

https://segmentfault.com/q/1010000016515320