Docker--------Dockerfile实战

1. 背景

   Dockerfile是为快速构建docker image[镜像]而设计的,当你使用docker build 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大小写均可)的纯文本文件并执行里面的指令构建出一个docker image。这比SaltStack的配置管理要简单的多,不过还是要掌握一些简单的指令。

    Dockerfile 由一行行命令语句组成,并且支持以#开头的注释行。指令是不区分大小写的,但是通常我们都大写。

wKioL1lCC07yaTsgAAB2-wgHz8Y689.jpg


2. Dockerfile内容结构

    * 基础镜像信息

    * 维护者信息

    * 镜像操作指令

    * 容器启动时执行指令


    

3. 常用指令

   *. FROM   指定基础镜像

   格式:FROM<image>或FROM<image>:<tag>

     FROM是Dockerfile里的第一条指令(必须是),后面跟有效的镜像名(如果该镜像你的本地仓库没有则会从远程仓库Pull取)。然后后面的其它指令FROM的镜像中执行。

1
2
# Base image
FROM centos


   *. MAINTAINER  维护者信息

     格式:MAINTAINER <name>

1
2
# Maintainer
MAINTAINER lisea cnlisea@126.com


   *. RUN 指定运行命令  [可以指定多条]

     格式:RUN <command>或 RUN[“executable”, “param1”, “param2”]。

1
2
3
4
# Commands
RUN rpm -ivh http: //mirrors .aliyun.com /epel/epel-release-latest-7 .noarch.rpm
RUN yum  install  nginx -y
RUN  echo  "daemon off;"  >>  /etc/nginx/nginx .conf


     *.  EXPOSE 设置容器内部暴露的端口号

1
EXPOSE 80


     *.  CMD 指定容器启动是执行的命令,可被启动容器参数覆盖

   格式: 

    CMD [“executable”,”param1″,”param2″]  使用exec 执行,推荐方式

    CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用

            CMD [“param1″,”param2”] 提供给ENTRYPOINT的默认参数

     CMD指定容器启动是执行的命令,每个Dockerfile只能有一条CMD命令,如果指定了多条,只有最后一条会被执行。

     如果你在启动容器的时候也指定的命令,那么会覆盖Dockerfile构建的镜像里面的CMD命令。

1
CMD [ "nginx" ]


     *.  ENTRYPOINT 指定容器启动是执行的命令,不可被启动容器参数覆盖

  格式:  

   ENTRYPOINT [“executable”, “param1″,”param2”]

   ENTRYPOINT command param1 param2(shell中执行)

1
ENTRYPOINT [ "nginx" ]


     *.  ADD  添加文件至容器内部,如果文件是可识别的压缩包会自动解压

   格式:        

   ADD <src>… <dest>

   ADD [“<src>”,… “<dest>”]

1
ADD index.html  /usr/share/nginx/html/index .html


     *.  USER 指定容器运行用户名和UID

   格式: USER root

1
USER root


4. 实战

   * 构件nginx镜像,基础镜像为centos, 容器内部暴露端口为80, 添加文件index.html主页文件至nginx html目录下.

   创建index.html文件

1
[root@harbor nginx] # echo "http://lisea.blog.51cto.com" > index.html

   编写 dockerfile 文件  vim dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Nginx
# 1.0.1
# Author lisea
 
# Base image
FROM centos
 
# Maintainer
MAINTAINER lisea cnlisea@126.com
 
# Commands
RUN rpm -ivh http: //mirrors .aliyun.com /epel/epel-release-latest-7 .noarch.rpm
RUN yum  install  nginx -y
RUN  echo  "daemon off;"  >>  /etc/nginx/nginx .conf
 
# Add files
ADD index.html  /usr/share/nginx/html/index .html
 
EXPOSE 80
CMD [ "nginx" ]

   构建镜像,名称为lisea/nginx tag为1.0.1

1
[root@harbor nginx] # docker build -t lisea/nginx:v1.0.1 .

      查看本地镜像

1
2
3
4
[root@harbor nginx] # docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
lisea /nginx          v1.0.1              010fff3a1451        6 seconds ago       387.2 MB
docker.io /centos     latest              3bee3060bfc8        9 days ago          192.5 MB

    

5. 总结



以需求驱动技术,技术本身没有优略之分,只有业务之分。

      本文转自asd1123509133 51CTO博客,原文链接:http://blog.51cto.com/lisea/1937013,如需转载请自行联系原作者



优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/553540

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。