DockerFile

目录

什么是 Dockerfile?

DockerFile的一些规则

docker执行DockerFile的大致流程

DockerFile指令

ENTRYPOINT与CMD比较说明(这俩命令太像了,而且还可以配合使用):

DockerFile实例

实例1:DockerFile基于centos7.9.2009创建Nginx


什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

DockerFile的一些规则

  • 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  • 指令顺序执行,遵循从上到下原则
  • #表示注释
  • 每条指令都会创建一个新的镜像层,并对镜像进行提交

docker执行DockerFile的大致流程

  • docker从基础镜像运行一个容器
  • 顺序执行一条指令对容器做出修改
  • 执行类似docker commit的操作提交一个新的镜像层
  • docker基于刚才提交的镜像运行一个新的容器
  • 执行DockerFile中下一条指令直到文件中的所有指令都执行完成

DockerFile指令

  • FROM:指定基础镜像
  • MAINTAINER:镜像维护者姓名及邮箱地址
  • RUN:容器构建时需要运行的命令
  • EXPOSE:当前容器对外暴露的端口号
  • WORKDIR:指定在创建容器后,终端默认登录进来的工作目录
  • ENV:用来在构建镜像过程中设置环境变量
  • ADD:将宿主机目录下的文件拷贝进镜像,ADD命令会自动处理URL和解压tar压缩包
  • COPY:拷贝文件、目录到镜像中。具体是将从构建上下文目录中<src原路径>的文件或目录复制到新一层镜像的<目标路径>位置 ,有两种写法:COPY src dest 或者 COPY ["src", "dest"]
  • VOLUME:容器数据卷,用于数据保存和持久化工作
  • CMD:指定一个容器启动时要运行的命令
    • 注意DockerFile中可以有多个CMD指令,但只有最后一个在启动时生效,CMD会被 docker run 之后的命令或参数覆盖
    • CMD指令的格式和RUN相似,也是两种格式:
      • shell格式:CMD <命令>
      • exec格式:CMD ["可执行文件", "参数1", "参数2" ...]
      • 参数列表格式:CMD ["参数1", "参数2", ...],在指定了ENTRYPOINT 指令后,用CMD指定具体的参数。
  • ENTRYPOINT:指定一个容器启动时要运行的命令,与CMD一样都是在指定容器启动程序及参数。
  • ONBUILD:当构建一个被继承的DockerFile时运行命令, 父镜像在被子镜像继承后,父镜像的ONBUILD被触发。

ENTRYPOINT与CMD比较说明(这俩命令太像了,而且还可以配合使用):

1. 相同点:

        只能写一条,如果写了多条,那么只有最后一条生效

        容器启动时才运行,运行时机相同

2. 不同点:

         ENTRYPOINT不会被运行的command覆盖,而CMD则会被覆盖

DockerFile实例

实例1:DockerFile基于centos7.9.2009创建Nginx

[root@localhost ~]# mkdir nginx
[root@localhost ~]# cd nginx/
[root@localhost nginx]# vim DockerFile
FROM centos:7.9.2009

MAINTAINER lyh 17633164083@163.com

RUN yum -y update && \
    yum -y install epel-release && \
    yum -y install nginx

COPY nginx.conf /etc/nginx/nginx.conf

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

[root@localhost nginx]# docker build -f DockerFile -t nginx:last .                                           
[root@localhost nginx]# docker images                                                                          
REPOSITORY   TAG        IMAGE ID       CREATED          SIZE
nginx        last       acf5952902af   10 seconds ago   616MB
php          8.1-fpm    74e8931119ae   11 days ago      450MB
httpd        2.4.57     dc1a95e13784   2 weeks ago      145MB
mysql        8.0.32     412b8cc72e4a   2 weeks ago      531MB
nginx        1.23.3     ac232364af84   4 weeks ago      142MB
centos       7.9.2009   eeb6ee3f44bd   19 months ago    204MB
[root@localhost nginx]# docker run -itd -p 80:80 nginx:last 
992da27efb8dc2cebdd3fe767355b9944a994a9eb4a6a45114d1238520c59807
[root@localhost nginx]# docker ps
CONTAINER ID   IMAGE        COMMAND                   CREATED         STATUS        PORTS                               NAMES
992da27efb8d   nginx:last   "nginx -g 'daemon of…"   2 seconds ago   Up 1 second   0.0.0.0:80->80/tcp, :::80->80/tcp   reverent_antonelli

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值