携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情
为了能正常地使用Docker容器,需要先安装Docker和Docker compose,如何安装可以查看Docker、Docker compose的安装
文件布局
在相关工具都安装完毕后,为了顺利构建自定义Docker镜像,我们需要准备以下文件:
- JDK11,可在oracle官网下载,需要注册oracle账号。百度网盘自取 密码:6lo7
- Dockerfile,这个需要我们自己编写,用来构建自定义容器
- Jar包,对应的应用程序Jar包,需要自己打好
- docker-compose,用来运行容器,相当于包装了docker命令的工具
以上四个文件全部在同一个文件夹下面。
编写Dockerfile文件
Dockerfile
# 基础镜像
FROM centos:7
# 作者,建议写自己的邮箱
LABEL maintainer="zouwei"
# 把jar包拷贝进镜像内指定路径下
COPY jtt808-server.jar /root
# 把jdk拷贝到指定路径下
COPY jdk-11.0.16_linux-x64_bin.tar.gz /usr/local/
# 执行tar解压缩命令,把jdk解压缩到/usr/local/路径下
RUN tar -zxvf /usr/local/jdk-11.0.16_linux-x64_bin.tar.gz -C /usr/local/
# 配置java环境变量
ENV JAVA_HOME /usr/local/jdk-11.0.16/
ENV PATH $JAVA_HOME/bin:$PATH
# 设置容器启动命令
ENTRYPOINT ["nohup","java","-jar","-Dfile.encoding=UTF-8","/root/jtt808-server.jar","&"]
上面的文件名称默认就是"Dockerfile",没有任何后缀。
文件内容中的"jtt808-server.jar"可以替换成自己的jar文件;对应的作者也请改成自己。在启动命令中,可以根据自己的实际情况补充其他参数,比如jvm的配置参数等等。
编写docker-compose.yml
docker-compose.yml
version: "3.2"
services:
jt808:
# build表示需要构建自己的镜像,.代表从当前文件夹中查找Dockerfile文件
build: .
# 容器名称
container_name: "jt808_server"
ports:
# 容器需要对外透露的端口
- "8000:8000"
- "7611:7611"
- "7612:7612"
# 容器挂了是否重启
restart: always
volumes:
#设置系统时区
- "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime"
#设置时区
- "/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone"
构建镜像
docker-compose.yml编写完毕后,需要通过以下命令先构建自定义的Docker镜像:
docker-compose build
该命令一定要在docker-compose.yml所在文件夹的路径执行。任何修改了Dockerfile文件的操作都需要重新构建该镜像。
启动服务
镜像构建完毕后,我们可以通过下面的命令把对应的容器实例启动起来:
docker-compose up
此时控制台会打印应用程序的启动日志。
如果需要让该应用程序在后台线程启动,可以使用以下命令:
docker-compose up -d
完成上面步骤,我们就完成了通过自定义构建的镜像部署了自己的jar包。
思路2
在上面这个方案当中,我们发现每次构建镜像都要把jdk拷贝进去,本质上jdk是永远不需要我们手动修改的,所以在思路2中我们需要做的优化就是:
- 通过Dockerfile构建一个只有jdk的镜像,暂时先不把jar包放进去;
- 把构建好的镜像上传到云端仓库;可上传阿里云或私人仓库;
- 通过Dockerfile基于云端仓库镜像构建新镜像,这个新镜像每次构建只需要COPY jar包进去;
- docker-compose.yml可不修改
通过提前构建好的java镜像,我们以后都可以在任意网络允许的服务器上运行jar包,不再需要去下载jdk安装包了。