dockfile详细配置
1.dockerfile主要组成部分
- 基础镜像信息
- FROM centos:6.9
- 制作镜像操作指令
- RUN yum -y install openssh-server
- 容器启动时操作指令
- CMD ["/bin/bash"]
2.dockerfile常用指令
- FROM
- 这个镜像来源于哪?(指定基础镜像),这里指定的镜像本地可以不存在,不存在的情况下默认去官方源去下载
- 例子:FROM centos:6.9
- MAINTAINER
- 镜像的描述,目前已不再使用
- LABLE
- 标签,也就是镜像的描述
- LABLE xxxxx
- RUN
- 你想让它做什么操作
- 也就是定义镜像里面执行哪些命令
- RUN rm -rf /etc/yum.repos.d/*
- ADD
- 给它点创业资金,也就是将本地文件传到镜像里面,如果是压缩文件会自动解压
- ADD kodexporer.conf /etc/nginx/conf.d/
- WORKDIR
- 相当于cd命令,设置当前的工作目录
- WORKDIR /web/kodexporer
- 实例
1.编写dockerfile指定workdir [root@docker01 centos69_kod]# vim dockerfile WORKDIR /web/kodexporer 2.自建镜像 [root@docker01 centos69_kod]# docker build -t centos69_kod_df:v1 3.进入容器后会发现默认就是/web/kodexporer [root@docker01 centos69_kod]# docker exec -it relaxed_banzai /bin/bash [root@0c2bac8a555a kodexporer]# ls
VOLUME
- 给它一个存放行李的地方
- 也就是设置数据卷,挂载主机目录
- VOLUME /web/kodexporer
- 在dockerfile中写好后,运行容器后会自动生成一个数据卷,并挂载到/web/kodexporer目录中
- 实例
1.编写dockerfile [root@docker01 centos69_kod]# vim dockerfile #设置卷 VOLUME /web/kodexporer 2.自建镜像 [root@docker01 centos69_kod]# docker build -t centos69_kod_df:v2 . 3.运行容器 [root@docker01 centos69_kod]# docker run -itd -p 8080:80 centos69_kod_df:v2 e5ac7158866a6e19b3a30b9867cc8b3b9dd32c0615707655559bc1badaf1233c 4.查看卷组 [root@docker01 ~]# docker volume ls DRIVER VOLUME NAME local fd65a0b98987309d9056a3a7e5302d2c722ac255227dae4537f860f986170b78 5.查看卷组内容 [root@docker01 ~]# ls /var/lib/docker/volumes/fd65a0b98987309d9056a3a7e5302d2c722ac255227dae4537f860f986170b78/_data/ app ChangeLog.md config data index.php kodexplorer_a5.zip plugins README.MD static #U8bf4#U660e.htm 6.去页面上传一个文件并查看
EXPOSE
- 它要打开的门是啥(指定对外的端口 -P指定随机端口)
- EXPOSE 80 9000(多个端口用空格隔开)
- 实例
1.编写dockerfile [root@docker01 centos69_kod]# docker run -itd -p 8080:80 centos69_kod_df:v2 #设置对外提供的端口 EXPOSE 80 9000 2.自动构建镜像 [root@docker01 centos69_kod]# docker build -t centos69_kod_df:v3 . 3.运行容器并测试,会发现随机端口映射成了内部指定的端口 [root@docker01 centos69_kod]# docker run -d -it -P centos69_kod_df:v3 5231a376f8583387f1d0d9694c2be991d37e3f30943f4e558a4a93487761a289 [root@docker01 centos69_kod]# docker ps -a -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5231a376f858 centos69_kod_df:v3 "/bin/bash /root/ini…" About a minute ago Up About a minute 0.0.0.0:32769->80/tcp, 0.0.0.0:32768->9000/tcp affectionate_montalcini
CMD
奔跑吧,兄弟
指定容器后要启动的命令
容易被替换,所谓容易被替换是指在dockerfile指定好命令后,用docker run指定别的命令后会被替换
3.dockerfile其他指令
COPY
复制文件,不会自动解压
COPY init.sh /root/init.sh
ENV
环境变量
可以设置很多丰富的变量,让用户手动输入变量值,用docker run -e即可指定
1.在dockerfile中写死变量 1)编写dockerfile [root@docker01 centos69_ssh]# vim dockerfile ENV SSH_PASS=123456 2)编写初始化脚本 [root@docker01 centos69_ssh]# cat init.sh #!/bin/bash echo $SSH_PASS | passwd --stdin root 2.让用户灵活的设置密码 不需要在dockerfile中指定变量 1)编写初始化脚本 [root@docker01 centos69_ssh]# cat init.sh #!/bin/bash echo $SSH_PASS | passwd --stdin root 2)使用docker run -e指定变量值 [root@docker01 centos69_ssh]# docker run -d -it -e "SSH_PASS=1qaz@WSX" -p 2022:22 centos69_ssh_df:v4
ENTRYPOINT
- 容器启动会执行的命令
- 命令无法被替换,也就是说dockerfile中指定的是啥就是啥,docker run后面跟的命令不会受到影响,只会被当做命令参数
- ENTRYPOINT ["",""]
1.编写dockerfile [root@docker01 centos69_kod]# vim dockerfile ENTRYPOINT ["/bin/bash","/root/init.sh"] 2.自建镜像 [root@docker01 centos69_kod]# docker build -t centos69_kod_df:v4 . 3.运行镜像 [root@docker01 centos69_kod]# docker run -d -it -P centos69_kod_df:v4 sleep 10 [root@docker01 centos69_kod]# docker ps -a --no-trunc -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9f6b1e594b3210add6a9fd94fc32250bf18027256361cb2e7bb92e02004063f1 centos69_kod_df:v4 "/bin/bash /root/init.sh sleep 10" 2 minutes ago Up 2 minutes 0.0.0.0:32771->80/tcp, 0.0.0.0:32770->9000/tcp objective_hertz run后面跟的命令sleep 10则变成了参数