2.1-docker compose
Create by fall on 24 Jul 2023 Recently revised in 24 Jul 2023
docker-compose
如果将配置全在命令行里书写,不容易保存,且一次只能生成一个容器,修改和查找上下文也不方便。
以 docker-compose 来运行命令,可以解决上面的问题。即,通过一个 docker-compose.yml
文件生成多个容器。
不同于命令 docker run <image>
,docker compose 创建的内容,将自动处于同一个网络环境。
官方文档:
compose 命令
使用下面命令即可运行 compose.yaml
docker-compose up
启动运行内容
-d
表示在后台运行- 默认会将
compose.yaml
所在的文件夹的名称作为项目名称,将所用到的容器放置在该项目中
查看日志
docker compose logs
关闭 compose
docker compose down
或者直接在可视化界面删除(项目和项目下的容器)。
- 添加
--volumes
连同 volume 一起删除。
compose 命令可以使用
-
或者(空格符号) 进行连接
配置项
顶层配置
- services 定义各个服务的配置,可以指定每个服务的镜像、容器名称、启动命令、端口映射、环境变量等。
- version 指定 Docker Compose 的版本号
- volumes 定义数据卷,必须在顶层进行定义,才能在容器中进行使用。
配置项 | 描述 |
---|---|
networks | 定义各个网络的配置,常见的如 bridge、host、overlay 等 |
volumes | 定义数据卷的配置,指定数据卷的使用方式。 |
build | 指定 Dockerfile 的路径或者一个 URL,用于构建镜像。 |
image | 指定镜像的名称或者 ID,用于拉取或者使用一个已经存在的镜像。 |
ports | 指定容器内部端口和主机端口之间的映射关系。 |
environment | 指定容器的环境变量。 |
depends_on | 指定容器之间的依赖关系,如谁依赖谁,启动顺序等。 |
command | 指定容器启动时要运行的命令。 |
restart | 指定容器在出现故障时应该如何重新启动。常见的配置如,always |
healthcheck | 定义容器的健康检查。 |
deploy | 指定服务在 Docker Swarm 中的部署配置。 |
secrets | 指定容器中使用的加密密钥和证书等。 |
configs | 指定容器中使用的配置文件。 |
working_dir | 工作路径 |
配置对比
docker run -dp 127.0.0.1:3000:3000 \
-w /app -v "$(pwd):/app" \
--network todo-app \
-e MYSQL_HOST=mysql \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=secret \
-e MYSQL_DB=todos \
node:18-alpine \
sh -c "yarn install && yarn run dev"
# docker-compose.yml
services:
app:
image: node:18-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- 127.0.0.1:3000:3000
working_dir: /app
volumes:
- ./:/app
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
完整配置示例
version: '3'
services:
app:
image: node:18-alpine # 镜像名称以及版本
container_name: my-node # 生成的容器名称
restart: always # 重启 docker 后该容器也重启
command: sh -c "yarn install && yarn run dev"
ports:
- 127.0.0.1:3000:3000
working_dir: /app
volumes:
- ./:/app
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
mysql:
image: mysql:8.0
volumes:
- todo-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: todos
# 需要在最顶层定义 volumes 并且在确定的位置进行引用
volumes:
todo-mysql-data:
自动化部署
使用 docker
+ jenkins
能实现代码提交到 github 后自动部署环境
docker login
进行登录docker login -u username
指定用户名称docker push username/image-name
将镜像推送到 docker hub
应用的使用
参考文章
作者 | 文章名称 |
---|---|
爱笑的架构师 | 5分钟带你快速了解Docker和k8s |
佳庆 | docker-compose讲解与安装 |
官方文档 | https://docs.docker.com/get-started/02_our_app/ |