gpt4 book ai didi

Dockerfile指令详解

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Dockerfile指令详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

什么是Dockerfile 。

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像.

当你在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新层。这些基础镜像可以用于创建新的容器。本篇文章将手把手教您如何从基础镜像,一步一步,一层一层的从Dockerfile构建容器的过程.

Dockerfile示例 。

# Version 1.0 FORM ubuntu:14.04 MAINTAINER Mao "hongtu1993@sina.cn" RUN apt-get update && apt-get install -y nginx RUN echo 'Hello,I am work' > /usr/share/nginx/html/index.html EXPOSE 80 80 。

Docker执行步骤分析 。

以上Dockerfile示例中,每条指令都会创建一个新的镜像层并对镜像进行提交.Docker执行Dockerfile大致流程

  1. Docker从基础镜像运行一个容器;
  2. 执行一条指令,对容器做出修改;
  3. 执行类似docker commit的操作,提交一个新的镜像层;
  4. Docker再基于刚提交的镜像运行一个新容器;
  5. 执行Dockerfile中的下一条指令,直到所有指令都执行完毕;
  6.  

示例解析 。

  1. FROM:每个dockerfile的第一条命令是FROM.FROM指令指定一个已经存在的镜像,则代表FROM后续的指令都是基于该镜像(ubuntu14.04)进行的.
  2. MAINTAINER:该指令告诉Docker,作者和邮箱地址
  3. RUN:通俗地说,RUN指令会在shell里使用命令包装器 /bin/sh -c 来执行.如果在不支持shell的平台上运行,则可使用exec格式的RUN指令RUN ["apt-get","install","-y","nginx"]
  4. EXPOSE: 向外公开端口

Dockerfile指令汇总及解析 。

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

# MAINTAINER [name] [email] MAINTAINER authors_name "hongtu1993@sina.cn" 。

FROM 。

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

# FROM [image name] 。

FROM ubuntu 。

ADD 。

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

# ADD [source directory or URL] [destination directory] 。

ADD /my_app_folder /my_app_folder 。

RUN 。

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

# RUN [command] 。

RUN apt-get update 。

CMD 。

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

# CMD application "argument", "argument", .. 。

CMD "echo" "Hello Mao!" 。

ENTRYPOINT 。

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

# Usage: ENTRYPOINT application "argument", "argument", .. # Remember: arguments are optional. They can be provided by CMD # or during the creation of a container. ENTRYPOINT echo 。

# Usage example with CMD: # Arguments set with CMD can be overridden during *run* CMD "Hello docker!" ENTRYPOINT echo 。

ENV 。

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

# ENV key value 。

ENV SERVER_WORKS 4 。

USER 。

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

# USER [UID] 。

USER 751 。

VOLUME 。

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

# VOLUME ["/dir_1", "/dir_2" ..] 。

VOLUME ["/my_files"] 。

WORKDIR 。

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

# WORKDIR /path 。

WORKDIR ~/ 。

EXPOSE 。

EXPOSE指令用来告诉Docker这个容器在运行时会监听哪些端口,Docker在连接不同的容器(使用–link参数)时使用这些信息; 两个Docker的核心概念是可重复和可移植。镜像应该可以运行在任何主机上并且运行尽可能多的次数。在 Dockerfile中你有能力映射私有和公有端口,但是你永远不要通过Dockerfile映射公有端口。通过映射公有端口到主机上,你将只能运行一个容器化应用程序实例。(译者注:运行多个端口不就冲突啦) 。

# EXPOSE [port] 。

# private and public mapping EXPOSE 80:8080 。

# private only EXPOSE 80 。

最后我们来个简单的示例吧 。

使用Dockerfile自动构建Nginx容器 。

因为我们命令Docker用当前目录的Nginx的配置文件替换默认的配置文件,我们要保证这个新的配置文件存在。在Dockerfile存在的目录下,创建nginx.conf:

?
1
sudo nano nginx.conf

然后用下述内容替换原有内容:

?
1
2
3
4
5
6
7
8
9
10
11
12
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;
      }
    }
}

让我们保存nginx.conf。之后我们就可以用Dockerfile和配置文件来构建镜像.

最后此篇关于Dockerfile指令详解的文章就讲到这里了,如果你想了解更多关于Dockerfile指令详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com