因为公司之前搭建测试服务器是我搭建的,其中包含使用docker来部署微服务项目,于是将这篇Dockerfile的最佳实践记录于此,为避免大家被坑,希望此文能帮你解除疑惑~
ps:因为是公司服务器不是个人服务器,我也没有多余的时间去再用个人服务器示范一次,所以大家也要有一些docker的基础知识,这里没有贴图希望大家能够谅解~(等我日后来给大家补图!)

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/
访问微服务项目资源验证即可~