前提环境:我们自己的jar在服务器上是通过 docker 容器来部署运行的。
这里不仔细讲解 dockerfile 和 docker-compose 中的参数,有兴趣可以前往 docker 了解。
1、准备各个微服务的 dockerfile
1.1、文件
这里只写一个服务的 dockerfile 展示,其它微服务都是差不多的。
# 基于 openjdk:8 镜像来构建
FROM openjdk:8
# 作者邮箱
MAINTAINER XXX@qq.com
# 设置工作目录
WORKDIR /work/gateway
# 暴露镜像端口,主机做端口映射( docker run -P 时,会自动映射 EXPOSE 的端口)
EXPOSE 8081
# 将主机上的 gateway.jar 复制到工作目录下,并取名为 app.jar
ADD ./gateway.jar ./app.jar
# 设置环境变量,在后续的指令中可以通过 $TZ 引用
ENV TZ=Asia/Shanghai
# 设置时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 设置容器创建时需要执行的命令(不可被docker run 命令覆盖)
ENTRYPOINT ["java","-Xmx650m", "-Xms650m" , "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
其它的dockerfile都和这个差不多,把 工作目录(WORKDIR)的 gateway 都换成对应的服务名。
然后将每个服务的 dockerfile 文件改名为 :服务名-Dockerfile。
如:gateway-Dockerfile
假设此时XXX-Dockerfile 都存放在 /home/service/ 下,这个目录后面需要用到,jar 要和dockerfile在同目录下或者下级目录下。
这里需要说到一个构建的命令:
docker build -t 镜像名:版本号 .
最后一个 . 是上下文路径。 不清楚上下文路径可以在开头的 docker 中了解。
但是此时如果镜像存在,docker会默认使用已有的镜像,是不会重新构建的。
如果想要每次构建都重新构建镜像,需要添加:--no-cache
docker build --no-cache -t 镜像名:版本号 .
此时以上两个命令都需要 dockerfile文件命名为(Dockerfile 或 dockerfile)。
可以用到 -f 来指定 具体的 dockerfile 文件。
最终后面用到的镜像构建命令为:
docker build --no-cache -t 镜像名:版本号 -f ./服务名-Dockerfile .
1.2、部分命令
删除镜像:
docker rmi 镜像名
停止容器:
docker stop 容器名/id
删除容器:
docker rm 容器名/id
查看日志:
docker logs 容器名/id
2、准备 docker-compose
2.1、文件
相关参数可前往