Docker部署服务

1、摘要

        我们常常需要在虚机中使用docker部署我们的服务,中间涉及到docker安装、jar包的准备、镜像的生成、使用docker-compose启动服务等过程,所以特地写篇博客记录下这些步骤。

        先上一张代码结构图和一张虚机上的目录结构图:

        首先是代码结构。我喜欢把Dockerfile文件和docker-compose文件在代码里也放一份,一来是备份,怕虚机上的丢了;二来通过流水线构建镜像的话需要在代码里有Dockerfile和deploy文件。

        其次是虚机上各个文件的作用。api-back.jar不用多说,服务的jar包;

        config目录里放的是配置文件,docker-compose文件里会写明把这个目录整个挂载到镜像里,Dockerfile文件会在启动命令里指定使用这个目录里的配置文件,从而把配置文件挂载出来,方便修改。

        docker-compose.yml文件里指定了构建镜像和启动服务的一些配置,用来构建镜像、启动/停止服务。

        Dockerfile-api-back文件用于构建镜像。

        start.sh用于一键更新服务。

         接下来详细介绍各个步骤以及涉及到的文件。

2、安装docker和docker-compose

        在虚机上安装docker和docker-compose,详细操作可见(TODO)。

3、生成jar包或dist包

        这一步比较简单,后端执行maven clean install就行,不过我喜欢在pom文件中指定jar包生成的位置,把所有微服务的jar包都统一生成到根目录的target下。关于pom文件中maven插件的作用可以看我另一篇博客。

         前端生成dist包一般就是控制台执行npm run build,我不是专业的就不展开说了。

        生成之后把jar包或dist包上传到虚机上,比如这里我统一上传到了/api-back目录下。

2、编写Dockerfile文件

#指定基础镜像
FROM moxm/java:1.8-full

#添加jar包到镜像,注意jar包的位置需要和下面启动命令里jar包的位置一样,不然启动的时候就找不着jar包了
ADD ./api-back.jar /opt/api-back.jar

#设置服务时区
ENV TZ=Asia/Shanghai

# 设置容器端口
EXPOSE 7700

# 设置启动命令,在启动命令里指定了配置文件的位置,后续可以在docker-compose里把这个目录挂载出来,方便修改配置文件,这样就不用改个配置还得改代码并重新打包。
CMD java -Dspring.config.location=/opt/config/ -jar /opt/api-back.jar

        关于Dockerfile文件的详细介绍可以看这(TODO)

3、编写docker-compose文件

version: "3.7"
services:
  api-back:
    build:
      context: ./
      dockerfile: ./Dockerfile-api-back
    image: api-back:v1.0
    container_name:  api-back
    restart: always
    privileged: true
    ports:
      - 7700:7700
    volumes:
      - ./config:/opt/config
    environment:
      - TZ=Asia/Shanghai
      - JAVA_OPTS=-server -Xmx512m -Xms512m -Djava.awt.headless=true

        有了docker-compose文件后,就可以在docker-compose文件所在目录下执行以下命令:

        构建镜像:docker-compose build

        停止服务:docker-compose down

        启动服务:docker-compose up -d

        docker-compose build构建的镜像名和tag是由docker-compose文件中的image指定的,比如上面的docker-compose文件构建出来的镜像就是api-back:v1.0。如果想要构建其他tag的镜像,记得改image中的tag哦。

        关于docker-compose的详细介绍可见(TODO)。

4、编写start.sh文件

#构建镜像
docker-compose build
#重启服务
docker-compose down
docker-compose up -d

      可以把步骤3中的几个命令放到一个.sh文件中;后续想更新服务就只需要上传最新的jar包,然后执行sh start.sh,就可以自动构建并更新服务了。

        不过需要注意的是,一直使用同一个tag构建镜像,会导致新的镜像挤占掉旧镜像的tag,从而使旧镜像成为空悬镜像,像这样:

         大量的无意义的空悬镜像会占用磁盘空间,需要定期清理,可以执行以下命令清理空悬镜像:docker image prune

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值