很多初次使用Docker的朋友,不清楚如何利用Dockerfile部署自己的springboot项目,网络上搜到的教程大多都是告诉你怎么写Dockerfile,但是并没有从头开始讲如何使用。此文将从头开始一步一步的讲解如何进行部署。

第一步:准备Dockerfile

   我们新建一个文件,命名为Dockerfile,注意这里的文件名不需要任何后缀。然后直接上Dockerfile的代码~~~

# FROM的意思是,以xxx为基础容器镜像
# 这里我们直接使用dockerhub镜像仓库中提供的openjdk作为java的运行环境。
FROM openjdk:11

# ENV关键字为容器内的环境设置系统变量
ENV TZ Asia/Shanghai
ENV LANG=en_US.UTF-8 \
LANGUAGE=en_US.UTF-8


# JAVA_TOOL_OPTIONS 表示添加jvm环境变量,根据项目按需添加
ENV JAVA_TOOL_OPTIONS "-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Djava.net.preferIPv4Stack=true -XX:+DisableExplicitGC -Djava.security.egd=file:/dev/./urandom -XX:ActiveProcessorCount=8 -Djava.awt.headless=true -XX:+UseG1GC -XX:+UseStringDeduplication"

# 这里是将容器的/app作为工作目录,也就是后面的命令默认是在此目录下执行
WORKDIR /app

# ADD与COPY功能类似。但是ADD可以直接从URL拷贝文件,并且有自解压缩功能。
# COPY常用于拷贝本地文件,或者用于multistage的场景下
# 我在这里是添加了阿里的arthas,用于线上问题排查使用
ADD https://arthas.aliyun.com/arthas-boot.jar /root
ADD https://github.com/krallin/tini/releases/download/v0.19.0/tini /tini

# RUN命令表示在容器中执行对应的命令, \ 表示换行符 多条命令之间用 && 隔开,切忌多次写RUN命令
RUN chmod +x /tini

# COPY是将主机上的文件,复制到Docker容器中 (主机的意思就是,你安装有Docker环境的那台机器)
# 这里的路径build/libs/*.jar,是指【Dockerfile与jar包的相对路径】
# /app/是指,容器内的目标路径。
# 也就是说,将主机上build/libs/*.jar的文件复制到容器的/app/路径下
COPY build/libs/*.jar /app/

# 暴露端口,端口号与你springboot配置的server.port的值一样就可以了
EXPOSE 8080

# 由于WORKDIR已经将路径定位到了jar包所在文件夹,所以可以直接使用命令 -jar *.jar执行jar包
# 由于我要使用arthas,所以要先运行tini
ENTRYPOINT "/tini" "--" "/bin/sh" "-c" "java -Dspring.profiles.active=test -jar *.jar"

使用Dockerfile在Docker中部署SpringBoot项目_Dockerfile

 第二步:确认Dockerfile与jar包的相对位置

极其重要,否则Dockerfile中的 COPY 命令会因为找不到文件而失败!

         由于我的DokerFile是放在/usr/local/src目录下,且jar包是放在/usr/local/src/build/libs下的。jar包与Dockerfile的相对路径是 build/libs/*.jar。所以COPY build/libs/*.jar /app/

第三步:构建我们自己的镜像文件

1、首先进入Dockerfile所在目录

cd /usr/local/src

使用Dockerfile在Docker中部署SpringBoot项目_jar_02

2、如果你有自己的Docker仓库,则先进行登录操作。如果没有,则忽略此步骤。

docker login --username 登录名  仓库地址  -p 登陆密码

使用Dockerfile在Docker中部署SpringBoot项目_docker_03

3、构建镜像

docker build -t myfirstapp:tag-v-1 .

使用Dockerfile在Docker中部署SpringBoot项目_jar_04

        由于我们在Dockerfile所在目录执行的build命令,所以无需指定Dockerfile路径,如果Dockerfile不在当前目录,那需要使用docker build -f Dockerfile文件路径 -t myfirstapp:tag-v-1 . 进行构建镜像

注意:命令最后有一个小点 .  一定不能漏掉了哦,否则就会构建失败!!!小点表示以当前目录构建上下文

           -t 后面的仓库名myfirstapp也一定要小写哦。

        至此,我们就做好了一个自己的镜像文件啦~~~

        运行 docker image ls 命令,就可以看到当前构建好的镜像了。

        如果需要将构建好的镜像推送到自己的仓库,则先执行第2步的登录操作,然后就可以执行 docker  push myfirstapp:tag-v-1 命令,将镜像推送到远程仓库。

         如果登录了远程仓库,记得在所有操作完成后,登出哦,避免造成无操作。

 登出命令:docker logout

第四步:启动容器

        执行下面命令,使用我们刚刚创建的镜像启动容器

docker run -it -d --name myFirstApp  myfirstapp:tag-v-1

使用Dockerfile在Docker中部署SpringBoot项目_docker_05

        执行此命令后,正常情况下就会在控制台打印出该容器的ID了。

        可以执行 docker container ls 命令或者 docker ps,查看容器运行状况。

        也可以执行 docker container logs -f  容器名或者是容器ID   命令,查看日志

        如果需要从自己的私有仓库拉取镜像到本地,然后启动容器,则先使用命令docker login --username 登录名  仓库地址  -p 登陆密码 登录,然后执行 docker pull myfirstapp:tag-v-1 拉取镜像,这时候执行docker image ls 就可以看到拉取下来的镜像了。然后执行上面的启动容器命令,完成启动