赞
踩
一. 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。