#############Dockerfile学习###########
###Dockerfile的规则
1.格式
a.#为注释
b.指令大写,内容小写
2.Docker是按照顺序执行dockerfile里的指令集合的(从上到下)
3.每个Dockerfile的第一个非注释行指令,必须是“FROM”指令,
用于为镜像文件按构建过程中,指定基准镜像,后续的指令
运行于此基准镜像所提供的运行环境中。
###4组核心的Dockerfile指令#####
#USER/WORKDIR指令
1.USER是指新镜像所启动容器的进程是以什么用户执行?
2.WORKDIR是指新镜像所启动容器是在什么路径下执行命令。(有点像cd命令)
3.Dockerfile内容:
FROM nginx:latest
USER nginx
WORKDIR /usr/share/nginx/html/
4.构建镜像docker build .[一般是当前路径的Dockerfile] -t IAMGE_NAME:TAG
docker build . -t bandongbudong/nginx:v1.0.1
4.结果:
[root@localhost docker_files]# docker run -it --rm 00deb847ea10 /bin/bash
nginx@2ad0fe5332c6:/usr/share/nginx/html$ whoami
nginx
nginx@2ad0fe5332c6:/usr/share/nginx/html$ pwd
/usr/share/nginx/html
nginx@2ad0fe5332c6:/usr/share/nginx/html$
#ADD/EXPOSE指令
1.ADD指令是将宿主机上的文件拷贝(添加)到新镜像里
2.EXPOSE指令是将新镜像的指定端口爆露出来,作为通讯。
3.Dockerfile内容:(本地的index文件是百度首页)
FROM nginx:latest
ADD index.html /usr/share/nginx/html/index.html
EXPOSE 80
4.构建镜像
docker build . -t bandongbudong/nginx:ADD_EXPOS_v1.0.1
4.启动容器(-p会忽略EXPOSE)
docker run -it -rm -p 7884:80 bandongbudong/nginx:ADD_EXPOS_v1.0.1 /bin/bash
5.启动nginx
nginx -g "daemon off;"
6.验证:
http://192.168.98.130:7884/
备注:已知程序都有默认端口,nginx默认是80,故容器也暴漏80,才方便映射。部分端口和程序是绑定关系的。
7.其实expose只能和-P一起配合,会随机绑定一个宿主机端口
docker run -it --rm -P bandongbudong/nginx:ADD_EXPOS_v1.0.1 /bin/bash
nginx -g "daemon off;"
在宿主机执行netstat -luntp
tcp 0 0 0.0.0.0:49153 0.0.0.0:* LISTEN 22803/docker-proxy
验证:
http://192.168.98.130:49153/
8.不需要执行nginx -g "daemon off;" 的方式
docker run -d -P bandongbudong/nginx:ADD_EXPOS_v1.0.1
http://192.168.98.130:49154/
#RUN/ENV指令
1.RUN指令是在构建镜像的时候可以运行一些shell命令,帮助构建镜像
2.ENV是环境变量,即可以在Dockerfile中用,也会被写入到新的镜像中
3.Dockerfile内容:
FROM centos:7
ENV VERSION 9.11.4
RUN yum install bind-$VERSION -y
4.构建镜像
docker build . -t bandongbudong/centos:7.bind.9.11.4
5.启动容器并打印环境变量
[root@localhost docker_files]# docker run --rm -it bandongbudong/centos:7.bind.9.11.4
[root@ca27f18c5634 /]# printenv
HOSTNAME=ca27f18c5634
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=/
VERSION=9.11.4
SHLVL=1
HOME=/root
_=/usr/bin/printenv
6.备注
yum list bind --show-duplicates 查看某个软件的版本信息
#CMD/ENTRYPOINT指令
1.CMD功能,显示的指定一个进程显示的运行在容器的前台,让容器一直运行。
2.Dockerfile内容:
FROM centos:7
RUN yum install httpd -y
CMD ["httpd","-D","FOREGROUND"]
3.构建镜像
docker build . -t bandongbudong/centos:7_http_cmd
4.启动容器
docker run -d --rm --name myhttp -p7878:80 bandongbudong/centos:7_http_cmd
5.验证:
在浏览器中输入http://192.168.98.130:7887/ 会看到阿帕奇首页
6.ENTRYPOINT可以指定容器启动是直接执行的脚本,可替代CMD执行的命令
7.Dockerfile内容:
FROM centos:7
ADD test.sh /test.sh
RUN yum install epel-release -q -y && yum install -y nginx
ENTRYPOINT /test.sh
8.构建镜像
docker build . -t bandongbudong/centos:7_entripoint
9.启动容器
docker run --rm -p7887:80 bandongbudong/centos:7_entripoint
10.验证:
浏览器中输入http://192.168.98.130:7887/,会有403 forbidden
#####综合实验:运行一个dockers容器,在浏览器打开demo.od.com地址访问到百度首页#######
1.demo.od.com.conf文件写虚拟主机(注意必须空一行)
server {
listen 80;
server_name demo.od.com;
root /usr/share/nginx/html;
}
2.Dockerfile内容:
FROM bandongbudong/nginx:v1.0.1
USER root
ENV WWW /usr/share/nginx/html
ENV CONF /etc/nginx/conf.d
# 修改时区
RUN /bin/cp /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","daemon off;"]
3.在自己的windows中win+r-->drivers-->etc/hosts--->任何一行添加192.168.98.130 demo.od.com
3.验证:
浏览器输入http://demo.od.com/显示的是百度首页