docker 综合实践

综合实践

在本章我们希望你能通过docker的形式将您个人的项目修改为容器化部署的形式,最好可以配合上Github Action来实现CI/CD功能。

关于Github Action大家可以看一下官方文档或者阮一峰老师的GitHub Actions 入门教程进行学习。

目录

  • 挂载部署
  • 构建镜像部署

在没有学习 docker 之前,部署项目都是直接启动文件,比如 java 项目就是 java -jar xxx.jar 的方式,python 项目就是 python xxx.py。如果采用 docker 的方式去部署这些项目,一般有两种方式,以 jar 包项目为例。

方式一、挂载部署

这种方式类似于常规部署,通过数据卷的方式将宿主机的jar包挂载到容器中,然后执行jar包的jdk选择容器中的而非采用本地的。

  1. 将jar包上传到服务器的指定目录,比如/root/docker/jar。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ckYYImZe-1619176402360)(https://i.loli.net/2021/04/23/fDw6QJSR14kiMoN.jpg)]

  1. 通过docker pull openjdk:8命令获取镜像

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PSNkvxnY-1619176402367)(https://i.loli.net/2021/04/23/Hw65cDVpjLiA12h.jpg)]

  1. 编写docker-compose.yml文件
version:'3.0'

services:

  java:
    image: docker.io/openjdk
    restart:always
    container_name: myopenjdk
    ports:
      - 8080:8001
    volumes:
      - /root/docker/jar/xxxx.jar:/root:z
      - /etc/localtime:/etc/localtime
    environment:
      - TZ="Asia/Shanghai"
    entrypoint: java -jar /root/xxxx.jar
    mynetwork:
      ipv4_address: 192.168.1.13

networks:
  mynetwork:
   ipam:
     config:
      - subnet: 192.168.1.0/24

参数解释:

  • build 指定dockerfile所在文件夹的路径 context指定dockerfile文件所在路径 dockerfile指定文件的具体名称

  • container_name 指定容器名称

  • volumes 挂载路径 z是用来设置selinux,或者直接在linux通过命令临时关闭或者永久关闭

  • ports 暴露端口信息

  • networks是用来给容器设置固定的ip

  1. 执行命令docker-compose up –d启动jar包, 可以通过docker ps查看容器是否在运行,需要注意的是默认查看所有运行中的容器,如果想查看所有容器,需要添加参数-a

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JncAjXQa-1619176402369)(https://i.loli.net/2021/04/23/NZ1G8V64zuDOIFP.jpg)]

  1. 注意如果容器启动失败或者状态异常,可以通过docker logs查看日志
  2. 通过docker inspect myopenjdk查看容器详细信息,可以看到容器ip已经设置成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DQd37Wyx-1619176402373)(https://i.loli.net/2021/04/23/zqg8BR4vEtdM2Gh.jpg)]

然后在虚拟机中打开浏览器输入jar包项目的访问地址,就可以看到运行的项目,需要注意访问端口是映射过的端口而非项目实际端口

方式二、构建镜像部署

  1. 将jar包上传到服务器的指定目录,比如/root/docker/jar。

  2. 在该目录下创建Dockerfile文件,通过vim等编辑工具在Dockerfile中编辑以下内容

FROM java:8
MAINTAINER YHF
LABEL description=”learn docker”
ADD xxx.jar
EXPOSE 8001
ENTRYPOINT [“java”,”-jar”,”xxxx.jar”]

参数解释:

  • FROM java:8 指定所创建镜像的基础镜像

  • MAINTAINER yhf 指定作者为yhf

  • LABEL 为生成的镜像添加元数据标签信息

  • ADD xxxx.jar 添加内容到镜像

  • EXPOSE 8080 声明镜像内服务监听的端口

  • ENTRYPOINT 指定镜像的默认入口命令,支持两种格式ENTRYPOINT[“java”,”-jar”,”xxxx.jar”];ENTRYPOINT java –jar xxxx.jar。注意每个dokcerfile中只能有一个ENTRYPOINT,如果指定多个只有最后一个生效。

  1. Dockerfile构建完成以后可以通过命令docker build构建镜像,然后再运行容器,这里咱们用docker-compose命令直接编排构建镜像和运行容器。

  2. 编写docker-compose.yml文件

version: '3'

services:

  java_2:
    restart: always
    image: yhfopenjdk:latest
    container_name: myopenjdk
    ports:
      - 8080:8001
    volumes:
      - /etc/localtime:/etc/localtime
    environment:
      - TZ="Asia/Shanghai"
    entrypoint: java -jar /root/datawhale-admin-1.0.0.jar
    networks:
      mynetwork:
         ipv4_address: 192.168.1.13

networks:
  mynetwork:
   ipam:
     config:
      - subnet: 192.168.1.0/24

参数解释同方式一:

  1. 执行docker-compose up –d直接启动基于文件构建的自定义镜像,如果镜像不存在会自动构建,如果已存在那么直接启动。如果想重新构建镜像,则执行docker-compose build。如果想在执行compose文件的时候重构,则执行docker-compose up –d –build。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MiOMoueL-1619176402375)(https://i.loli.net/2021/04/23/MxpSwuIgOB7rvJa.jpg)]

此使通过dockerfile文件构建的镜像已经创建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gPpyTcXF-1619176402378)(https://i.loli.net/2021/04/23/tnUqSJZ8hyF41Ne.jpg)]

通过镜像运行的容器已经正常启动,可以通过docker ps查看容器是否在运行,需要注意的是默认查看所有运行中的容器,如果想查看所有容器,需要添加参数-a

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W3OA40B5-1619176402379)(https://i.loli.net/2021/04/23/wcFQAMKDYnaglpO.jpg)]

  1. 在浏览器中输入访问路径可以看到项目已经正常运行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iFpNKn0F-1619176402381)(https://i.loli.net/2021/04/23/c2iQRPGKt1DIFYy.jpg)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值