前端需要知道的CI / CD知识不完全指北(五)

187 阅读3分钟

这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战

前端需要知道的CI / CD知识不完全指北(五)

Docker-compose

基于Docker 和 Docker-compose

通过一个配置文件,就可以让你的系统意见启动所有的运行环境: nodejs mysql mongodb redis

Docker 容器的组合

本文目标

通过Docker-compose搭建开发环境

  • 介绍Docker-compose
  • Docker-compose 配置 Redis
  • Docker-compose 配置 Mysql
  • Docker-compose 配置 Mongodb

注意 预先 docker pull 用到的镜像, 否则 docker-compose 初次启动会很慢

介绍

软件设计和开发, 有单一职责原则。Docker 也一样,每个容器都只负责一个服务。

如果开发环境需要多个服务(比如 nodejs mysql mongodb redis),就需要启动多个Docker容器

要连通多个docker容器,就需要Docker-compose

安装Docker-compose

# 安装依赖
$ yum install -y py-pip python3-dev libffi-dev openssl-dev gcc libc-dev rust cargo make
# 下载当前稳定版的docker compose
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 开启执行权限
$ sudo chmod +x /usr/local/bin/docker-compose
# 创建docker-compose软链接
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 测试安装结果
$  docker-compose --version
# 更新
$ docker-compose migrate-to-labels
# 卸载 
$ sudo rm /usr/local/bin/docker-compose
# 或
$ pip uninstall docker-compose

配置文件

Redis Docker-compose

# docker-compose.yml
version: '3'
services:
    editor-server: # service name
        build:
            context: . # 当前目录
            dockerfile: Dockerfile # 基于 Dockerfile 构建
        image: editor-server # 依赖于当前 Dockerfile 创建出来的镜像
        container_name: editor-server
        ports:
          - 8081:3000 # 宿主机通过8081访问
    editor-redis: # service name , 重要!
        image: redis # 使用官网 redis 镜像
        container_name: editor-redis
        ports:
            # 宿主机,可以用127.0.0.1:6378 即可连接容器中的数据库 `redis-cli -h 127.0.0.1 -p 6378`
            # 但是, 其他 docker 容器不能, 因为此时 127.0.0.1 是 docker 容器本身 而不是宿主机
            - 6378:6379
        enviroment:
            - TZ=Asia/Shanghai # 设置时区

命令

构建容器

docker-compose build <service-name>

启动所有服务器

docker-compose up -d 后台启动

停止所有服务

docker-compose down

查看服务

docker-compose ps

配置 Mysql 和 Mongodb

修改 docker-compose.yml

editor-mysql:
		image: mysql # 引用官网 mysql 镜像
		container_name: editor-mysql
		restart: always # 出错则重启
		privileged: true # 高权限, 执行下面的 mysql/init
		command: --default-authentication-plugin=mysql_native_password # 远程访问
		ports:
				- 3305:3306
    volumes:
    		- .docker-volumes/mysql/log:/var/log/mysql # 记录日志
    		- .docker-volumes/mysql/data:/var/lib/mysql # 数据持久化
    		- ./mysql/init:/docker-entrypoint-initdb.d # 初始化 sql
    enviroment:
    		- MYSQL_DATABASE=colion_sso
    		- MYSQL_ROOT_PASSWORD=Mysql_2019
    		- TZ=Asia/Shanghai # 设置时区
editor-mongo
		image: mongo # 引用官网 mongo 奖项
		container_name: editor-mongo
		restart: always
		volumes:
				- '.docker-volumes/mongo/data:/data/db' # 数据持久化
		enviroment:
				- MONGO_INITDB_DATABASE=colion_sso
				- TZ=Asia/Shanghai # 设置时区
		ports:
		- 27015:27017 # 宿主机可以用 127.0.0.1:27016 即可连接容器中的数据库

增加 mysql/init/init.sql 初始化 mysql

-- docker-compose 启动 mysql 时初始化代码
select "init start...";

-- 设置 root 用户可外网访问
use mysql
SET SQL_SAFE_UPDATES=0; --解除安全模式,测试环境没关系
update user set host='%' where user='root';
flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxxxx'
flush privileges;

select "init end ...";

修改 config/envs/prd-dev.js 增加 mysql 和 mongodb的配置

修改 .gitignore 文件. 增加一行 .docker-volumes/ 重要!

流程

  1. Docker 镜像。 Run => 容器
  2. DockerFile 构建镜像 => 服务打包
  3. docker-compose 启动项目 => 编排多个微服务/环境
  4. Docker 网络