前言
阅读本文默认你已熟悉docker
什么是docker-compose?
Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用,它是由 python
编写。
docker-compose
定位是定义和运行多个 Docker 容器的应用。
docker-compose
有两个重点
1、docker-compose 命令行工具
docker 提供了一个命令行工具 docker-compose
帮助完成镜像的编排, 要使用 docker-compose
, 需要先编写一个 docker-compose.yml
文件。
2、docker-compose.yml 配置文件
YAML 是一个可读性高,用来表达数据序列的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。
定义你容器的编排参数, 后面使用里我们会看到文件示例
为什么不用 docker run?
docker run运行一个要一堆的参数,如 --network
, --volume
, -p
等等.
如果有多个容器组合成一个项目,比如一个 webserver nodejs,数据库,缓存等等容器,我们就需要一个个的定义网络等参数,然后一个个启动, 属实很麻烦。
有了 compose
我们只需要一个简单的 docker-compose up
,它就会自动帮我们构建镜像,配置网络等功能。
更快速编排我们的应用。
安装
阅读此节你已经安装了docker环境
一键安装
命令
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.11.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
测试安装是否成功
docker-compose -v
有输出那就安装成功了
基本使用
准备一个Dockerfile, 例如
FROM registry.cn-hangzhou.aliyuncs.com/zhangbo007/node:14.18.0-alpine
# 设置镜像作者
LABEL MAINTAINER="zhangbo"
# 设置工作目录
WORKDIR /app
# 清除npm缓存文件
RUN npm cache clean --force && npm cache verify
# 设置环境变量
ENV NODE_ENV prd
# 设置yuan
RUN npm config set registry https://registry.npm.taobao.org
# 复制文件
COPY . .
# 安装依赖
RUN npm install
# 暴露端口
EXPOSE 8000
CMD [ "npm", "run", "prod" ]
配置文件
docker-compose.yml
version: "3.9" #版本
services: # 下面可配置多个
node: # 服务名字 自已定义
container_name: pu-node-server-1 # 容器名称(可不定义)
restart: always # 自动重启配置
environment: # 环境变量 类似 -e
- EGG_SERVER_ENV=daily
image: registry.cn-hangzhou.aliyuncs.com/zhangbo007/pu-pdf-node-server:33333 #镜像
ports: # 端口号映射
- "7001:8001"
volumes: # 定义数据卷,类似 -v
# - db_data:/var/lib/mysql
networks: # 可选,需要创建的网络,类似 docker network create
更多配置项详见
https://docs.docker.com/compose/compose-file/
常用命令
后台启动 docker-compose up -d
指定配置文件启动 docker-compose -f docker-compose.yml up -d
查看启动的服务 docker-compose ps
查看日志 docker-compose logs xx
运行多个容器(待补充)
例如,如果您需要 node、Nginx 和 redis以容器同时运行,则您必须发出三个单独的docker run命令
与docker run相比,docker-compose允许在单个 YAML 文件中配置多个容器。当docker-compose up命令运行时,它将启动docker-compose.yaml文件中引用的每个容器。
待补充
配合ci/cd使用
以部署node.js为例子
1、阿里云流水线
逻辑梳理
a 准备好一个Dokcerfile
b 写一个docker-compose.yml的配置文件丢到服务器。
c 在流水线的环境里
1、步骤一 构建镜像 用commit哈希作为版本号, 而后上传到仓库
- commit哈希阿里云flow的变量是 ${CI_COMMIT_ID}。
- - 最开始我使用的时间为版本号, 后来发现这样每次都生成一个新的,仓库很冗余, 用 commit sha 便可以解决这个问题。
- ##### 2、步骤二 在服务器执行部署脚本
- - 切换到docker-compose文件目录
-
cd /home/docker
- 停掉正在运行的容器
-
docker-compose down -v
- 用脚本修改docker-compose.yml 里镜像的版本号
- 执行命令后台启动
-
docker-compose up -d
-
流水线配置
配置2个阶段
docker构建
标签输 ${CI_COMMIT_ID}。
镜像仓库ACR需要自己去创建好。
Docker部署
部署脚本
#!/bin/bash
# 切换到docker-compose.yml目录
cd /home/docker
# 停止
docker-compose down -v
# 替换版本号
sed -i "s/`cat docker-compose.yml |grep image|awk -F ":" '{print $3}'`/${CI_COMMIT_ID}/g" docker-compose.yml
# 后台启动
docker-compose up -d
流水线选好主机, 把脚本填写在部署配置里
保存运行一下
测试
成功部署!
Top comments (0)