什么是DockerFile?
dockerfile
相当于是一个文档,可以基于dockerfile构建docker镜像的文件。
dockerfile
仅仅是用来制作镜像的源码文件,是构建容器过程中的指令,docker能够读取dockerfile的指定进行自动构建容器,基于dockerfile制作镜像,每一个指令都会创建一个镜像层,即镜像都是多层叠加而成,因此,层越多,效率越低,创建镜像,层越少越好。因此能在一个指令完成的动作尽量通过一个指令定义。
构建步骤:
- 编写一个dockerfile文件
- dockerbuild构建成为一个镜像
- dockerrun运行镜像
- dockerpush 发布镜像(DockerHub、阿里云镜像仓库!)
DockerFile的构建过程
- 每个保留关键字(指令)都是必须大写字母
- 执行从上到下顺序执行
- #标识注释
- 每一个指令都会创建提交一个新的镜像层,并提交
DockerFile的指令
FROM 基础镜镜像,一切从这里开始构建
MAINTAINER 镜像是谁写的,姓名+邮箱
RUN 镜像构建的时候需要运行的命令
ADD 步骤,tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR 镜像的工作目录
VOLUME 挂载的目录
EXPOSE 保留端口配置
CMD 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT 指定这个容器启动的时候要运行的命令。可以追加命令
ONBUILD 当构建一个被继承DockerFile这个时候就会运行ONBUILD 的指令。触发指令。
COPY 类似ADD,将我们文件拷贝到镜像中
ENV 构建的时候设置环境变量
构建自己的centos
DockerHub中99%镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来进行的构建。
1、创建一个dockfile 文件
mkdir dockerfile
2、编写dockerfile文件mydockefile-centos
[root@iZwz9geewjuo2sogidqn50Z dockerfile]# cat mydockefile-centos
FROM centos
MAINTAINER li<1325510524@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "------end-------"
CMD /bin/bash
3、通过这个文件构建镜像
命令语法:
docker build -f dockerfile文件路径 -t 镜像名:[tag]
示例:
[root@iZwz9geewjuo2sogidqn50Z dockerfile]# docker build -f mydockefile-centos -t mycentos:0.1 .
Sending build context to Docker daemon 2.048kB
Step 1/10 : FROM centos
---> 5d0da3dc9764
Step 2/10 : MAINTAINER li<1325510524@qq.com>
---> Running in 9dc0190e27ad
Removing intermediate container 9dc0190e27ad
---> e7a0495b3e0c
Step 3/10 : ENV MYPATH /usr/local
---> Running in cfe662f57224
Removing intermediate container cfe662f57224
---> ebf49015fcf7
Step 4/10 : WORKDIR $MYPATH
---> Running in 29952bc96a95
Removing intermediate container 29952bc96a95
---> eb102496fe14
Step 5/10 : RUN yum -y install vim
---> Running in e79f7790e2f7
CentOS Linux 8 - AppStream 1.5 MB/s | 8.4 MB 00:05
CentOS Linux 8 - BaseOS 2.8 MB/s | 4.6 MB 00:01
CentOS Linux 8 - Extras 10 kB/s | 10 kB 00:01
Dependencies resolved.
.
.
.
Successfully built 83d85b399f29
Successfully tagged mycentos:0.1
看到Successfully built 83d85b399f29 Successfully tagged mycentos:0.1
就说明成功了!
4、测试运行
对比官方的镜像:
自己构建的镜像:
可以列出本地进行的变更历史: