docker file

一、 docker file介绍
dockerfile就是用来构建docker镜像的构建文件,命令参数脚本。

构建步骤:
1、编写一个dockerfile 文件
2、docker build构建成为一个镜像
3、docker run 运行镜像
4、docker pusH 发布镜像(Docker Hub 、阿里云镜像仓库)

查看一下官方是怎么做的
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像
官方既然可以制作镜像,那我们也可以

二、Dockerfile 构建过程
2.1基础知识
1 每个保留关键字(指令)都是必须是大写字母
2 执行从上到下顺序执行
3 # 表示注释
4 每一个指令都会创建一个新的镜像层,并提交
在这里插入图片描述
2.2步骤:开发,部署,运维,缺一不可
Dockerfile:构建文件,定义了一切的步骤,源代码
Dockermages:通过Dockerfile 构建生成的镜像,最终发布和运行的产品
Docker容器:容器就是镜像运行起来提供服务器

三、Dockerfile 的指令
FROM #基础镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,名字+邮箱
RUN #镜像构建的时候被需要运行的命令
ADD #步骤,tomcat镜像,这个tomcat压缩包,添加内容
WORKDIR #镜像的挂载目录
VOLUME #挂载的目录
EXPOST #保留端口配置
CMD #指定这个容器启动的时候要运行的命令,只有之后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
COPY #类似ADD,将我们文件拷贝到镜像中
ENV #构建的时候设置环境变量
在这里插入图片描述
四 、测试
4.1 编写Dockerfile 的文件

[root@node143 dockerfile]# vim mydockerfile

FROM centos 
MAINTAINER xiaoshimei<12345645@qq.com>

ENV MYPATH /usr/locat 
WORKDIR $MYPATH

RUN yum -y install vim 
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH 
CMD echo"----end----" 
CMD /bin/bash  

4.2通过这个文件构建镜像

#命令 docker build -f dockerfile文件路径 -t 镜像名:[tag]版本号
docker build -f mydockerfile -t mydockerfile:0.1 .

构建成功最底部会显示这两行

Successfully built 29f50f45bc0b
Successfully tagged mydockerfile:0.1

#3 测试运行

[root@node143 dockerfile]# docker run -it mydockerfile:0.1
[root@5115d212f2c2 locat]# pwd
/usr/locat

在这里插入图片描述

对比:之前的原生的centos

在这里插入图片描述

我们增加之后的镜像
在这里插入图片描述

#我们可以列出本地镜像的变更历史

查看现有的镜像

[root@node143 dockerfile]# docker images
REPOSITORY                                       TAG                       IMAGE ID       CREATED          SIZE
mydockerfile                                     0.1                       29f50f45bc0b   26 minutes ago   291MB
nginx                                            latest                    f6d0b4767a6c   2 months ago     133MB
foxiswho/rocketmq                                4.8.0                     ccdf2960021a   2 months ago     505MB
styletang/rocketmq-console-ng                    latest                    7df83bb6e638   3 years ago      702MB

通过 docker history +镜像ID 可以查看当前镜像构成历史

[root@node143 dockerfile]# docker history   29f50f45bc0b
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
29f50f45bc0b   26 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
ad88d26c0c57   26 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
025d57b9faec   26 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
e224252e8c18   26 minutes ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
eb920921d222   26 minutes ago   /bin/sh -c yum -y install net-tools             23.4MB    
3c70319360e9   31 minutes ago   /bin/sh -c yum -y install vim                   58.1MB    
ba3d8a11d96e   31 minutes ago   /bin/sh -c #(nop) WORKDIR /usr/locat            0B        
87e3e7c84495   31 minutes ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/locat        0B        
140dd8dc67e8   31 minutes ago   /bin/sh -c #(nop)  MAINTAINER xiaoshimei<123…   0B        
300e315adb2f   3 months ago     /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      3 months ago     /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      3 months ago     /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7…   209MB     

我们平时拿到一个镜像,可以研究一下它是怎么做到的

####################################################

五、 CMD 和ENTRYPOINT 区别
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令

5.1测试 cdm
#编写dockerfile文件

[root@node143 dockerfile]# vim dockerfile-cmd-test

#写入

FROM centos
CMD ["ls","-a"],

#构建文件

[root@node143 dockerfile]# docker build -f dockerfile-cmd-test -t cmdtset .
Sending build context to Docker daemon  217.6MB
Step 1/2 : FROM centos
 ---> 300e315adb2f
Step 2/2 : CMD ["ls","-a"],
 ---> Running in 4dd090d39ebf
Removing intermediate container 4dd090d39ebf
 ---> b31e0a3e81b4
Successfully built b31e0a3e81b4
Successfully tagged cmdtset:latest

#run 运行,返回的结果就是脚本里写的需要执行 ls -a 的结果

[root@node143 dockerfile]# docker run b31e0a3e81b4
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt

#想追加一个命令 -l ls -al 返回结果报错了

[root@node143 dockerfile]# docker run b31e0a3e81b4 -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
ERRO[0000] error waiting for container: context canceled 

#cmd 的情况下 -l 替换了 [“ls”,“-a”] 这个命令,所以执行不成功 ,因为 l 并不是命令

5.2测试ENTRYPOINT
#同样也是编写dockerfile文件,内容与之前的一样

[root@node143 dockerfile]# vim dockerfile-cmd-entrypoint 
FROM centos
ENTRYPOINT  ["ls","-a"]

#构建文件

[root@node143 dockerfile]# docker build -f dockerfile-cmd-entrypoint -t entoryonit-test .
Sending build context to Docker daemon  217.6MB
Step 1/2 : FROM centos
 ---> 300e315adb2f
Step 2/2 : ENTRYPOINT  ["ls","-a"]
 ---> Running in 52fd4e3fc7f5
Removing intermediate container 52fd4e3fc7f5
 ---> 77d940efb3ad
Successfully built 77d940efb3ad
Successfully tagged entoryonit-test:latest

#运行

[root@node143 dockerfile]# docker run 77d940efb3ad
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found

#我们的追加命令,是直接拼接在我们的 ENTRYPOINT 命令后面的 !

[root@node143 dockerfile]# docker run 77d940efb3ad -l
total 0
drwxr-xr-x   1 root root   6 Mar 16 14:38 .
drwxr-xr-x   1 root root   6 Mar 16 14:38 ..
-rwxr-xr-x   1 root root   0 Mar 16 14:38 .dockerenv
lrwxrwxrwx   1 root root   7 Nov  3 15:22 bin -> usr/bin
drwxr-xr-x   5 root root 340 Mar 16 14:38 dev
drwxr-xr-x   1 root root  66 Mar 16 14:38 etc
drwxr-xr-x   2 root root   6 Nov  3 15:22 home
lrwxrwxrwx   1 root root   7 Nov  3 15:22 lib -> usr/lib
lrwxrwxrwx   1 root root   9 Nov  3 15:22 lib64 -> usr/lib64
drwx------   2 root root   6 Dec  4 17:37 lost+found

后面追加命令是写原生命令的,说明是用CMD实现,如果追加的命令是加 “-”的,说明是用 ENTRYPOINT实现的

————————————————
版权声明:本文为优快云博主「iozzzzz」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/clover661/article/details/114899909

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值