使用sh脚本通过Dockerfile更新镜像,通过docker-compose更新容器

前提环境:我们自己的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、文件 

相关参数可前往

  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值