目前我们大多数服务应该会使用 Docker 来进行部署,但在整个项目需要用到多个服务时,一个一个编排部署就会很麻烦,如我们常见的会有前端服务(Vue)+后端服务(Node)+数据库(Mysql)+缓存(Redis)。这篇文章主要就是讲下怎么使用 Docker-Compose 来一键编排部署我们的服务。
一、安装 Docker 及 Docker-Compose
1. 安装 Docker
linux
服务器使用curl
下载快速安装的shell
脚本
curl -fsSL get.docker.com -o get-docker.sh
下载完成后,可以ls
命令查看一下。已经存在的话,使用sh
命令执行这个脚本
sh get-docker.sh
注意如果不是root
用户,需要使用sudo su
获取超级管理员权限。
安装完成后启动一下Docker Server
systemctl start docker
使用docker version
命令能看到Client
和Server
就启动成功了。
2. 安装 Docker-Compose
从 github
下载 docker-compose
的安装文件
sudo curl -L "https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
测试安装结果
$ docker-compose --version
Docker Compose version v2.12.2
到此 Docker
及 Docker-Compose
就安装完成了。
二、Vue前端项目及Node后端项目Dockerfile镜像文件配置
1. 前端项目配置
我这里有一个前端项目一个后端项目,首先在前端项目根目录创建nginx
配置文件 nginx.conf
及Docker
镜像构建文件Dockerfile
这里的Dockerfile
文件主要是用来构建前端项目的镜像,因为我们是基于nginx
来运行我们打包好的前端项目,所以这里需要一个nginx.conf
的配置文件来方便修改配置(如果配置有修改,直接在项目里改,然后重新构建就行)。
具体的这两个文件内容可以参考我的另一篇文章
# 基于 Docker 来部署 Vue 或 React 前端项目及 Node 后端服务
2. 后端项目配置
同样在后端项目根目录创建Docker镜像构建文件Dockerfile
具体的文件内容同样参考那篇文章😀
# 基于 Docker 来部署 Vue 或 React 前端项目及 Node 后端服务
完成上面的步骤后,其实我们可以手动对每个服务进行部署了,但是需要每个服务手动构建和启动等,下面就是用Docker-Compose
来一起编排和启动等。
三、使用Docker-Compose来编排前端、后端、数据库、缓存服务
在整个项目根目录创建docker-compose.yml
文件,这就是Docker-Compose
的编排配置文件,写入以下内容
version: "3.7"
services:
frontend:
build: ./my-nest-todo-frontend
image: nest-todo-frontend-image
container_name: nest-todo-frontend-container
ports:
- 8080:80
server:
build: ./my-nest-todo-server
image: nest-todo-server-image
container_name: nest-todo-server-container
ports:
- 7001:7001
depends_on:
- mysql
- redis
mysql:
image: mysql:5.7
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=123456
redis:
image: redis
ports:
- 6379:6379
-
version
: 必须指定,它是指定Docker-Compose
API的版本,非Docker-Compose
引擎版本。 -
services
: 指定编排的所有服务,如上面我们有4个服务frontend
、server
、mysql
、redis
-
frontend
: 这就是我们需要构建的前端服务,build
指定需要构建镜像的目录,因为我们之前在前端根目录编写了Dockerfile
,它会根据这个文件来构建镜像,构建出来的镜像名用image
来指定,启动的容器名用container_name
来指定,ports
就是指定端口的映射,这里是把容器的80端口(nginx
默认是80端口)映射到宿主机的8080端口 -
server
: 后端服务,同样根据后端项目根目录的Dockerfile
文件进行构建,image
和container_name
和ports
和前端项目同理,depends_on
是表明该服务依赖于哪些服务,如这里表明我们的后端服务依赖于mysql
及redis
服务,他会在mysql
及redis
编排启动后再编排启动。 -
mysql
: 数据库服务,这里我们用的是mysql5.7
,environment
可以指定环境参数,MYSQL_ROOT_PASSWORD=123456
就是把密码设置为123456 -
redis
: 缓存服务,项目里用了redis来缓存
四、启动Docker-Compose服务
最后在项目根目录下执行
docker-compose up -d
启动我们所有编排好的服务,启动完全了可以使用
docker-compose ps
来查看我们所有已经启动的容器
下面列出一下关于docker-compose的常用操作命令
- 启动服务:
docker-compose up -d
- 停止服务:
docker-compose down
- 列出所有运行容器:
docker-compose ps
- 查看服务日志:
docker-compose logs
- 构建:
docker-compose build
- 启动服务:
docker-compose start
- 停止已运行的服务:
docker-compose stop
- 重启服务:
docker-compose restart
到此,我们就完成了使用
Docker-Compose
来编排部署我们的整个服务,对于整个项目的迁移部署很方便,在另一个环境我们只需要执行docker-compose up -d
就可以快速搭建一整套服务。