在足球还叫蹴鞠的时候,我就写了一篇有关于dockerfile的文章,本来想着靠那篇文章火一把,从此脱离开发仔的身份,专心写文。结果很意外,这篇Dockerfile指令详解的文章竟然访问量比我的头发还少。甚至好长一段时间我都忘了它的存在,该死!
在经过了长时间的思考后,我终于知道为什么这篇文章会不火了,我他妈没买量!!!
…
好吧,上面扯那么多其实就是为了植入我那篇过气的文章。下面进入主题。
在我们想把自己的程序打包成镜像,并运行在docker容器中的时候我们应该怎么做呢?
1.编写Dockerfile文件。
不了解Dockerfile指令的请跳转链接。
#指定基础镜像(一般指定程序所依赖的环境)
#本例子是构建SpringBoot所以我指定的jdk环境变量
FROM openjdk:11
#添加维护者信息
MAINTAINER author:edison
MAINTAINER mail:[email protected]
#将./hello-world.jar添加到容器的/opt目录中
COPY ./hello-world.jar /opt
#指定dockerfile的命令在哪个目录下执行
WORKDIR /opt
#指定容器和外界交互的端口
EXPOSE 80
#容器运行后执行的命令(该命令在WORKDIR指定的工作目录下执行)
#注意:多个CMD指令只有最后一个会生效
CMD java -jar hello-world.jar
#在构建镜像时执行的命令
#我这边用它来打印java的环境变量
RUN java -version
#添加该镜像的元数据
LABEL version="1.0" description="这是一个Web服务器" by="edc"
2.将你的Dockerfile
文件和你的jar
包放在同一个目录里
注意:Dockerfile
和jar包
最好存放在一个创建好的空目录里,不要放在/
目录中,因为构建是由Docker
守护程序而不是CLI
运行的。构建过程要做的第一件事是将整个上下文(递归)发送到守护程序。在大多数情况下,最好以空目录作为上下文,并将Dockerfile
保留在该目录中。仅添加构建Dockerfile
所需的文件。所以如果你要是将Dockerfile
放在/
目录构建,你就是在犯罪,懂吗?
由于我上面dockerfile的例子
hello-world.jar
是放在./
目录下也就是和Dockerfile的同一目录,如果说你的jar包
不和dockerfile同一目录的话那么COPY
指令的那个./hello-world.jar
就要换成你jar包
存放的路径。
3.在Dockerfile所在的目录下运行docker build --tag web:latest .
命令
不了解
docker build
命令的请跳转链接。
注意:docker build
后面要加.
参数,代表着构建当前目录的Dockerfile
文件。而--tag
是给镜像取一个名字,并指定镜像的版本号,此时构建好的镜像名字为web
,版本号为latest
。
可以看到执行了docker build .
后除了打印指令的执行信息之外还在8/9
行中打印了容器里的JDK环境变量,这是因为我使用RUN
z执行了java -version
命令。
4.我们执行一下docker images
命令查看我有没有我们刚刚构建好的镜像
这时候表示镜像构建成功。
5.使用docker run
通过构建好的新镜像跑一个容器
6.访问一下
成功!!!