什么是 Dockerfile?
相关文章:Docker 常用命令总结
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
说到底,Dockerfile 就是一个名为 Dockerfile 且没有后缀名的文本文件,在 Linux 中,使用 vim Dockerfile
,即可创建一个 Dockerfile。
一个 Dockerfile 示例
通过一个示例,来学习如何编写 Dockerfile。
先通过 vim Dockerfile
, 创建 Dockerfile,再写入如下内容:
# 这是基础镜像
FROM centos:7.6.1810
# 将元数据添加到镜像, LABEL 是键值对。
LABEL "author"="you170917"
LABEL "version"="1.0"
LABEL "email"="you170917@gmail.com"
# 将当前目录下的 jar 包添加进来,并重命名
ADD readinglist-0.0.1-SNAPSHOT.jar readinglist.jar
# 将当前目录下的 jdk 包添加进来,重命名,再配置环境变量
ADD jdk1.8.0_261 jdk8
ENV PATH jdk8/bin:$PATH
# 配置环境变量支持中文
ENV LANG="en_US.UTF-8"
# 暴露 8080 端口
EXPOSE 8080
# 运行时的命令
ENTRYPOINT ["java","-jar","readinglist.jar"]
除了上面使用到的指令,Dockerfile 还有如下指令:
RUN
用于执行后面跟着的命令行命令,有以下俩种格式:
shell 格式:
RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。
exec 格式:
RUN ["可执行文件", "参数1", "参数2"]
COPY
复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
CMD
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
- CMD 在docker run 时运行。
- RUN 是在 docker build。
作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
VOLUME
定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
格式:
VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>
在启动容器 docker run 的时候,我们可以通过 -v
参数修改挂载点。
WORKDIR
指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。
docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。
格式:
WORKDIR <工作目录路径>
通过 Dockerfile 部署运行 jar 包
主要分为三步:
1、编写 Dockerfile
2、构建镜像
3、运行容器
这里,就使用上面那个 Dockerfile 。
先构建镜像:
docker build -t readinglist:2.0 .
-
docker build 是构建镜像的初始命令
-
-t readinglist:2.0 :指定镜像的名字和版本号,可任意取
-
最后的 . 表示 Dockerfile 在当前目录下
运行容器
docker run --name=read -p 8000:8080 --restart=always -d readinglist:2.0
-
docker run:是运行容器的初始命令
-
--name=read:表示容器的名字叫做 name
-
-p 8000:8080:表示将主机 8000 端口,映射到容器内的 8080 端口
-
--restart=always:表示让容器一直运行
-
-d:表示容器后台运行
-
readinglist:2.0 这是运行容器的基础镜像和版本号
参考资料
每天学习一点点,每天进步一点点。