• Dockerfile语法


    Dockerfile 语法示例

    Dockerfile语法由两部分构成,注释和命令+参数

    • # Line blocks used for commenting
    • command argument argument ..

    一个简单的例子:

    • # Print "Hello docker!"
    • RUN echo "Hello docker!"

    Dockerfile 命令

    Dockerfile有十几条命令可用于构建镜像,下文将简略介绍这些命令。

    ADD

    ADD命令有两个参数,源和目标。它的基本作用是从源系统的文件系统上复制文件到目标容器的文件系统。如果源是一个URL,那该URL的内容将被下载并复制到容器中。

    1. # Usage: ADD [source directory or URL] [destination directory]
    2. ADD /my_app_folder /my_app_folder

    CMD

    和RUN命令相似,CMD可以用于执行特定的命令。和RUN不同的是,这些命令不是在镜像构建的过程中执行的,而是在用镜像构建容器后被调用。

    1. # Usage 1: CMD application "argument", "argument", ..
    2. CMD "echo" "Hello docker!"

    ENTRYPOINT

    配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。

    每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。

    ENTRYPOINT 帮助你配置一个容器使之可执行化,如果你结合CMD命令和ENTRYPOINT命令,你可以从CMD命令中移除“application”而仅仅保留参数,参数将传递给ENTRYPOINT命令。

    1. # Usage: ENTRYPOINT application "argument", "argument", ..
    2. # Remember: arguments are optional. They can be provided by CMD
    3. # or during the creation of a container.
    4. ENTRYPOINT echo
    5. # Usage example with CMD:
    6. # Arguments set with CMD can be overridden during *run*
    7. CMD "Hello docker!"
    8. ENTRYPOINT echo

    ENV

    ENV命令用于设置环境变量。这些变量以”key=value”的形式存在,并可以在容器内被脚本或者程序调用。这个机制给在容器中运行应用带来了极大的便利。

    1. # Usage: ENV key value
    2. ENV SERVER_WORKS 4

    EXPOSE

    FROM命令可能是最重要的Dockerfile命令。改命令定义了使用哪个基础镜像启动构建流程。基础镜像可以为任意镜 像。如果基础镜像没有被发现,Docker将试图从Docker image index来查找该镜像。FROM命令必须是Dockerfile的首个命令

    1. # Usage: FROM [image name]
    2. FROM ubuntu

    MAINTAINER

    我建议这个命令放在Dockerfile的起始部分,虽然理论上它可以放置于Dockerfile的任意位置。这个命令用于声明作者,并应该放在FROM的后面。

    1. # Usage: MAINTAINER [name]
    2. MAINTAINER authors_name

    RUN

    RUN命令是Dockerfile执行命令的核心部分。它接受命令作为参数并用于创建镜像。不像CMD命令,RUN命令用于创建镜像(在之前commit的层之上形成新的层)。

    1. # Usage: RUN [command]
    2. RUN aptitude install -y riak

    USER

    USER命令用于设置运行容器的UID。

    1. # Usage: USER [UID]
    2. USER 751

    VOLUME

    VOLUME命令用于让你的容器访问宿主机上的目录。

    1. # Usage: VOLUME ["/dir_1", "/dir_2" ..]
    2. VOLUME ["/my_files"]

    WORKDIR

    WORKDIR命令用于设置CMD指明的命令的运行目录。

    1. # Usage: WORKDIR /path
    2. WORKDIR ~/

    如何构建一个docker镜像

    使用Dockerfiles和手工使用Docker Daemon运行命令一样简单。脚本运行后输出为新的镜像ID

    sudo docker build -t my_mongodb .

    实例创建一个nginx镜像

    运用FROM命令和MAINTAINER命令

    1. ############################################################
    2. # Dockerfile to build Nginx Installed Containers
    3. # Based on Ubuntu
    4. ############################################################
    5. # Set the base image to Ubuntu
    6. FROM ubuntu
    7. # File Author / Maintainer
    8. MAINTAINER Maintaner Name

    安装nginx

    1. # Install Nginx
    2. # Add application repository URL to the default sources
    3. RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
    4. # Update the repository
    5. RUN apt-get update
    6. # Install necessary tools
    7. RUN apt-get install -y nano wget dialog net-tools
    8. # Download and Install Nginx
    9. RUN apt-get install -y nginx

    安装Nginx后,我们需要配置Nginx并且替换掉默认的配置文件

    1. # Remove the default Nginx configuration file
    2. RUN rm -v /etc/nginx/nginx.conf
    3. # Copy a configuration file from the current directory
    4. ADD nginx.conf /etc/nginx/
    5. # Append "daemon off;" to the beginning of the configuration
    6. RUN echo "daemon off;" >> /etc/nginx/nginx.conf
    7. # Expose ports
    8. EXPOSE 80
    9. # Set the default command to execute
    10. # when creating a new container
    11. CMD service nginx start

    替换的配置文件内容

        worker_processes 1;
        events { worker_connections 1024; }
        http {
             sendfile on;
             server {
                 listen 80;
                 location / {
                      proxy_pass http://httpstat.us/;
                      proxy_set_header X-Real-IP $remote_addr;
                 }
             }
        }

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    HOT Scene!
    Windows Live Beta ONLINE!
    Shanda EZ Mini
    HDR Lighting & Bloom Lighting
    将整张网页存成png图片
    What's NEW in C++/CLI Language
    [快讯] Visual Studio 2005和SQL Server 2005来了!
    [原创] 一劳永逸:关于C/C++中指针、数组与函数复合定义形式的直观解释
    使用模版列来控制在一个GridView中某些列有热连接,某些列无热连接
    七种武器——.NET工程师求职面试必杀技
  • 原文地址:https://www.cnblogs.com/xzkzzz/p/9906547.html
Copyright © 2020-2023  润新知