使用docker、docker-compose部署微服务
- 一、使用docker部署
- 1、准备
- 2、上传jar包
- 3、编写dockerfile文件
- 3、构建镜像和容器
- 二、使用docker-compose部署
- 1、准备服务的jar包和dockerfile文件
- 2、编写docker-compose.yml文件
- 3、docker-compose常用命令
- (1)、前台创建镜像并启动容器
- (2)、后台创建镜像并启动容器
- (3)、查看启动的容器
- 4、停止服务(含删除)
- 5、启动服务容器
- 6、关闭服务容器
- 7、重启服务容器
一、使用docker部署
1、准备
这里已经在docker安装并启动好了Redis、nacos,配置好了“ruoyi-gateway-prod.yml”文件。
注意如果配置文件中有Redis、MySQL、nacos这些的连接信息,需要把IP地址改为服务器的公网地址或者内网地址,不会连接不到。
2、上传jar包
我这里以微服务版若依的网关服务为例,上传到指定目录。
3、编写dockerfile文件
官方文档:
https://docs.docker.com/engine/reference/builder/
英文的看起来有些吃力,若依这里有中文的教程
这是若依的文档地址:
http://doc.ruoyi.vip/ruoyi-cloud/cloud/dokcer.html#dockerfile
先获取构建镜像所需要的基础镜像,也就是jdk镜像,先看看有哪些jdk镜像
docker search openjdk
这里获取的是jdk8的镜像
docker pull openjdk:8-jre
我之前获取过,第一次获取可能慢一点。
再创建一个名为dockerfile的文件,文件名可以自定义,一般都为dockerfile,内容如下:
# 基础镜像
FROM openjdk:8-jre
# author
LABEL author="gan"# 创建目录
RUN mkdir -p /home/jar
# 指定路径,后面运行的jar包就是在这个目录
WORKDIR /home/jar
# 挂载目录
VOLUME /home/jar# 复制jar文件到路径,第一个是宿主机文件目录(dockerfile所在目录,不能是绝对路径),第二个是容器文件目录
COPY ./ruoyi-gateway.jar /home/jar/ruoyi-gateway.jar# 启动网关服务jar包
ENTRYPOINT ["java","-jar","-Xms256M","-Xmx256M","ruoyi-gateway.jar"]
上传到和jar包同一目录
假如要复制多个文件到容器,可以这样
3、构建镜像和容器
在当前目录下构建镜像,注意后面的“.”不是多余的,命令如下:
docker build -f /www/wwwroot/changjing/jar/gateway/dockerfile -t ruoyi-gateway .
解释:
-f:后面接的是 dockerfile 文件的路径
-t:为构建的镜像打上标签,就是构建的镜像名称
注意:
执行构建镜像的命令要在dockerfile文件所在目录,因为dockerfile文件的“COPY” 命令只能在相对于dockerfile文件的相对目录,使用宿主机的绝对目录构建会报错。
执行结果如下:
构建成功,因为我前面已经构建成功过了,可能会和第一次构建不太一样。
接下来启动镜像,命令如下:
docker run -d --name ruoyi-gateway -p 8010:8010 ruoyi-gateway
解释:
–name:后面接的是容器名称,我这里和镜像名称一样
-p:后面接的是宿主机和容器的端口映射,“:”前为服务器端口,“:”后为seata容器端口
最后面的是镜像名称
可以看到容器已经跑起来了。
二、使用docker-compose部署
使用docker-compose部署服务是使用docker部署基础上,增加docker-compose.yml文件统一管理服务容器,实现一个命令启动或关闭所有服务容器,所以要使用docker-compose部署,还是得先学会使用docker部署,是一种前期麻烦后期舒服的部署方式。
若依也有相关的教程:
http://doc.ruoyi.vip/ruoyi-cloud/cloud/dokcer.html#docker-compose
1、准备服务的jar包和dockerfile文件
在保留前面若依的gateway的jar包和dockerfile文件基础上,增加auth的jar包和dockerfile文件,auth的dockerfile跟gateway大同小异,具体如下:
# 基础镜像
FROM openjdk:8-jre
# author
LABEL author="gan"# 创建目录
RUN mkdir -p /home/jar
# 指定路径
WORKDIR /home/jar
# 挂载目录
VOLUME /home/jar# 复制jar文件到路径,第一个是宿主机文件目录(dockerfile所在目录,不能是绝对路径),第二个是容器文件目录
COPY ./ruoyi-auth.jar /home/jar/ruoyi-auth.jar
# 启动系统服务
ENTRYPOINT ["java","-jar","-Xms256M","-Xmx256M","ruoyi-auth.jar"]
上传到指定的文件夹
2、编写docker-compose.yml文件
官网上docker-compose.yml文件对应的docker版本
这是我的docker版本:
所以我的docker-compose.yml的文件版本是3.8。
文件中只有gateway和auth相关的内容,具体如下:
# 描述 Compose 文件的版本信息
version : '3.8'# 定义服务,可以多个,每个服务中定义了创建容器时所需的镜像、参数、依赖等
services:ruoyi-gateway: # 服务名称,跟构建镜像名称有关,假如image值为空,那么生成的镜像名称为“docker-compose.yml文件所在目录名称_ruoyi-gateway”,我放在jar目录,生成的镜像名称就是jar_ruoyi-gatewayimage: ruoyi-gateway # 构建镜像名称container_name: ruoyi-gateway # 容器名称build:context: ./gateway # 构建镜像的jar包和dockerfile文件所在的目录(相对于docker-compose.yml文件,我这里gateway目录是跟docker-compose.yml文件同一目录)dockerfile: dockerfile # 构建网关镜像的文件名称ports:- "8010:8010" # 构建容器端口号,“:”前为宿主机端口,“:”后为容器端口ruoyi-auth:image: ruoyi-authcontainer_name: ruoyi-authbuild:context: ./authdockerfile: dockerfileports:- "9200:9200"
文件写好后上传到指定目录
3、docker-compose常用命令
(1)、前台创建镜像并启动容器
类似使用 java -jar 命令启动jar包,注意要在docker-compose.yml文件所在目录执行,命令如下:
docker-compose up
窗口一旦关闭服务就停止了,初次启动服务的时候可以使用,最左边是服务名称,如果每个服务都没有看到日志报错就代表启动成功了。
Ctrl+C退出,但即使关闭了,创建的镜像和容器还存在
(2)、后台创建镜像并启动容器
也要在docker-compose.yml文件所在目录执行,命令如下:
docker-compose up -d
也可以指定docker-compose.yml文件的路径,命令如下:
docker-compose -f /www/wwwroot/changjing/jar/docker-compose.yml up -d
执行不会打印每个服务启动的日志,需要查看日志可以使用如下命令进行查看
docker-compose logs
如果只想看ruoyi-auth服务的日志,可以使用如下命令
docker-compose logs ruoyi-auth
(3)、查看启动的容器
可以查看docker-compose.yml文件启动的所有容器,命令如下:
docker-compose ps
也可以指定服务名称,比如执行看ruoyi-auth有没有启动,命令如下:
docker-compose ps ruoyi-auth
注意只能在docker-compose.yml文件所在目录执行,在其他目录执行会报错
4、停止服务(含删除)
停止并删除所有服务的容器,不删除镜像,命令如下:
docker-compose down
可以看到镜像还在,但对应的容器被删除了。
查看服务容器所对应的镜像,命令如下:
docker-compose images
停止并删除工程中所有服务的容器、网络、镜像,命令如下:
docker-compose down --rmi all
如果重新上传了jar包就可以使用这个方式停止。
5、启动服务容器
启动工程中所有服务的容器,命令如下:
docker-compose start
也可以在上面命令的基础上加上容器名称,启动指定的容器,比如我只启动gateway容器,命令如下:
docker-compose start ruoyi-gateway
6、关闭服务容器
关闭工程中所有服务的容器,命令如下:
docker-compose stop
也可以在上面命令的基础上加上容器名称,关闭指定的容器,比如我只关闭auth容器,命令如下:
docker-compose stop ruoyi-auth
7、重启服务容器
重启工程中所有服务的容器,命令如下:
docker-compose restart
也可以在上面命令的基础上加上容器名称,重启指定的容器,比如我只重启auth容器,命令如下:
docker-compose restart ruoyi-auth