dockerfile镜像构建命令

文章目录

  • dockerfile镜像构建命令
    • 1:FROM
    • 2:MAINTAINER
    • 3:RUN
    • 4:ADD
    • 5:COPY
    • 6:ENTRYPOINT
    • 7:ENV
    • 8:EXPOSE
    • 9:WORKDIR
    • 10:USER
    • 11:LABEL
    • 12:VOLUME
  • 实例

1:FROM

FROM : Dockerfile中第一条指令必须是FROM指令,表示从哪个基础镜像开始构建镜像

FROM centos:7    //基于centos7基础镜像构建新的镜像
FROM scratch    //表示不以任何镜像为基础

2:MAINTAINER

MAINTAINER : 镜像维护者个人信息,维护者的姓名和邮箱

MAINTAINER xuanning@gamil.com   //维护者姓名和邮箱

3:RUN

RUN : 构建镜像时需要执行的命令,有两种命令执行方式


shell形式执行
格式:RUN <command>   //RUN后边直接跟shell命令,linux操作系统上默认shell为/bin/sh -cexec形式执行
格式:RUN ["executable", "param1", "param2"]  //执行可执行文件,executable为可执行文件,param为选项或参数;exec形式可以指定使用其他终端两种形式对比:RUN echo "hzz"RUN ["/bin/bash", "-c", "echo hello"]

dockerfile每一条命令为一层,多条命令最好用最少的RUN命令执行,镜像的层数高了造成镜像的臃肿,不仅仅增加了构件部署的时间,还容易出错

4:ADD

ADD :将本地文件添加到构建的镜像中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

    ADD <src>... <dest>ADD ["<src>",... "<dest>"]    //用于支持包含空格的路径
示例:ADD test /tmp/            //添加"test"文件到镜像的"/tmp"目录ADD hom* /mydir/        //添加所有以"hom"开头的文件到镜像的"/mydir"目录

5:COPY

CMD : 指定镜像启动为容器后默认执行的命令,每个 Dockerfile 只能有一条 CMD 命令;如果指定了多条命令,只有最后一条会被执行,如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令

格式:CMD ["executable","param1","param2"] //执行可执行文件,此方式优先CMD command param1 param2             //执行shell内部命令CMD ["param1","param2"]            //设置了ENTRYPOINT,则为ENTRYPOINT添加参数示例:CMD ["echo","This is a test"]CMD echo "This is a test"

6:ENTRYPOINT

ENTRYPOINT : 类似于 CMD 指令,但其不会被创建容器时指定的命令覆盖,如果创建容器时指定了命令那么这些命令会被当作参数送给 ENTRYPOINT 指令指定的程序;CMD 和ENTRYPOINT 同在时 CMD 的内容会被当作参数传递给 ENTRYPOINT 指定的命令。

格式:ENTRYPOINT ["executable", "param1", "param2"]    //执行可执行文件, 此方式优先ENTRYPOINT command param1 param2            //shell内部命令

7:ENV

ENV :设置环境变量。此环境变量为镜像启动为容器之后容器中的环境变量

格式:ENV <key> <value>      //<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置一个变量ENV <key>=<value> ...  //可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示示例:ENV myName xuanningENV myName="xuanning" myAge="20"ENV HTTPD_MPM="event"

8:EXPOSE

EXPOSE :指定镜像启动为容器后开放的端口

格式:EXPOSE <port> [<port>...]示例:EXPOSE 80 443EXPOSE 8080EXPOSE 11211/tcp 11211/udp注:EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口。

9:WORKDIR

WORKDIR :工作目录,类似于cd命令

格式:WORKDIR /path/to/workdir示例:WORKDIR /hzz  //这时工作目录为/hzz注:通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行。

10:USER

USER :指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户

 格式:USER userUSER user:groupUSER uidUSER uid:gid示例:USER www注:使用USER指定用户后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都将使用该用户。

11:LABEL

LABEL指令用于让用户为镜像指定各种元数据(键值对的格式),格式如下。

LABEL multi.label1="value1"

12:VOLUME

VOLUME指令用于在镜像中创建一个挂载点目录。Volume有两种类型:绑定挂载卷和docker管理的卷。在Dockerfile中只支持Docker管理的卷,也就是说只能指定容器内的路径,不能指定宿主机的路径,格式如下。

格式:VOLUME ["/path/to/dir"]示例:VOLUME ["/data"]VOLUME ["/var/www","/var/log/apache2","/etc/apache2"]

实例

1、基于基础镜像centos:7
2、维护者信息
3、添加Centos-7仓库
4、添加epel-7仓库
5、安装nginx软件包
6、暴露指定端口80
7、构建镜像,镜像名称为nginx:v1
8、运行容器,容器名称为自己名字的全拼,映射端口88:80
9、进入容器,删除默认网页,写入新的默认网页
10、通过浏览器,能够正常访问nginx


[root@server1 ~]# mkdir vv
[root@server1 ~]# cd vv
[root@server1 vv]# ls
Centos-7.repo  Dockerfile  epel-7.repo
[root@server1 vv]# vim Dockerfile
[root@server1 vv]# cat Dockerfile
FROM centos:7
MAINTAINER xuanning@gamil.com
ADD Centos-7.repo /etc/yum.repos.d/
COPY epel-7.repo /etc/yum.repos.d/
RUN yum -y install nginx
EXPOSE 80
CMD ["/usr/sbin/nginx","-g","daemon off;"]
[root@server1 vv]# docker build -t nginx:v1 .
Sending build context to Docker daemon  6.656kB
Step 1/7 : FROM centos:7---> eeb6ee3f44bd
Step 2/7 : MAINTAINER xuanning@gamil.com---> Running in 9298fb7f02d8
Removing intermediate container 9298fb7f02d8
......................
Step 6/7 : EXPOSE 80---> Running in 16b68cb5e24e
Removing intermediate container 16b68cb5e24e---> ece6f09d85ea
Step 7/7 :CMD ["/usr/sbin/nginx","-g","daemon off;"]---> Running in 95c18f5b967d
Removing intermediate container 95c18f5b967d---> 1a93b23c0e25
Successfully built 1a93b23c0e25
Successfully tagged nginx:v1
[root@server1 vv]# docker run -dit --name cvcv -p 88:80 nginx:v1
add17290c971ab13adca90a1afa0e8d44e10d501fd35042d20d3103f2f53bb4b
[root@server1 vv]# docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS        PORTS                               NAMES
add17290c971   nginx:v1   "/usr/sbin/nginx -g …"   2 seconds ago   Up 1 second   0.0.0.0:88->80/tcp, :::88->80/tcp   cvcv
[root@server1 vv]# docker exec -it cvcv /bin/bash
[root@add17290c971 /]# cd /usr/share/nginx/
[root@add17290c971 nginx]# ls
html  modules
[root@add17290c971 nginx]# cd html/
[root@add17290c971 html]# ls
404.html  50x.html  en-US  icons  img  index.html  nginx-logo.png  poweredby.png
[root@add17290c971 html]# rm -rf index.html
[root@add17290c971 html]# echo lihao > index.html
[root@add17290c971 html]# ls
404.html  50x.html  en-US  icons  img  index.html  nginx-logo.png  poweredby.png
[root@add17290c971 html]#exit
[root@server1 vv]# systemctl stop firewalld.service

浏览器访问

dockerfile镜像构建命令相关推荐

  1. Dockerfile镜像构建用法

    文章目录 Docker镜像构建 1.docker commit 2.基于本地模板导入 3.Dockerfile构建文件 (1).docker基本概念 (2)文件格式 (3)镜像缓存 (4)docker ...

  2. Dockerfile镜像构建

    Dockerfile 文章目录 Dockerfile Docker镜像构建 Docker commmit 基于本地模板导入 Dockerfile 基本概念 文件格式 镜像缓存 dockerfile 语 ...

  3. 【工作向】docker镜像构建方法与命令

    序言 docker镜像制作,学习记录 1. docker镜像制作的常见方法 1.1 docker commit基于已有容器构建镜像(手工) 这种方法将已有容器存为新的镜像,但是不建议使用使用这种方式, ...

  4. docker 导入镜像_官方下一代Docker镜像构建神器 -- BuildKit

    BuildKit是Docker官方社区推出的下一代镜像构建神器--可以更加快速,有效,安全地构建docker 镜像.Docker v18.06已经集成了该组件.BuildKit可用于多种导出格式(例如 ...

  5. dockerfile构建镜像的命令_编写Dockerfile的最佳实践

    虽然 Dockerfile 简化了镜像构建的过程,并且把这个过程可以进行版本控制,但是很多人构建镜像的时候,都有一种冲动--把可能用到的东西都打包到镜像中.这种不正当的 Dockerfile 使用也会 ...

  6. docker常用命令 | game2048网页游戏 | nginx镜像 | 数据卷管理 | docker网络管理 | 构建apache镜像 | Dockerfile常用的命令

    DOCKER https://www.docker.com http://www.runoob.com/docker/docker-command-manual.html docker命令大全 镜像用 ...

  7. 【Docker】Dockerfile构建镜像与命令详解

    前言 传统方式部署集群,你需要在每台机器搭建环境,配置各种中间件,这样不但效率低下,而且很难保证环境的一致性,而且配置如果有改动,需要挨个机器修改. 有了Docker,上述问题都能解决.但是官方镜像大 ...

  8. 浅谈Docker:DockerLinux安装,镜像管理命令,镜像制作命令,容器管理命令,数据卷,DockerFile,Docker-compose

    什么是Docker? Docker 概念 • Docker 是一个开源的应用容器引擎 • 诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc) • ...

  9. 无需 Dockerfile 的镜像构建:BuildPack vs Dockerfile

    作者 | Addo Zhang 来源 | 云原生指北 过去的工作中,我们使用微服务.容器化以及服务编排构建了技术平台.为了提升开发团队的研发效率,我们同时还提供了 CICD 平台,用来将代码快速的部署 ...

最新文章

  1. iOS6全系列设备完美越狱工具发布
  2. WordPress插件制作教程概述
  3. javascript高级程序设计之面向对象的程序设计
  4. 操作系统(十一)线程的概念和特点
  5. 编写Dockerfile增强centos镜像:安装vim 和net-tools
  6. D3.js、echar.js 前端必备大数据技能
  7. java订单超时取消设计_PHP如何实现处理过期或者超时订单的,并还原库存
  8. php 服务器安装,php服务器安装笔记
  9. Tire Defect Detection Using Fully Convolutional Network-论文阅读笔记
  10. 2020-11-16 MHF-NET乱读集锦
  11. Ubuntu16.04 开机开启小键盘数字键,时默认开NumLock灯
  12. 怎样将doc格式(word)转成WPS格式
  13. 高清和网络电视是数字电视的希望
  14. 最高效的七个云原生开发原则
  15. 全球前10大数据库产品厂家
  16. SpringBoot实现动态定时任务
  17. Python爬取特朗普就职演讲稿,使用ngram模型进行数据清洗
  18. 设备树下的platform总线-21
  19. uni-app发行微信小程序时报错
  20. Matlab之图像变换技术(十二)

热门文章

  1. vue-admin登录
  2. 趣味python编程题(一)羊,狼,菜过河。
  3. 解决netgear路由器总掉线的问题
  4. day1-爬虫作业:下载lol全英雄皮肤
  5. matlab 生命游戏 可自己输入图像
  6. android 设备如何对多个屏幕截图
  7. 企业如何高效实施绩效管理系统
  8. Google产品中的那些搞笑提示
  9. flannel跨主网络通信方案(UDP、VXLAN、HOST-GW)详解
  10. 计算智能——K-means算法模糊Cmeans算法