很多初次使用Docker的朋友,不清楚如何利用Dockerfile部署自己的springboot项目,网络上搜到的教程大多都是告诉你怎么写Dockerfile,但是并没有从头开始讲如何使用。此文将从头开始一步一步的讲解如何进行部署。
安装Docker环境(CentOS平台,详细版)
第一步:准备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与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
2、如果你有自己的Docker仓库,则先进行登录操作。如果没有,则忽略此步骤。
docker login --username 登录名 仓库地址 -p 登陆密码
3、构建镜像
docker build -t myfirstapp:tag-v-1 .
docker build -f Dockerfile文件路径 -t myfirstapp:tag-v-1 . 进行构建镜像
注意:命令最后有一个小点 . 一定不能漏掉了哦,否则就会构建失败!!!小点表示以当前目录构建上下文
-t 后面的仓库名myfirstapp也一定要小写哦。
至此,我们就做好了一个自己的镜像文件啦~~~
docker image ls
docker push myfirstapp:tag-v-1
如果登录了远程仓库,记得在所有操作完成后,登出哦,避免造成无操作。
docker logout
第四步:启动容器
执行下面命令,使用我们刚刚创建的镜像启动容器
docker run -it -d --name myFirstApp myfirstapp:tag-v-1
执行此命令后,正常情况下就会在控制台打印出该容器的ID了。
docker container ls 命令或者 docker ps,查看容器运行状况。
docker container logs -f 容器名或者是容器ID
docker login --username 登录名 仓库地址 -p 登陆密码 登录,然后执行 docker pull myfirstapp:tag-v-1 拉取镜像,这时候执行docker image ls