免费注册

【技术实践】Dockerfile入门

2019-02-14 人浏览

一、什么是Dockerfile 1、Dockerfile的用途 Dockerfile是用来构建镜像的,Dockerfile构建过程: · 1. 从基础镜像运行一个容器 · 2. 执行一条指令,对容器作出修改 · 3.

  一、什么是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


  作者:梁圣奇

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

  专业领域:微服务架构

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


上一篇: 【技术实践】iot前台开发环境:搭建 SpringBoot+angularJs2
下一篇: 浪潮云计算虚拟化案例概述

相关文章