docker——DockerFile

目录

一、DockerFile是什么

二、DockerFile的构建过程

三、DockerFile指令说明

四、创建一个自己的centos镜像

五、CMD和ENTRYPOINT的区别

六、DockerFile制作tomcat镜像

七、发布自己的镜像

一、DockerFile是什么

DockerFile是用来构建docker镜像的文件,是一组命令参数脚本

构建步骤

1.编写一个DockerFile文件

2.通过docker build构建为一个镜像

3.docker run运行镜像

4.docker push发布镜像(DockerHub、阿里云镜像)

二、DockerFile的构建过程

构建命令脚本基础知识:

1.每个保留关键字(指令)都必须是大写字母

2.从上到下顺序执行

3.#表示注释

4.每个指令都会创建提交一个新的镜像层,并提交

DockerFile:构建文件,定义一切的步骤,源代码

DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品

Docker容器:容器就是镜像运行起来的实例,用来提供服务

三、DockerFile指令说明

FROM            # 基础镜像,一切从这里开始构建
MAINTAINER      # 镜像是谁写的, 姓名+邮箱
RUN             # 镜像构建的时候需要运行的命令
ADD             # 步骤, tomcat镜像, 这个tomcat压缩包!添加内容
WORKDIR         # 镜像的工作目录
VOLUME          # 挂载的目录
EXPOSE          # 保留端口配置
CMD             # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
ENTRYPOINT      # 指定这个容器启动的时候要运行的命令, 可以追加命令
ONBUILD         # 当构建一个被继承DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY            # 类似ADD, 将我们文件拷贝到镜像中
ENV             # 构建的时候设置环境变量

四、创建一个自己的centos镜像

1.编写DockerFile文件

[root@WRF dockerfile]# vim mydockerfile-centos
[root@WRF dockerfile]# cat mydockerfile-centos
FROM centos                     #基础镜像
MAINTAINER WRF<651856247@qq.com>
ENV MYPATH /user/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

2.通过镜像文件mydockerfile-centos构建镜像

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

[root@WRF dockerfile]# docker build -f mydockerfile-centos -t mycentos:0.1 .
[+] Building 56.8s (8/8) FINISHED                                                                                                        docker:default
 => [internal] load build definition from mydockerfile-centos                                                                                      0.0s
 => => transferring dockerfile: 259B                                                                                                               0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                                       16.0s
 => [internal] load .dockerignore                                                                                                                  0.0s
 => => transferring context: 2B                                                                                                                    0.0s
 => [1/4] FROM docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987                                  9.2s
 => => resolve docker.io/library/centos:7@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987                                  0.0s
 => => sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987 1.20kB / 1.20kB                                                     0.0s
 => => sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f 529B / 529B                                                         0.0s
 => => sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9 2.75kB / 2.75kB                                                     0.0s
 => => sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc 76.10MB / 76.10MB                                                   6.2s
 => => extracting sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc                                                          2.6s
 => [2/4] WORKDIR /user/local                                                                                                                      1.3s
 => [3/4] RUN yum -y install vim                                                                                                                  23.8s
 => [4/4] RUN yum -y install net-tools                                                                                                             4.0s
 => exporting to image                                                                                                                             2.2s 
 => => exporting layers                                                                                                                            2.2s 
 => => writing image sha256:41f11fc9253da370995064cef10d44f3601fc6eaaa38c37bf2e5ec1869e95733                                                       0.0s 
 => => naming to docker.io/library/mycentos:0.1

3.对比官方centos和自己创建的mycentos

官方的

[root@WRF /]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
mysql           5.7       c20987f18b13   2 years ago     448MB
centos          latest    5d0da3dc9764   2 years ago     231MB
elasticsearch   7.6.2     f29a1ee41030   3 years ago     791MB
[root@WRF /]# docker run -it centos
[root@e66add697e6a /]# pwd         #工作目录为根目录
/
[root@e66add697e6a /]# vim         
bash: vim: command not found
[root@e66add697e6a /]# ifconfig    #命令不可用
bash: ifconfig: command not found

自己的             

[root@WRF dockerfile]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
mycentos        0.1       41f11fc9253d   2 minutes ago   525MB
mysql           5.7       c20987f18b13   2 years ago     448MB
centos          latest    5d0da3dc9764   2 years ago     231MB
elasticsearch   7.6.2     f29a1ee41030   3 years ago     791MB
[root@WRF dockerfile]# docker run -it mycentos:0.1
[root@401061f01bfb local]# ifconfig          #命令可用
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)
        RX packets 12  bytes 1035 (1.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@401061f01bfb local]# pwd               #工作目录为构建时添加的目录
/user/local

结论:DockerHub上提供的镜像只是最基础的,需要自己丰富完善做增强

4.列出本地镜像变更历史

命令:docker history 镜像ID

[root@WRF dockerfile]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
mycentos        0.1       41f11fc9253d   19 minutes ago   525MB
mysql           5.7       c20987f18b13   2 years ago      448MB
centos          latest    5d0da3dc9764   2 years ago      231MB
elasticsearch   7.6.2     f29a1ee41030   3 years ago      791MB
[root@WRF dockerfile]# docker history 41f11fc9253d
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
41f11fc9253d   19 minutes ago   CMD ["/bin/sh" "-c" "/bin/bash"]                0B        buildkit.dockerfile.v0
<missing>      19 minutes ago   CMD ["/bin/sh" "-c" "echo \"----end----\""]     0B        buildkit.dockerfile.v0
<missing>      19 minutes ago   CMD ["/bin/sh" "-c" "echo $MYPATH"]             0B        buildkit.dockerfile.v0
<missing>      19 minutes ago   EXPOSE map[80/tcp:{}]                           0B        buildkit.dockerfile.v0
<missing>      19 minutes ago   RUN /bin/sh -c yum -y install net-tools # bu…   25MB      buildkit.dockerfile.v0
<missing>      19 minutes ago   RUN /bin/sh -c yum -y install vim # buildkit    296MB     buildkit.dockerfile.v0
<missing>      20 minutes ago   WORKDIR /user/local                             0B        buildkit.dockerfile.v0
<missing>      20 minutes ago   ENV MYPATH=/user/local                          0B        buildkit.dockerfile.v0
<missing>      20 minutes ago   MAINTAINER WRF<651856247@qq.com>                0B        buildkit.dockerfile.v0
<missing>      2 years ago      /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      2 years ago      /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      2 years ago      /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB     

五、CMD和ENTRYPOINT的区别

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

1.测试CMD

#1.编写dockerfile文件
[root@WRF dockerfile]# vim dockerfile-cmd-test 
FROM centos
CMD ["ls", "-a"]

#2.构建镜像
[root@WRF dockerfile]# docker build -f  dockerfile-cmd-test -t cmdtest .                                    

#3.run运行
[root@WRF dockerfile]# docker run 06f2cc65ea4a
.
..
.dockerenv
anaconda-post.log
bin
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

#4.追加一个命令-l,变成ls -al
[root@WRF dockerfile]# docker run 06f2cc65ea4a -l
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "-l": executable file not found in $PATH: unknown.
ERRO[0000] error waiting for container: context canceled 
#CMD命令,-l替换了["ls", "-a"]命令,-l不是命令,所以报错了

2.测试ENTRYPOINT

#1.编写dockerfile文件
[root@WRF dockerfile]# vim dockerfile-entrypoint-test 
FROM centos
ENTRYPOINT ["ls", "-a"]
 
#2.构建文件
[root@WRF dockerfile]# docker build -f dockerfile-entrypoint-test -t entrypoint-test:0.1 .
 
#3.run运行 发现我们的ls -a 命令同样生效
[root@WRF /]# docker run entrypoint-test:0.1
.
..
.dockerenv
anaconda-post.log
bin
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

#4.追加命令-l, 是直接拼接到ENTRYPOINT命令的后面的
[root@WRF /]# docker run entrypoint-test:0.1 -l
total 64
drwxr-xr-x   1 root root  4096 Mar  7 09:54 .
drwxr-xr-x   1 root root  4096 Mar  7 09:54 ..
-rwxr-xr-x   1 root root     0 Mar  7 09:54 .dockerenv
-rw-r--r--   1 root root 12114 Nov 13  2020 anaconda-post.log
lrwxrwxrwx   1 root root     7 Nov 13  2020 bin -> usr/bin
drwxr-xr-x   5 root root   340 Mar  7 09:54 dev
drwxr-xr-x   1 root root  4096 Mar  7 09:54 etc
drwxr-xr-x   2 root root  4096 Apr 11  2018 home
lrwxrwxrwx   1 root root     7 Nov 13  2020 lib -> usr/lib
lrwxrwxrwx   1 root root     9 Nov 13  2020 lib64 -> usr/lib64
drwxr-xr-x   2 root root  4096 Apr 11  2018 media
drwxr-xr-x   2 root root  4096 Apr 11  2018 mnt
drwxr-xr-x   2 root root  4096 Apr 11  2018 opt
dr-xr-xr-x 176 root root     0 Mar  7 09:54 proc
dr-xr-x---   2 root root  4096 Nov 13  2020 root
drwxr-xr-x  11 root root  4096 Nov 13  2020 run
lrwxrwxrwx   1 root root     8 Nov 13  2020 sbin -> usr/sbin
drwxr-xr-x   2 root root  4096 Apr 11  2018 srv
dr-xr-xr-x  13 root root     0 Mar  7 09:54 sys
drwxrwxrwt   7 root root  4096 Nov 13  2020 tmp
drwxr-xr-x  13 root root  4096 Nov 13  2020 usr
drwxr-xr-x  18 root root  4096 Nov 13  2020 var

六、DockerFile制作tomcat镜像

...

七、发布自己的镜像

...

狂神笔记:狂神docker基础笔记

  • 31
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值