Docker之dockerfile命令详解

1.容器的生命周期:

* 检查本地是否存在镜像,如果不存在即从远端仓库检索

* 利用镜像启动容器

* 分配一个文件系统,并在只读的镜像层外挂载一层可读写层

* 从宿主机配置的网桥接口中桥接一个虚拟接口到容器

* 从地址池配置一个IP地址给容器

* 执行用户指定的指令

* 执行完毕后容器终止

2.Dockerfile的规则:

 * 格式:

  1)#为注释

  2)指令(大写)内容(小写)

  3)尽管指令是大小写不敏感的,但是,我们强烈建议指令用大写,内容用小写表示

* Docker是按顺序执行Dockerfile里的指令集合的(从上到下依次执行)

* 每一个Dockerfile的第一个非注释行指令,必须是“FROM”指令,用于为镜像文件构建过程中,指定基准镜像,后续的指令运行于此基准镜像所提供的运行环境中。

*实践中,基准镜像可以是任何可用镜像文件,默认情况下,docker build 会在docker 主机(本地)上查找指定的镜像文件,当其他本地不存在时,则会从Docker registry(远端)上拉取所需镜像文件。

4组 核心的Dockerfile 指令

* USER/WORKDIR指令

*ADD/EXPOSE指令

*RUN/ENV指令

*CMD/ENTRYPOINT指令

===========================================================

(1)USER/WORKDIR指令:

      /data/dockerfile/Dockerfile

    FROM  stanleyws/nginx:v1.12.2 

    USER  nginx 

    WORKDIR  /usr/share/nginx/html 

     WORKDIR 类似于 cd:

[root@docker  dockerfile]#  docker build . -t docker.io/oldboy1103/nginx:v1.12.2_with_user_workdir   

[root@docker  dockerfile]# docker run --rm -ti --name nginx123 oldboy1103/nginx:v1.12.2_with_user_workdir /bin/bash    

===========================================================

(2)ADD/EXPOSE指令

     /data/dockerfile/Dockerfile 

    FROM stanleyws/nginx:v1.12.2 

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

    EXPOSE 80

[root@docker  dockerfile]# vi Dockerfile

    FROM stanleyws/nginx:v1.12.2

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

    EXPOSE 80

[root@docker  dockerfile]# docker build . -t stableyws/nginx:v1.12.2_with_index_expose 

[root@docker  dockerfile]# docker images 

===========================================================

(3)RUN/ENV 指令

     /data/dockerfile/Dockerfile 

    FROM centos 

    ENV VER 9.9.4-74.el7_6.1 

    RUN yum install bind-$VER -y 

# 构建镜像:

[root@docker  dockerfile]#  docker build . -t stanleyws/bind:v9.9.4_with_env_run 

# 运行容器:

[root@docker  dockerfile]# docker run --rm stanleyws/bind:v9.9.4_with_env_run rpm -qa bind

bind-9.9.4-74.el7_6.1.x86_64

===========================================================

(4)CMD/ENTRYPOINT指令

## CMD和ENTRYPOINT指令作用相同,使用方法略有不同

1.CMD指令
/data/dockerfile/Dockerfile 

FROM centos 

RUN yum install httpd -y 

CMD ["httpd","-D","FOREGROUND"]

构建镜像:

[root@docker  dockerfile]#  docker build . -t stanleyws/httpd:myhttpd

[root@docker  dockerfile]#  vi Dockerfile 

  FROM centos 

  RUN yum install httpd -y 

  CMD ["httpd","-D","FOREGROUND"]

[root@docker  dockerfile]# docker run -d --rm --name myhttpd -p83:88 oldboy1103/httpd:test 

2e12804350b12b0916fe

[root@docker  dockerfile]# docker ps -a 

2.ENTRYPOINT指令:

/data/dockerfile/Dockerfile 

FROM centos

ADD entrypoint.sh /entrypoint.sh 

RUN yum install epel-release -q -y && yum install nginx -y 

ENTRYPOINT /entrypoint.sh 

entrypoint.sh 

/data/dockerfile/entrypoinot.sh 

#!/bin/bash 

/sbin/nginx -g "daemon off;"

[root@docker  dockerfile]#  docker exec -ti compassionate_solomon /bin/bash 

[root@docker  dockerfile]#  vi dockerfile 

  FROM centos

  ADD entrypoint.sh /entrypoint.sh 

  RUN yum install epel-release -q -y && yum install nginx -y 

  ENTRYPOINT /entrypoint.sh 

   entrypoint.sh 

===========================================================

(5)综合实验:

      运行一个docker容器,在浏览器打开demon.od.com能访问到百度首页

准备Docker 镜像:

/data/dockerfile/nginx/Dockerfile 

FROM stanleyws/nginx:v1.12.2 

USER root 

ENV www /usr/share/zoneinfo/Asia/shanghai /etc/localtime &&\

echo 'Asia/Shanghai' >/etc/timezone 

WORKDIR $www 

ADD index.html  $www/index.html

ADD demo.od.com.conf $CONF /demo.od.com.conf 

EXPOSE 80 

CMD ["nginx","g","damon off;"]

index.html 

/data/dockerfile/nginx/index.html

[root@docker  dockerfile]#  wget www.baidu.com -O index.html 

[root@docker  dockerfile]#  vi demo.od.com.conf 

server {

listen 80;

server_name demo.od.com;

root /usr/share/nginx/html;

}

[root@docker  dockerfile]#  docker run --rm -P oldboy1103/nginx:baidu 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335