当前位置:   article > 正文

dockerfile编写规则 w10_dockerfile的规则

dockerfile编写规则 w10_dockerfile的规则

一. USER/WORKDIR

ps: run 进去时指定的用户和目录

1.创建dockerfile文件夹 和 文件

cd /data/

mkdir dockerfile

cd dockerfile/

vi Dockerfile

Dockerfile 内容如下  /data/dockerfile/Dockerfile

FROM docker.io/shizhengwen/nginx:v1.12.2

USER nginx

WORKDIR /usr/share/nginx/html

2.然后去构建镜像 docker build . -t docker.io/shizhengwen/nginx:v1.12.2_with_workdir

[root@localhost dockerfile]# docker build . -t docker.io/shizhengwen/nginx:v1.12.2_with_workdir

Sending build context to Docker daemon 2.048kB

Step 1/3 : FROM docker.io/shizhengwen/nginx:v1.12.2

---> 4037a5562b03

Step 2/3 : USER nginx

---> Running in a3be75946d38

Removing intermediate container a3be75946d38

---> faadf77b6d5f

Step 3/3 : WORKDIR /usr/share/nginx/html

---> Running in 9a2681751bc8

Removing intermediate container 9a2681751bc8

---> 0c7f075449b3

Successfully built 0c7f075449b3

Successfully tagged shizhengwen/nginx:v1.12.2_with_workdir

[root@localhost dockerfile]#

这下镜像就用build构建好了

3.把这个镜像启起来, 再查看用户和当前文件

[root@localhost dockerfile]# docker run --rm -ti --name mynginx shizhengwen/nginx:v1.12.2_with_workdir /bin/bash

nginx@bb8066fa624b:/usr/share/nginx/html$ whoami

nginx

nginx@bb8066fa624b:/usr/share/nginx/html$ pwd

/usr/share/nginx/html

nginx@bb8066fa624b:/usr/share/nginx/html$

然后发现 当前用户 和 当前目录是和 dockerfile 里定义的一样

二. ADD/EXPOSE

4. 进入到 /data/dockerfile/ 编辑文件

[root@localhost dockerfile]# cd /data/dockerfile/

[root@localhost dockerfile]# ls

dockerfile

[root@localhost dockerfile]#

5.把静态文件复制到 /data/dockerfile/

[root@localhost dockerfile]# cp /root/html/index.html .

[root@localhost dockerfile]# ls

dockerfile index.html

6. 编辑 dockerfile

vim dockerfile

放入如下信息

[root@localhost dockerfile]# cat dockerfile

FROM docker.io/shizhengwen/nginx:curl

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

EXPOSE 80

7.构建镜像

docker build . shizhengwen/nginx:v1.12.2_with_index_expose

8.启动镜像    # P 表示宿主机随机使用端口号,而容器在dockerfile里指定过了就不用指定了。 这个P大写

docker run --rm --name mynginx -d -P shizhengwen/nginx:v1.12.2_with_index_expose

9.进去查看后发现:发现现在用户和当前目录会到了默认状态了,

[root@localhost dockerfile]# docker exec -ti 03b3eb73184a /bin/bash

root@03b3eb73184a:/# whoami

root

root@03b3eb73184a:/# pwd

/

root@03b3eb73184a:/#

用 netstat -luntp 命令 可在宿主机上查看分配了什么端口

三. RUN/ENV

10.先用 yum list bind --show-duplicates 查看bind 的版本

[root@localhost dockerfile]# yum list bind --show-duplicates

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

* base: mirrors.aliyun.com

* epel: mirrors.tuna.tsinghua.edu.cn

* extras: mirrors.aliyun.com

* updates: mirrors.aliyun.com

Available Packages

bind.x86_64 32:9.11.4-9.P2.el7 base

[root@localhost dockerfile]#

当前版本是 9.11.4

11.编辑  /data/dockerfile/

[root@localhost dockerfile]# cat dockerfile

FROM centos

ENV VER 9.11.4

RUN yum install bind-$VER -y

12.构建镜像

docker build . -t shizhengwen/bind:v9.11.4_with_env_run

13. 启动镜像

docker run -ti --rm shizhengwen/bind:v9.11.4_with_env_run /bin/bash

14.验证 :VER 和 bind 都在容器里了

[root@783ca265fe24 /]# printenv

HOSTNAME=783ca265fe24

TERM=xterm

LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PWD=/

SHLVL=1

HOME=/root

VER=9.11.4

_=/usr/bin/printenv

[root@783ca265fe24 /]# rpm -qa bind

bind-9.11.4-9.P2.el7.x86_64

[root@783ca265fe24 /]#

四.CMD

15.编辑dockerfile

[root@localhost ~]# cat /data/dockerfile/dockerfile

FROM centos:7

RUN yum install httpd -y

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

[root@localhost ~]#

16.构建镜像

docker build . -t -p83:80 myhttpd shizhengwen/httpd:test

17.启动镜像

docker run -d --rm mythhpd -p83:80 shizhengwen/httpd:test

18.访问83端口出现httpd的页面就成功了

五.entrypoint.sh

entrypoint.sh也是一个默认的系统CMD

19.编辑dockerfile

[root@localhost dockerfile]# cat /data/dockerfile//dockerfile

FROM centos:7

ADD entrypoint.sh /entrypoint.sh

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

ENTRYPOINT /entrypoint.sh

[root@localhost dockerfile]#

20.编辑 entrypoint.sh 文件

[root@localhost dockerfile]# cat /data/dockerfile/entrypoint.sh

#!/bin/bash

/sbin/nginx -g "daemon off;"

[root@localhost dockerfile]#

21.一定要加上执行权限

[root@localhost dockerfile]# chmod +X entrypoint.sh

22.构建镜像

docker build . -t shizhengwen/nginx:mynginx

23.启动镜像

docker run --rm -p84:80 shizhengwen/nginx:mynginx

24.这时就启动了

[root@localhost ~]# docker exec -ti 2b093cbc65c2 /bin/bash

[root@2b093cbc65c2 /]# cat /entrypoint.sh

#!/bin/bash

/sbin/nginx -g "daemon off;"

[root@2b093cbc65c2 /]# ll /entrypoint.sh

-rwxr-xr-x 1 root root 42 Feb 25 18:03 /entrypoint.sh

[root@2b093cbc65c2 /]# exit

exit

[root@localhost ~]#

精华

FROM docker.io/shizhengwen/nginx:v1.12.2 # 导入镜像

USER nginx # 进入时的指定用户

WORKDIR /usr/share/nginx/html # 进入时的当前目录

ADD index.html /usr/share/html/index/html # 挂载文件

EXPOSE 80 # 映射容器内的端口, 只有配合 -P才有用

ENV VER 9.11.4 # 变量 & 环境变量

RUN yum install bind-$VER -y # 生成镜像前运行的命令

CMD ["httpd", "-D", "FOREGROUND"] # 指定启动命令

小实验

编辑dockerfile

[root@localhost dockerfile]# cat dockerfile

FROM shizhengwen/nginx:v1.12.2

USER root

ENV WWW /usr/share/nginx/html

ENV CONF /etc/nginx/conf.d

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etclocaltime && 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","daemon off;"]

[root@localhost dockerfile]#

创建dockerfile 同级文件 demo.od.com.conf

[root@localhost dockerfile]# cat demo.od.com.conf

server{

listen 80;

server_name demo.od.com;

root /usr/share/nginx/html;

}

[root@localhost dockerfile]#

构建docker镜像

[root@localhost dockerfile]# docker build . -t shizhengwen/nginx:nginx123

启动 docker 容器

docker run --rm -p80:80 shizhengwen/nginx:nginx123

这下本地就能访问 demo.od.com 这个域名了

联合网络

[root~localhost]docker run -d shizhengwen/nginx:curl

[root~localhost]docker run -ti --rm --net=container:1b18e7b1 shizhengwen/nginx:curl bash

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/859966
推荐阅读
相关标签
  

闽ICP备14008679号