天天看点

Dockerfile制作jdk镜像和微服务镜像部署的最佳实践【Dockerfile实战】

因为公司之前搭建测试服务器是我搭建的,其中包含使用docker来部署微服务项目,于是将这篇Dockerfile的最佳实践记录于此,为避免大家被坑,希望此文能帮你解除疑惑~

ps:因为是公司服务器不是个人服务器,我也没有多余的时间去再用个人服务器示范一次,所以大家也要有一些docker的基础知识,这里没有贴图希望大家能够谅解~(等我日后来给大家补图!)

Dockerfile制作jdk镜像和微服务镜像部署的最佳实践【Dockerfile实战】

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

Dockerfile常用指令 说明
FROM 设置镜像使用的基础镜像
RUN 编译镜像时运行的脚本(shell格式或exec格式)
CMD 设置容器的启动命令
ENV 设置容器的环境变量
COPY 编译镜像时复制文件到镜像中
VOLUME 设置容器挂载的数据卷
WORKDIR 设置RUN CMD COPY指令的工作目录
EXPOESE 设置镜像暴露的端口

制作jdk镜像

因为公司的测试服务器是我搭建的,我以公司的测试服务器操作为例。

JDK下载:

https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html

JDK版本:

jdk-8u271-linux-x64.tar.gz

(因为在服务器上,肯定下载的是tar包,接下来我们将这个版本的JDK制作成docker镜像)

创建一个文件夹,将JDK的安装包放在文件夹内,然后创建一个Dockerfile文件

# 创建如下目录
sudo mkdir /usr/local/jdk
# 将下载的JDK安装包放到服务器的此目录下
cd /usr/local/jdk
# 创建Dockerfile文件,并复制以下内容到Dockerfile文件内保存
sudo touch Dockerfile
           

Dockerfile制作JDK镜像(必须保证JDK安装包和Dockerfile文件在同一目录)

# 指定基础镜像(这条指令必须是第一条)
FROM centos:7
# 指定镜像的工作目录
WORKDIR /app
# 将JDK安装包复制到工作目录
ADD jdk-8u271-linux-x64.tar.gz /app
# 配置JDK环境变量
ENV JAVA_HOME=/wsy_docker/jdk/jdk1.8.0_271
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
           

构建JDK镜像

# 为你构建的JDK镜像取名并且打上标签,指令:docker build . -t [name]:[tag]
# .代表在当前目录制作镜像(必须保证JDK安装包和Dockerfile文件在同一目录的原因)
sudo docker build . -t jdk1.8:v1.0
           

验证JDK镜像制作完成

# 查看镜像
sudo docker images
# 创建、启动容器并进入容器内部
sudo docker run -it jdk1.8:v1.0 /bin/bash
# 检查java环境变量(出现很多javac用的指令即可证明你jdk镜像制作成功~)
javac
# 退出容器
exit
           

制作微服务项目镜像

制作微服务镜像首先要依赖于JDK镜像,既然是微服务镜像jar包的话肯定是Springboot可执行jar包咯!

比如项目jar包名字为:

core-1.0.0.jar

,将jar包放到服务器内的一个文件夹,并且在此文件夹创建一个Dockerfile文件

# 创建如下目录
sudo mkdir /data/app
# 将jar放到服务器的此目录下
cd /data/app
# 创建Dockerfile文件,并复制以下内容到Dockerfile文件内保存
sudo touch Dockerfile
           

Dockerfile制作微服务项目镜像(必须保证微服务项目jar包和Dockerfile文件在同一目录)

# 镜像环境为我们制作的JDK1.8镜像
FROM jdk1.8:v1.0
# 设置以下工作目录和微服务jar包的环境变量
ENV workdir /app/
ENV jar core-1.0.0.jar

# 将微服务jar包复制到工作目录
COPY ${jar} ${workdir}
# 指定工作目录
WORKDIR ${workdir}
# 使用JDK1.8环境启动微服务jar包
# JAVA_OPTS 环境变量的值为部署组的JVM启动参数,在运行时 bash 替换
# 使用 exec 以使 Java 程序可以接收 SIGTERM 信号
CMD ["sh", "-ec", "exec java ${JAVA_OPTS} -jar ${jar}"]
           

构建微服务项目镜像

sudo docker build . -t core:v1.0
           

运行启动项目镜像

# 查看镜像
sudo docker images
# 创建、启动镜像(启动后你就会看到项目跑起来后的日志了,这就说明)
# -d 后台运行项目(看不见项目运行后的日志)
# -p 将服务器中的8080端口映射到容器中(微服务项目中的端口号)的8090端口
sudo docker run -d -p 8080:8090 core:v1.0
           

接下来浏览器直接

http://IP:8080/

访问微服务项目资源验证即可~