• Dockerfile编写


    Dockerfile 基本框架

    Dockerfile一般包含下面几个部分:

    1. 基础镜像:以哪个镜像作为基础进行制作,用法是FROM 基础镜像名称
    2. 维护者信息:需要写下该Dockerfile编写人的姓名或邮箱,用法是MANITAINER 名字/邮箱
    3. 镜像操作命令:对基础镜像要进行的改造命令,比如安装新的软件,进行哪些特殊配置等,常见的是RUN 命令
    4. 容器启动命令:当基于该镜像的容器启动时需要执行哪些命令,常见的是CMD 命令ENTRYPOINT

    其中FROM指定基础镜像,如果镜像名称中没有制定TAG,默认为latestRUN命令默认使用/bin/sh Shell执行,默认为root权限。如果命令过长需要换行,需要在行末尾加CMD命令也是默认在/bin/sh中执行,并且默认只能有一条,如果是多条CMD命令则只有最后一条执行。用户也可以在docker run命令创建容器时指定新的CMD命令来覆盖Dockerfile里的CMD

    Dockerfile编写常用命令

    1 USER指定容器运行的用户

    该用户将作为后续的RUN命令执行的用户。这个命令本实验不需要,但在一些需要指定用户来运行的应用部署时非常关键,比如提供hadoop服务的容器通常会使用hadoop用户来启动服务。

    命令使用方式,例如使用shiyanlou用户来执行后续命令:

    USER shiyanlou

    2 WORKDIR指定后续命令的执行目录

    这个工作目录是在容器内部的,由于我们需要运行的是一个静态网站,将启动后的工作目录切换到/var/www/html目录:

    WORKDIR /var/www/html

    docker run命令通过-w 标志可以在运行时覆盖工作目录

    docker run -tui -w /var/log ubuntu pwd

    3 EXPOSE 表示容器要监听的短裤

    由于内部服务会启动Web服务,我们需要监听80端口,可以使用EXPOSE命令,在镜像操作部分增加下面一句:

    EXPOSE 80

    注:在运行容器的时候要加上容器内端口到外部宿主机器端口的映射。

    4 ENV设置环境变量

    ENV命令能够对容器内的环境变量进行设置,新的环境变量可以在后续的RUN指令中使用,我们使用该命令设置由该镜像创建的容器的主机名为server1,向Dockerfile中增加下面一句:

    ENV HOSTNAME server1

    类似的,

    ENV PG_MAJOR 9.3
    ENV PG_VERSION 9.3.4
    RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
    ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
    ENV sample

    docker run命令通过-e 标志可以在运行时传递环境变量

    docker run -tui -e "WEB_PORT=8080" ubuntu pwd 

    5 ADD/COPY向镜像中增加文件

    向镜像中添加文件有两种命令:COPYADD。相比之下COPY的功能更纯粹,就是为了拷贝本地文件到镜像中。

    COPY命令可以复制本地文件夹到镜像中:

    COPY simplecloudsite /var/www/html

    ADD 命令支持添加本地的tar压缩包到容器中指定目录,压缩包会被自动解压为目录,也可以自动下载URL并拷贝到镜像,例如

    ADD html.tar /var/www

    合法的归档文件包括gzip, bzip2, xz, tar.gz

    ADD . /var/www

    将目录中全部内容添加到镜像中的/var/www目录下

     

    6 CMD与 ENTRYPOINT

    ENTRYPOINT 容器启动后执行的命令,让容器执行表现的像一个可执行程序一样,与CMD的区别是不可以被docker run覆盖,会把docker run后面的参数当作传递给ENTRYPOINT指令的参数。Dockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最后一个有效。docker run命令的-entrypoint参数可以把指定的参数继续传递给ENTRYPOINT

    7 VOLUME创建一个挂载点

    实际上会在映射到宿主机器上的一个位置,一般情况下不用于宿主机器和容器之间共享文件。但是这个文件夹是可以在容器之间共享的

    8 注释#

    在Dockerfile中可以添加注释,注释以#开头

  • 相关阅读:
    IOS开发调用系统相机和打开闪光灯
    iOS 判断输入字符串长度函数
    Mac下Cocos2d和Cocos2dx安装
    同样的一辈子,不同的结果!
    Mac OS 和 iOS 操作系统架构
    摄影师张梦格App项目总结
    Mac下WorkPress平台的安装与搭建
    dagger与spring注解对比
    git rebase 命令参数
    初识Devexpress ChartControl 之 动态添加stepline及TextAnnotation
  • 原文地址:https://www.cnblogs.com/cedrelaliu/p/6419609.html
Copyright © 2020-2023  润新知