Dockerfile指令详解(六)

简介: dockfile详细配置1.dockerfile主要组成部分基础镜像信息FROM centos:6.9制作镜像操作指令RUN yum -y install openssh-server容器启动时操作指令CMD ["/bin/bash"]

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.去页面上传一个文件并查看

image.pngEXPOSE

  • 它要打开的门是啥(指定对外的端口 -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则变成了参数
目录
相关文章
|
NoSQL 关系型数据库 MySQL
Dockerfile(9) - ENTRYPOINT 指令详解
Dockerfile(9) - ENTRYPOINT 指令详解
683 0
|
4月前
|
JSON 物联网 Shell
Dockerfile指令详解
Dockerfile指令详解
64 0
|
4月前
|
Linux Docker 容器
Docker Dockerfile 语法与指令
Docker Dockerfile 语法与指令
27 0
Dockerfile(3) - WORKDIR 指令详解
Dockerfile(3) - WORKDIR 指令详解
809 0
|
Docker 容器
Dockerfile文件中CMD指令与ENTRYPOINT指令的区别
本文是博主学习docker 制作镜像指令的记录,希望对大家有所帮助
156 0
Dockerfile文件中CMD指令与ENTRYPOINT指令的区别
|
存储 Shell 应用服务中间件
学习Docker就应该掌握的dockerfile语法与指令
在日常的工作中,常常需要制作自己的项目的镜像,一般通过以下两种方式制作镜像:Docker commit、Dockerfile。 ## Docker commit Docker commit一般用做从一个运行状态的容器来创建一个新的镜像。定制镜像应该使用Dockerfile来完成。 ``` docker commit 容器名 新镜像名:tag ``` 使用这种方式的缺点是:1.对外不
Dockerfile(1) - FROM 指令详解
Dockerfile(1) - FROM 指令详解
514 0
|
存储 应用服务中间件 调度
Dockerfile(12) - HEALTHCHECK 指令详解
Dockerfile(12) - HEALTHCHECK 指令详解
317 0
Dockerfile(12) - HEALTHCHECK 指令详解
|
Shell Linux 开发工具
Dockerfile(4) - RUN 指令详解
Dockerfile(4) - RUN 指令详解
368 0
|
Shell Docker 容器
Docker(46)- 详解 Dockerfile 指令
Docker(46)- 详解 Dockerfile 指令
141 0
Docker(46)- 详解 Dockerfile 指令