本文是对Docker+Nginx打包部署前后端分离项目这篇文章的补充,原文是简单的用docker部署的,需要一个一个pull镜像,一个一个启动容器,很麻烦,现在使用docker-compose一行命令解决多个容器的启停。
Docker-Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。
Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。Docker-Compose 解决了容器与容器之间如何管理编排的问题。
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER xtt
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为auth_docker.jar
ADD service-system.jar auth_docker.jar
# 运行jar包
RUN bash -c 'touch /auth_docker.jar'
ENTRYPOINT ["java","-jar","/auth_docker.jar"]
#暴露8800端口作为微服务
EXPOSE 8800
这里主要三个服务,一个是我们的后端服务,一个redis服务,一个mysql服务
三个容器使用同一个docker network。
version: "3"
services:
guigu_auth:
build:
context: ./sysrole
dockerfile: Dockerfile
container_name: guigu_auth
restart: always
privileged: true
ports:
- "8800:8800"
volumes:
- ./:/data
networks:
- auth_network
depends_on:
- redis
- mysql
redis:
image: redis:6.0.8
container_name: redis
restart: always
privileged: true
ports:
- "6379:6379"
volumes:
- ./redis/redis.conf:/etc/redis/redis.conf
- ./redis/data:/data
networks:
- auth_network
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:8.0.31
restart: always
container_name: mysql
privileged: true
environment:
MYSQL_ROOT_PASSWORD: 'wsxhz888'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'guigu-auth'
MYSQL_USER: 'xtt'
MYSQL_PASSWORD: 'wsxhz888'
ports:
- "3307:3306"
volumes:
- ./mysql/db:/var/lib/mysql
- ./mysql/conf/my.cnf:/etc/my.cnf
- ./mysql/init:/docker-entrypoint-initdb.d
networks:
- auth_network
command: --default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
networks:
auth_network:
修改配置文件,由于使用的同一个docker network,所以容器之间可以通过域名访问,与IP无关。修改后的配置文件如下所示。
后端项目打成jar包并和Dockerfile、docker-compose.yaml一同上传到服务器指定目录下。
项目打包:
将文件上传到服务器,上传之后如下所示:
运行如下命令:
docker-compose up -d
查看正在运行的容器:docker ps
可以看到,启动了三个容器,分别是我们的后端微服务、redis和mysql。
关闭容器的命令:
docker-compose stop
再次开启容器:docker-compose up -d
可以看到,很方便,一个命令实现多个容器的启停,不像原来使用docker那样一个一个关闭和开启容器了。 这里基本上就完了,可以进入到mysql容器内部建库建表就可以了,如果配置了启动的sql脚本那就更方便了。