目前我们大多数服务应该会使用 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-ComposeAPI的版本,非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就可以快速搭建一整套服务。