`
JadeLuo
  • 浏览: 425697 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Dockerfile命令 http://os.51cto.com/art/201507/485007.htm

 
阅读更多
Dockerfile命令介绍及实例
当你在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新层。这些基础镜像可以用于创建新的容器。本篇文章将手把手教您如何从基础镜像,一步一步,一层一层的从Dockerfile构建容器的过程。
作者:佚名来源:digitalocean|2015-07-21 12:43 收藏  分享
基础镜像可以用于创建Docker容器。镜像可以非常基础,仅仅包含操作系统;也可以非常丰富,包含灵巧的应用栈,随时可以发布。当你在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新层。这些基础镜像可以用于创建新的容器。本篇文章将手把手教您如何从基础镜像,一步一步,一层一层的从Dockerfile构建容器的过程。

Docker简介
Docker项目提供了构建在Linux内核功能之上,协同在一起的的高级工具。其目标是帮助开发和运维人员更容易地跨系统跨主机交付应用程序和他们的依赖。Docker通过Docker容器,一个安全的,基于轻量级容器的环境,来实现这个目标。这些容器由镜像创建,而镜像可以通过命令行手工创建或 者通过Dockerfile自动创建。
Dockerfile
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。
Dockerfile 语法
在我们深入讨论Dockerfile之前,让我们快速过一下Dockerfile的语法和它们的意义。
什么是语法?
非常简单,在编程中,语法意味着一个调用命令,输入参数去让应用执行程序的文法结构。这些语法被规则或明或暗的约束。程序员遵循语法规范以和计算机 交互。如果一段程序语法不正确,计算机将无法识别。Dockerfile使用简单的,清楚的和干净的语法结构,极为易于使用。这些语法可以自我释义,支持注释。
Dockerfile 语法示例
Dockerfile语法由两部分构成,注释和命令+参数
# Line blocks used for commenting
command argument argument ..
一个简单的例子:
# Print "Hello docker!"
RUN echo "Hello docker!"
Dockerfile 命令
Dockerfile有十几条命令可用于构建镜像,下文将简略介绍这些命令。
ADD
ADD命令有两个参数,源和目标。它的基本作用是从源系统的文件系统上复制文件到目标容器的文件系统。如果源是一个URL,那该URL的内容将被下载并复制到容器中。
# Usage: ADD [source directory or URL] [destination directory]
ADD /my_app_folder /my_app_folder 
CMD
和RUN命令相似,CMD可以用于执行特定的命令。和RUN不同的是,这些命令不是在镜像构建的过程中执行的,而是在用镜像构建容器后被调用。
# Usage 1: CMD application "argument", "argument", ..
CMD "echo" "Hello docker!"
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”的形式存在,并可以在容器内被脚本或者程序调用。这个机制给在容器中运行应用带来了极大的便利。
# Usage: ENV key value
ENV SERVER_WORKS 4
EXPOSE
EXPOSE用来指定端口,使容器内的应用可以通过端口和外界交互。
# Usage: EXPOSE [port]
EXPOSE 8080
FROM
FROM命令可能是最重要的Dockerfile命令。改命令定义了使用哪个基础镜像启动构建流程。基础镜像可以为任意镜 像。如果基础镜像没有被发现,Docker将试图从Docker image index来查找该镜像。FROM命令必须是Dockerfile的首个命令。
# Usage: FROM [image name]
FROM ubuntu 
MAINTAINER
我建议这个命令放在Dockerfile的起始部分,虽然理论上它可以放置于Dockerfile的任意位置。这个命令用于声明作者,并应该放在FROM的后面。
# Usage: MAINTAINER [name]
MAINTAINER authors_name 
RUN
RUN命令是Dockerfile执行命令的核心部分。它接受命令作为参数并用于创建镜像。不像CMD命令,RUN命令用于创建镜像(在之前commit的层之上形成新的层)。
# Usage: RUN [command]
RUN aptitude install -y riak
USER
USER命令用于设置运行容器的UID。
# Usage: USER [UID]
USER 751
VOLUME
VOLUME命令用于让你的容器访问宿主机上的目录。
# Usage: VOLUME ["/dir_1", "/dir_2" ..]
VOLUME ["/my_files"]
WORKDIR
WORKDIR命令用于设置CMD指明的命令的运行目录。
# Usage: WORKDIR /path
WORKDIR ~/
如何使用Dockerfiles
使用Dockerfiles和手工使用Docker Daemon运行命令一样简单。脚本运行后输出为新的镜像ID。
# Build an image using the Dockerfile at current location
# Example: sudo docker build -t [name] .
sudo docker build -t my_mongodb . 
Dockerfile 示例一:创建一个MongoDB的镜像
在这部分中,我们讲一步一步创建一个Dockfile,这个Dockerfile可用于构建MongoDB镜像进而构建MongoDB容器。
创建一个Dockerfile
使用nano文本编辑器,让我们创建Dockerfile。
sudo nano Dockerfile
定义文件和它的目的
让阅读者明确Dockerfile的目的永远是必要的。为此,我们通常从注释开始写Dockerfile。
############################################################
# Dockerfile to build MongoDB container images
# Based on Ubuntu
############################################################
设置基础镜像 
# Set the base image to Ubuntu
FROM ubuntu
定义作者
# File Author / Maintainer
MAINTAINER Example McAuthor
设置命令与参数下载MongoDB
################## BEGIN INSTALLATION ######################
# Install MongoDB Following the Instructions at MongoDB Docs
# Ref: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/
# Add the package verification key
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
# Add MongoDB to the repository sources list
RUN echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee /etc/apt/sources.list.d/mongodb.list
# Update the repository sources list once more
RUN apt-get update
# Install MongoDB package (.deb)
RUN apt-get install -y mongodb-10gen
# Create the default data directory
RUN mkdir -p /data/db
##################### INSTALLATION END #####################
设置MongoDB端口 
# Expose the default port
EXPOSE 27017
# Default port to execute the entrypoint (MongoDB)
CMD ["--port 27017"]
# Set default container command
ENTRYPOINT usr/bin/mongod
保存Dockerfile。
构建镜像
使用上述的Dockerfile,我们已经可以开始构建MongoDB镜像
sudo docker build -t my_mongodb .
Dockerfile 示例二:创建一个Nginx的镜像
Nginx简述
Nginx是一个高性能的 HTTP 和 反向代理 服务器。它因为它的轻量级,易用,易于扩展而流行于业界。基于优良的架构设计,它能够比之前的类似软件处理更多的请求。它也可以用来提供静态文件服务,比如图片,脚本和CSS。
和上个例子一样,我们还是从基础镜像开始,运用FROM命令和MAINTAINER命令
############################################################
# Dockerfile to build Nginx Installed Containers
# Based on Ubuntu
############################################################
# Set the base image to Ubuntu
FROM ubuntu
# File Author / Maintainer
MAINTAINER Maintaner Name
安装Nginx
# Install Nginx
# Add application repository URL to the default sources
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
# Update the repository
RUN apt-get update
# Install necessary tools
RUN apt-get install -y nano wget dialog net-tools
# Download and Install Nginx
RUN apt-get install -y nginx
Bootstrapping 
安装Nginx后,我们需要配置Nginx并且替换掉默认的配置文件
# Remove the default Nginx configuration file
RUN rm -v /etc/nginx/nginx.conf
# Copy a configuration file from the current directory
ADD nginx.conf /etc/nginx/
# Append "daemon off;" to the beginning of the configuration
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
# Expose ports
EXPOSE 80
# Set the default command to execute
# when creating a new container
CMD service nginx start
保存 dockfile。
使用Dockerfile自动构建Nginx容器
因为我们命令Docker用当前目录的Nginx的配置文件替换默认的配置文件,我们要保证这个新的配置文件存在。在Dockerfile存在的目录下,创建nginx.conf:
sudo nano nginx.conf
然后用下述内容替换原有内容:
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和配置文件来构建镜像。

 

分享到:
评论

相关推荐

    集XMPP推送与聊天于一体的Openfire开发Android

    与标题一致的描叙,你值得拥有,...http://www.2cto.com/kf/201303/199088.html http://hi.baidu.com/xinshenbuning2/item/e94226de7517fe1ed78ed0b1 http://www.blogjava.net/lizongbo/archive/2006/12/04/85433.html

    二级C语言 PX12020900002_网络资源列表.doc

    14. **51CTO技术论坛**:[http://bbs.51cto.com/forum-134-1.html](http://bbs.51cto.com/forum-134-1.html) 提供IT技术交流,包括C语言的学习和实践经验。 15. **编程爱好者论坛**:...

    《Linux运维趋势》(0-24期合辑)2013跨年礼包

    各位朋友大家好!...邮件订阅入口:http://os.51cto.com/art/201011/233915.htm 投稿信箱:huangdan@51cto.com 发布周期:每个月的第二个星期五 往期《Linux运维趋势》下载汇总页:http://down.51cto.com/zt/71

    windows_2008 Oracle_11g_R2_配置完整版.doc

    windows2008+Oracle11gR2故障转移群集配置完整版2011-01-0905:14:52标签:HYPERLINK...//blog.51cto.com/tagindex.php?keywo

    常用搜索引擎搜索串

    http://wstatic.xunlei.com/index2.htm?search=%s ``` ### 搜狗(Sogou) 搜狗搜索引擎在中国市场也有较高的占有率,其搜索串格式为: ``` http://www.sogou.com/web?query=%s ``` ### 其他专业搜索网站 除了...

    开发一款任意APP-开发一款任意APP需要的类库以及多渠道打包命名框架 如需学习用法详见旧版本:https://github.com/geeklx/jiuzhidao_xinjiagou.zip

    梁肖51CTO博客:http://blog.51cto.com/liangxiaoAndroid业务组件库:http://blog.51cto.com/liangxiao/2146536APP框架多渠道打包和闭包,支持分包安装,UI独立,网络请求独立 此项目还有一些不完善的地方,可以留言...

    shell从入门到精通pdf

    博客 http://lizhenliang.blog.51cto.com GitHub https://github.com/lizhenliang/Shell-Python-Document QQ 技术群 323779636(Shell/Python 运维开发群) 说明 本文档均为个人经验总结,转发请保留出处,...

    android学习资料(网站,论坛)

    7. **Weizhulin博客(http://weizhulin.blog.51cto.com/)**:在51CTO上,作者分享了Android相关的技术和实战经验。 8. **Mingkg21博客(http://mingkg21.javaeye.com/category/53645)**:虽然JavaEye已关闭,但其...

    H3c图标库ALL.ppt

    http://down.51cto.com/zt/2164 华为网络数通设备VRP软件及配置手册合集(持续更新) http://down.51cto.com/zt/2166 H3C网络数通设备Comware软件及配置手册合集(持续更新) http://down.51cto.com/zt/2165 思科...

    多年来积累的学习网站

    1. **51CTO** (http://www.51cto.com/):中国领先的IT技术网站,提供技术文章、在线课程、论坛讨论和行业资讯,涵盖了从网络、数据库到云计算的各种主题。 2. **ITEYE** (http://www.iteye.com/):内容丰富全面的IT...

    27本值得读的php教程

    - **下载链接**:[http://down.51cto.com/data/605626](http://down.51cto.com/data/605626) - **内容概览**:本书适合已经具备一定PHP基础知识的学习者。它深入介绍了PHP的高级特性,如面向对象编程、错误处理、...

    windows2003下安装oracle92的安装文件及补丁包下载地址

    - [http://jeckyrain.blog.51cto.com/253059/58709](http://jeckyrain.blog.51cto.com/253059/58709) 通过以上步骤和注意事项,可以在Windows 2003环境下顺利完成Oracle 9i的安装,并确保其能够稳定运行。需要注意...

    走进MyBatis世界之基础入门(二)

    MyBatis是一款优秀的ORM...本章主要内容:MyBatis与Spring如何集成,声明式事务管理,MapperScannerConfigurer本次课程,在YY上进行,YY频道:71042615课程回放:http://bbs.51cto.com/open/do/course/cid/65系列课程:...

    android浏览器-真机环境下可自动获取不同运营商网络代理

    在(移动联通电信)wap网络下,android webview控件无法...在此感谢这两位博主分享的博文:http://johnson008.blog.51cto.com/4000361/729387 http://hi.baidu.com/z57354658/blog/item/5902da1f318d67d5a78669d6.html

    【精品珍藏】C、C++热门精品资料集(共110个)

    - **链接**: [http://down.51cto.com/zt/414](http://down.51cto.com/zt/414) - **下载量**: 800次 - **好评率**: 95.00% - **知识点**: 这是一套关于使用VC++进行软件开发的源码集合,非常适合希望深入了解...

Global site tag (gtag.js) - Google Analytics