虚拟化专栏13_Dockerfile简介及使用

绪论

前文中已经提到,创建docker镜像的方式有两种,基于docker容器和编写dockerfile。此文讲述使用dockerfile创建docker镜像并打包上传至dockerfile。

dockerfile的编写

Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成镜像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。
Dockerfile中的语法分为两部分,带#号的注释部分和指令详情,编写指令时要‘惜字如金,因为每条指令都会生成一个可写层,在构建镜像时都会分层构建,联合挂载。

  1. FROM,第一个非注释行必须是FROM指令,指定基于哪个镜像创建容器。
  2. MAINTAINER,镜像作者的详细信息,名称+联系方式(被替换为LABEL)MAINTAINER “mizhouzhou xxx@163.com
  3. COPY,将宿主机中的文件复制到目标镜像的文件系统中,src文件路径必须是dockerfile的工作目录的路径,dest必须是绝对路径,复制目录时,会自动递归复制目录下的所有文件但是不会复制目录,目录必须/结尾。目标主机上的文件不存在时会自动创建。
  4. ADD,支持url文件,如果src为本地的tar文件,复制到远程主机上时会被展开(url的tar格式文件不会被展开)。
  5. WORKDIR,指定工作目录,可以多次指定,影响其后的所有命令。
  6. RUN,用于指定在dockerfile中运行的命令。RUN中可以写多个command命令
    RUN COMMAND1 && COMMAND2 && COMMAND3,安装完成后yum clean all 并吧安装目录和安装包删除,以减少镜像的体积。RUN是基于基础镜像制作的,所有命令必须是基础镜像所含有的才行。
  7. CMD,将镜像启动为容器时未定义运行命令时默认运行的命令,可以给多个命令,但是只有最后一个生效。
    注意一点,所有进程的入口为shell,当我们想要驳离shell命令行定义自己的启动命令时,此时使用nohub command &,将其送到后台,让其脱离shell使用我们自己定义的运行命令。(运维所有进程在退出shell之后不能继续进行)用户空间中ID为1位内核启动进程。驳离终端时,shell命令行下的主进程ID不为1 ,但是当我们使用exec时,shell就会让位退出,用户定义的启动方式的ID即为1。
  8. VOLUME,在容器中创建卷,docker管理的卷,但是不能指定宿主机上的卷。当创建为容器时会自动挂载存储卷。
  9. EXPOSE,为容器打开指定要监听的端口,不能指定地址,会动态绑定宿主机的端口。(因为启动的环境不一定,宿主机上被使用的端口不确定,端口是否需要被暴露也不确定)运行此镜像的时候直接使用-P随机暴露即可。不使用-P时就算dockerfile中暴露了也不会暴露。docker port 容器名查看哪些端口被暴露。
  10. ENV,可使用环境变量,做镜像时使用的环境变量,可被全局使用。多个变量的时候使用反斜杠来区分。docker run时使用-e来为docker镜像中的环境变量赋值。不可作为变量在编译或者运行时使用。
  11. ARG,作为变量可以在编译或者运行时使用。
  12. DockerFile引用的文件,在某个特定的目录下做镜像,DockerFile中引用文件或者软件包的路径必须放在此dockerfile文件所在的目录或者子目录。
  13. 还支持做隐藏文件,dockerignore,打包制作为镜像时,这些文件以及文件指定的路径不会被打包。
  14. 做好镜像,docker build 打包为镜像,隐藏起容器,和人工起容器一样,制作环境是底层镜像所能提供的环境和工具。
    编写完dockerfile后构建docker镜像 docker build -t 标签 ./ (当前路径下的或者使用-f指定dockerfile所在位置)

Dockerfile构建nginx镜像

编写简单的dockerfile构建nginx镜像,首先创建Dockerfile文件夹,将构建镜像所需的nginx压缩包放入Dockerfile文件夹中,在Dockerfile文件夹中编写Dockerfile
在这里插入图片描述
编写Dockerfile文件内容如下

FROM centos
ADD nginx-1.11.2.tar.gz /usr/local/
RUN yum install -y gcc gcc-c++ glibc make openssl openssl-devel
RUN yum install -y gd gd-devel pcre-devel
RUN useradd -M -s /sbin/nologin nginx
WORKDIR /usr/local/nginx-1.11.2
RUN ./configure
EXPOSE 80

编写完Dockerfile之后构建nginx镜像,在Dockerfile文件夹下构建即可。

docker build -t nginx .

在这里插入图片描述
以上完成了Dockerfile编写nginx镜像并使用docker build构建nginx镜像。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值