【技术实践】Dockerfile入门

2019-02-14 人浏览 点击收藏: 分享至:

  一、什么是Dockerfile

  1、Dockerfile的用途

  Dockerfile是用来构建镜像的,Dockerfile构建过程:

  · 1.从基础镜像运行一个容器

  · 2.执行一条指令,对容器作出修改

  · 3.执行类似docker commit的操作,提交一个新的镜像层

  · 4.再基于刚提交的镜像运行一个新容器

  · 5.执行Dockerfile中的下一跳指令,直至所有指令执行完毕.

  2、运行构建

  注意文件名字必须叫Dockerfile:

  · # docker build -t="syx/df_test2" .

  · -t="syx/df_test2" ,指定产生镜像的 镜像名:标签名

  · 每条RUN指令产生一个新都会创建一个新的镜像层并对镜像进行提交,可以启动中间产生的镜像,运行下一条指令进行调试!!!

  · 下次运行时不会重新创建该缓存镜像,可以指定参数(--no-cache)强制创建!

  ·

  运行结束就能看到我们自己构建的镜像了

  · # docker images

  3、执行镜像

  · # docker run -d -p 8080:80 --name static_web liangshengqi/static_web nginx -g "daemon off"

  · # docker run -d -P --name static_web liangshengqi/static_web nginx -g "daemon off" 将容器80端口对宿主机开放,并且绑定到主机的一个随机端口

  4、查看镜像的 ONBUILD 指令

  docker inspect imgId

  二、Dockerfile的例子

  1、例一

  # vim Dockerfile

  · FROM ubuntu

  · MAINTAINER syx '783284481@qq.com'

  · RUN apt-get update && apt-get install -y nginx

  · EXPOSE 80

  2、例二

  # version: 0.0.1

  FROM ubuntu: 14.04

  MAINTAINER liangshengqi "liangshengqi@langchao.com"

  RUN apt-get update

  RUN apt-get install -y nginx

  RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/

  EXPOSE 80

  三、Dockerfile的指令

  1、 CMD

  CMD ["/bin/bash","-l"]

  docker run 命令可以覆盖 CMD指令。

  2、 ENTRYPOINT

  ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]

  ENTRYPOINT指令指定的命令不会被docker run覆盖,docker run传递的参数会再次传递给ENTRYPOINT指定的命令。

  这个命令会以前台的方式启动nginx守护进程,此时这个容器作为一个web服务器来运行。

  组合 ENTRYPOINT 和 CMD

  ENTRYPOINT ["/usr/sbin/nginx"]

  CMD ["-h"]

  这个例子中,

  · 如果启动容器时,在命令行中指定参数传递给nginx守护进程,如指定 -g "daemon off",nginx守护进程就以指定的参数方式运行(此处是以前台方式运行)

  · 如果启动容器时,在命令行中没有指定参数,就会使用默认的CMD指定的-h参数(显示nginx的帮助信息)

  其实,--entrypoint可以覆盖dockerfile中的ENTRYPOINT指令!

  3、WORKDIR 设置工作目录

  · WORKDIR /opt/webapp/db

  · RUN bundle install

  · WORKDIR /opt/webapp

  · ENTRYPOINT ["backup"]

  或者

  · docker run -it -w /var/log ubuntu pwd

  4、ENV 设置环境变量

  · ENV TARGET_DIR /opt/app

  · WORKDIR $TARGET_DIR

  或者临时有效的设置

  · docker run -it -e "WEB_PORT=8080" ubuntu env

  5、USER 指定该镜像会以什么样的用户去运行

  USER user

  USER user:group

  USER uid

  USER uid:gid

  6、ADD 和 COPY

  ADD 复制文件和目录,如果需要解压,就解压

  COPY 复制文件

  · COPY conf.d /etc/apache2

  · ADD latest.tar.gz /var/www/wordpress

  7、ONBUILD

  当一个镜像被其他镜像用作基础镜像时,会触发的动作

  ONBUILD ADD . /ap/src

  ONBUILD RUN cd /app/src && make

  8、VOLUME


  作者:梁圣奇

  职务:云服务集团云计算产品中心高级架构师

  专业领域:微服务架构

  专家简介:近二十年软件开发与架构设计经验,深入了解多种软件设计模式,在微服务架构治理、物联网服务平台设计研发等领域拥有丰富实战经验,同时专注技术分享,帮助开发者成长。


查看全部
相关文章推荐相关文章推荐
技术实践Dockerfile入门 服务器怎么选择,浪潮云服务器入门版怎么样 技术实践】ssl双向认证 技术实践】RSA的公钥、私钥 技术实践】istio的优势在哪里 技术实践】什么是微服务架构 技术实践】安装 go 语言环境 技术实践】SpringBoot的重要特性 技术实践】kubernetes 手绘画 技术实践】Spark使用hive元数据
热门解决方案热门解决方案
智能巡检系统解决方案_智能巡检管理系统_设备巡检系统 电商行业解决方案_电商平台架构_电商平台搭建解决方案 充电服务管理平台解决方案_智能充电系统_充电服务管理平台 配送中心解决方案_配送服务方案 电子采购平台解决方案_采购与供应管理平台_电子采购系统搭建 工贸一体化平台解决方案_工贸一体化方案 云安全漏洞扫描解决方案_安全漏洞扫描系统_网络安全漏洞管理 金融行业解决方案_互联网金融架构搭建 转动设备(采煤、化工行业)健康智能监测解决方案_转动设备在线监测预警系统 云托管解决方案_服务器云托管_企业云服务托管
热门产品推荐热门产品推荐
热门标签热门标签