<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DevOps技术分享 &#187; Docerfile</title>
	<atom:link href="http://www.showerlee.com/archives/tag/docerfile/feed" rel="self" type="application/rss+xml" />
	<link>http://www.showerlee.com</link>
	<description>与你共同学习运维开发</description>
	<lastBuildDate>Mon, 19 Oct 2020 05:51:41 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.6</generator>
		<item>
		<title>Dockerfile详解</title>
		<link>http://www.showerlee.com/archives/1837</link>
		<comments>http://www.showerlee.com/archives/1837#comments</comments>
		<pubDate>Thu, 31 Dec 2015 09:15:47 +0000</pubDate>
		<dc:creator>showerlee</dc:creator>
				<category><![CDATA[DevTools]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Docerfile]]></category>

		<guid isPermaLink="false">http://www.showerlee.com/?p=1837</guid>
		<description><![CDATA[Docker可以通过获取Dockerfile编写的命令自动Build出一个新的镜像,里面的Docker内建命令 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.showerlee.com/archives/tag/docker" title="查看Docker中的全部文章" class="tag_link">Docker</a>可以通过获取<a href="http://www.showerlee.com/archives/tag/docker" title="查看Docker中的全部文章" class="tag_link">Docker</a>file编写的命令自动Build出一个新的镜像,里面的<a href="http://www.showerlee.com/archives/tag/docker" title="查看Docker中的全部文章" class="tag_link">Docker</a>内建命令会帮助我们在已有的image下创建一个新的定制image.</p>
<p>
	这里我们先给大家介绍一些常用<a href="http://www.showerlee.com/archives/tag/docker" title="查看Docker中的全部文章" class="tag_link">Docker</a>file编写规范.
</p>
<p>
	Docker配置传送门:&nbsp;<a href="http://www.showerlee.com/archives/1758" rel="nofollow">http://www.showerlee.com/archives/1758</a>
</p>
<p>
	
</p>
<p>
	<span style="color:#337FE5;font-size:14px;">1.FROM&nbsp;</span>
</p>
<p>
	FROM &lt;image&gt;:&lt;tag&gt;
</p>
<p>FROM会使用当前本地或者远程Docker仓库的image, 这个要首先写到该脚本的第一行.</p>
<p>
	例:
</p>
<p>
	
</p>
<pre class="prettyprint lang-bsh">FROM centos67base/apache:apache_base</pre>
<p>
	
</p>
<p>
	这里代表我们使用本地的centos67base/apache镜像.
</p>
<p>
	查看本地缓存镜像可以使用
</p>
<p>
	# docker images
</p>
<p>
	
</p>
<p>
	<span style="color:#337FE5;font-size:14px;">2.MAINTAINER</span>
</p>
<p>
	MAINTAINER &lt;name&gt;
</p>
<p>
	这个会给生成的镜像创建一个作者名
</p>
<p></p>
<p>
	<span style="font-size:14px;color:#337FE5;">3.RUN</span>
</p>
<p>
	RUN &lt;command&gt; (命令行格式, 执行一段shell命令)
</p>
<p>
	RUN ["executable", "param1", "param2"] (列表格式, "executable"可以更改不同shell格式, 例如/bin/sh或/bin/bash, "param1"代表shell参数)
</p>
<p>
	这个可以理解为执行shell命令到image, 一般来说用来给镜像安装package, 或者更改系统配置等.
</p>
<p>
	例:
</p>
<pre class="prettyprint lang-bsh">RUN /bin/bash -c echo 123
RUN ["/bin/bash" "-c" "echo 123"]</pre>
<p>
	
</p>
<p><span style="color:#337FE5;font-size:14px;">4.CMD</span></p>
<p>
	CMD ["executable","param1","param2"] (同RUN)
</p>
<p>
	CMD ["param1","param2"] (使用系统默认shell)
</p>
<p>
	CMD command param1 param2 (命令行格式)
</p>
<p>这个CMD基本使用格式与RUN类似, 区别在于如果存在多个CMD行, 则只有最后一行生效, 这个我们常用执行默认的shell命令给该容器.</p>
<p>
	
</p>
<p>
	<span style="font-size:14px;color:#337FE5;">5.LABEL</span>
</p>
<p>
	LABEL &lt;key&gt;=&lt;value&gt; &lt;key&gt;=&lt;value&gt; &lt;key&gt;=&lt;value&gt; ...
</p>
<p>
	例:
</p>
<pre class="prettyprint lang-bsh">LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."</pre>
<p>
	这个可以理解为给image传送一个键值对.
</p>
<p>
	可以使用如下命令查看已Build好的image LABEL
</p>
<p>
	# docker inspect
</p>
<p></p>
<p>
	<span style="color:#337FE5;font-size:14px;">6.EXPOSE</span>
</p>
<p>
	EXPOSE &lt;port&gt; [&lt;port&gt;...]
</p>
<p>这个用来通知容器在某一具体端口进行监听, 但不会打开该端口, 如需打开要在创建容器容器的时候配合-P参数使用.</p>
<p>
	<span style="font-size:14px;color:#337FE5;">7.ENV</span>
</p>
<p>
	ENV &lt;key&gt; &lt;value&gt;
</p>
<p>
	ENV &lt;key&gt;=&lt;value&gt; ...
</p>
<p>
	例如:
</p>
<pre class="prettyprint lang-bsh">ENV myName="John Doe" myDog=Rex\ The\ Dog \
       myCat=fluffy</pre>
<p>
	相当于给镜像添加环境变量.
</p>
<p></p>
<p>
	<span style="font-size:14px;color:#337FE5;">8.ADD</span>
</p>
<p>
	ADD &lt;src&gt;... &lt;dest&gt;
</p>
<p>
	ADD ["&lt;src&gt;",... "&lt;dest&gt;"] (这种写法会避免路径名含有空格而报错)
</p>
<p>
	ADD命令会copy本地目录, 文件或远程URL到容器目的路径, &lt;src&gt;, &lt;dest&gt;支持通配符和绝对相对路径.
</p>
<p>
	例如:
</p>
<pre class="prettyprint lang-bsh">ADD hom* /mydir/        # adds all files starting with "hom"
ADD hom?.txt /mydir/    # ? is replaced with any single character, e.g., "home.txt"
ADD test relativeDir/   # adds "test" to `WORKDIR`/relativeDir/
ADD test /absoluteDir   # adds "test" to /absoluteDir</pre>
<p>
<span style="font-size:14px;color:#337FE5;">9.COPY</span></p>
<p>
	COPY &lt;src&gt;... &lt;dest&gt;
</p>
<p>
	COPY ["&lt;src&gt;",... "&lt;dest&gt;"] (这种写法会避免路径名含有空格而报错)
</p>
<p>
	本身用法和ADD类似, 唯独不能使用远程URL
</p>
<p></p>
<p>
	<span style="font-size:14px;color:#337FE5;">10.VOLUME</span>
</p>
<p>VOLUME ["/data"]<br />
VOLUME会给该image创建一个挂载点.</p>
<p>
	<span style="color:#337FE5;font-size:14px;">11.WORKDIR</span>
</p>
<p>
	WORKDIR /path/to/workdir
</p>
<p>顾名思义, 指定一个当前的工作目录.</p>
<p>
	<span style="color:#337FE5;font-size:14px;"><br />
</span>
</p>
<p>
	<span style="color:#337FE5;font-size:14px;">12.Dockerfile实例</span>
</p>
<pre class="prettyprint lang-bsh"># Nginx
#
# VERSION               0.0.1

FROM      ubuntu
MAINTAINER Victor Vieux &lt;victor@docker.com&gt;

LABEL Description="This image is used to start the foobar executable" Vendor="ACME Products" Version="1.0"
RUN apt-get update &amp;&amp; apt-get install -y inotify-tools nginx apache2 openssh-server


# Firefox over VNC
#
# VERSION               0.3</pre>
<pre class="prettyprint lang-bsh">FROM ubuntu

# Install vnc, xvfb in order to create a 'fake' display and firefox
RUN apt-get update &amp;&amp; apt-get install -y x11vnc xvfb firefox
RUN mkdir ~/.vnc
# Setup a password
RUN x11vnc -storepasswd 1234 ~/.vnc/passwd
# Autostart firefox (might not be the best way, but it does the trick)
RUN bash -c 'echo "firefox" &gt;&gt; /.bashrc'

EXPOSE 5900
CMD    ["x11vnc", "-forever", "-usepw", "-create"]
</pre>
<p>
	更多详细配置请参考:&nbsp;<a href="http://www.showerlee.com/archives/1758" rel="nofollow">http://www.showerlee.com/archives/1758</a> 第10项
</p>
<p></p>
<div>声明: 本文采用 <a rel="external" href="http://creativecommons.org/licenses/by-nc-sa/3.0/deed.zh" title="署名-非商业性使用-相同方式共享 3.0 Unported">CC BY-NC-SA 3.0</a> 协议进行授权</div><div>转载请注明来源：<a rel="external" title="DevOps技术分享" href="http://www.showerlee.com/archives/1837">DevOps技术分享</a></div><div>本文链接地址：<a rel="external" title="Dockerfile详解" href="http://www.showerlee.com/archives/1837">http://www.showerlee.com/archives/1837</a></div>]]></content:encoded>
			<wfw:commentRss>http://www.showerlee.com/archives/1837/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
