docker之Dockerfile

本文介绍了Dockerfile的用途和基本指令,包括FROM、MAINTAINER、RUN、ADD、WORKDIR等,并展示了如何编写及执行Dockerfile来构建一个包含vim和net-tools的CentOS镜像。通过docker run启动容器,验证了ENV和WORKDIR的设置,并演示了如何使用CMD和ENTRYPOINT指令。
摘要由CSDN通过智能技术生成

Dockerfile

一、简述

dockefile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockefile文件。这个文件十分简单!
Docker镜像逐渐成为企业交付的标准,必须要掌握!
步骤:
DockerFile:构建文件,定义了一切的步骤,源代码
Dockerlmages :通过DockerFile构建生成的镜像,最终发布和运行的产品!
Docker容器:容器就是镜像运行起来提供服务器

二、DockerFile的指令

FROM  		#基础镜像,一切从这里开始构建
MAINTAINER  #镜像是谁写的,即作者(一般需要名字+邮箱)
RUN 		#构建镜像时需要运行的命令
ADD  		#添加内容(镜像压缩包(tar)等,COPY不能)
WORKDIR		#镜像工作目录
VOLUME		#设置容器卷(挂载目录位置)
EXPOSE		#指定暴露端口
CMD			#指定容器启动(docker run...)时要运行的命令,只有最后一个会生效。
ENTRYPOINT	#指定容器启动时要运行的命令,可以追加命令(参数)
ONBUILD		#当构建一个被继承DockerFile时就会执行该指令,属于触发指令
COPY 		#类似于ADD,将文件拷贝到镜像中
ENV 		#构建的时候设置环境变量
RUN			#

在这里插入图片描述

三、构建自己的centOS

1.编写DockerFile文件

FROM centos

LABEL maintainer="huangxin<hx@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

2.执行该文件

$ docker build -f mydockerfile1 -t mydockercentos:1.0.0 .
Sending build context to Docker daemon  2.048kB
Step 1/10 : FROM centos
 ---> 300e315adb2f
Step 2/10 : LABEL maintainer="huangxin<hx@qq.com>"
 ---> Running in 475938bfd29c
Removing intermediate container 475938bfd29c
 ---> 2d86fc10e266
Step 3/10 : ENV MYPATH /usr/local
 ---> Running in d6a083560fae
Removing intermediate container d6a083560fae
 ---> 0eca402731dd
Step 4/10 : WORKDIR $MYPATH
 ---> Running in 61d40c00fb2e
Removing intermediate container 61d40c00fb2e
 ---> f267f2c8e864
Step 5/10 : RUN yum -y install vim
 ---> Running in 93d25ad7b56a
CentOS Linux 8 - AppStream                      552 kB/s | 8.1 MB     00:14    
CentOS Linux 8 - BaseOS                         437 kB/s | 3.6 MB     00:08    
CentOS Linux 8 - Extras                          13 kB/s | 9.8 kB     00:00    
Dependencies resolved.
================================================================================
 Package             Arch        Version                   Repository      Size
================================================================================
Installing:
 vim-enhanced        x86_64      2:8.0.1763-15.el8         appstream      1.4 M
Installing dependencies:
 gpm-libs            x86_64      1.20.7-17.el8             appstream       39 k
 vim-common          x86_64      2:8.0.1763-15.el8         appstream      6.3 M
 vim-filesystem      noarch      2:8.0.1763-15.el8         appstream       48 k
 which               x86_64      2.21-12.el8               baseos          49 k

Transaction Summary
================================================================================
Install  5 Packages

Total download size: 7.8 M
Installed size: 30 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-17.el8.x86_64.rpm        144 kB/s |  39 kB     00:00    
(2/5): vim-filesystem-8.0.1763-15.el8.noarch.rp 667 kB/s |  48 kB     00:00    
(3/5): which-2.21-12.el8.x86_64.rpm              91 kB/s |  49 kB     00:00    
(4/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm  559 kB/s | 1.4 MB     00:02    
(5/5): vim-common-8.0.1763-15.el8.x86_64.rpm    472 kB/s | 6.3 MB     00:13    
--------------------------------------------------------------------------------
Total                                           547 kB/s | 7.8 MB     00:14     
warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-17.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS Linux 8 - AppStream                      212 kB/s | 1.6 kB     00:00    
Importing GPG key 0x8483C65D:
 Userid     : "CentOS (CentOS Official Signing Key) <security@centos.org>"
 Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1 
  Installing       : which-2.21-12.el8.x86_64                               1/5 
  Installing       : vim-filesystem-2:8.0.1763-15.el8.noarch                2/5 
  Installing       : vim-common-2:8.0.1763-15.el8.x86_64                    3/5 
  Installing       : gpm-libs-1.20.7-17.el8.x86_64                          4/5 
  Running scriptlet: gpm-libs-1.20.7-17.el8.x86_64                          4/5 
  Installing       : vim-enhanced-2:8.0.1763-15.el8.x86_64                  5/5 
  Running scriptlet: vim-enhanced-2:8.0.1763-15.el8.x86_64                  5/5 
  Running scriptlet: vim-common-2:8.0.1763-15.el8.x86_64                    5/5 
  Verifying        : gpm-libs-1.20.7-17.el8.x86_64                          1/5 
  Verifying        : vim-common-2:8.0.1763-15.el8.x86_64                    2/5 
  Verifying        : vim-enhanced-2:8.0.1763-15.el8.x86_64                  3/5 
  Verifying        : vim-filesystem-2:8.0.1763-15.el8.noarch                4/5 
  Verifying        : which-2.21-12.el8.x86_64                               5/5 

Installed:
  gpm-libs-1.20.7-17.el8.x86_64         vim-common-2:8.0.1763-15.el8.x86_64    
  vim-enhanced-2:8.0.1763-15.el8.x86_64 vim-filesystem-2:8.0.1763-15.el8.noarch
  which-2.21-12.el8.x86_64             

Complete!
Removing intermediate container 93d25ad7b56a
 ---> a023125f0185
Step 6/10 : RUN yum -y install net-tools
 ---> Running in 69fa6fd22988
Last metadata expiration check: 0:00:21 ago on Mon Jul  5 01:41:27 2021.
Dependencies resolved.
================================================================================
 Package         Architecture Version                        Repository    Size
================================================================================
Installing:
 net-tools       x86_64       2.0-0.52.20160912git.el8       baseos       322 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 322 k
Installed size: 942 k
Downloading Packages:
net-tools-2.0-0.52.20160912git.el8.x86_64.rpm   148 kB/s | 322 kB     00:02    
--------------------------------------------------------------------------------
Total                                           119 kB/s | 322 kB     00:02     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1 
  Installing       : net-tools-2.0-0.52.20160912git.el8.x86_64              1/1 
  Running scriptlet: net-tools-2.0-0.52.20160912git.el8.x86_64              1/1 
  Verifying        : net-tools-2.0-0.52.20160912git.el8.x86_64              1/1 

Installed:
  net-tools-2.0-0.52.20160912git.el8.x86_64                                     

Complete!
Removing intermediate container 69fa6fd22988
 ---> 97aa3f4c5232
Step 7/10 : EXPOSE 80
 ---> Running in b5f1f946392e
Removing intermediate container b5f1f946392e
 ---> d725495cb80c
Step 8/10 : CMD echo $MYPATH
 ---> Running in 104a77030b37
Removing intermediate container 104a77030b37
 ---> 5f8562ccd37a
Step 9/10 : CMD echo "---end---"
 ---> Running in 03704aa63796
Removing intermediate container 03704aa63796
 ---> 831bdd6f8b15
Step 10/10 : CMD /bin/bash
 ---> Running in 0009046d4882
Removing intermediate container 0009046d4882
 ---> 4cb902c7b559
Successfully built 4cb902c7b559
Successfully tagged mydockercentos:1.0.0

如上所示,最后显示了successfully … 成功构建

3.测试容器

docker images
REPOSITORY       TAG       IMAGE ID       CREATED         SIZE
mydockercentos   1.0.0     4cb902c7b559   4 minutes ago   299MB

#启动容器,因为CMD中已经有/bin/bash 因此以终端方式运行不需要再增加
$ docker run -it 4cb902c7b559
[root@028253a04e78 local]# 

#pwd,查看当前目录,由结果可知构建文件时ENV 与 WORKDIR生效
#原本的centOS工作目录默认是根目录 /
$ pwd
/usr/local

#查看网络信息(以前的centOS镜像是没有的)
$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 9  bytes 737 (737.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

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

测试vim也可用
在这里插入图片描述

4.拓展(CMD ENTRYPOINT)

CMD
作用:
为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
注意:
1.即如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
2.CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。

ENTRYPOINT
作用:
类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
注意:
1.如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
2.如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 CMD 指令指定的程序。
3.在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数,不会被覆盖。

(如有错误,欢迎指正。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值