Dockerfile是田来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本
1. 编写dockerfile文件
2. docker build命令构建镜像
3. docker run依镜像运行容器实例
1. 每条保留字指令都必须 为大写字母且后面要跟随至少一个参数
2. 指令按照从上往下执行,顺序执行
3. # 表示注释
4. 每条指令都会创建一个新的镜像层并对镜像进行提交
1. docker 基础镜像运行一个容器
2. 执行一条指令并对容器做出修改
3. 执行类似的docker commit的操作提交一个新的镜像层
4. docker 在基于刚提交的镜像运行一个新的容器
5. 执行dockerfile中的下一条指令直到所有指令都执行完成
从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,
* Dockerfile是软件的原材料
* Docker镜像是软件的交付品
* Docker容器则可以认为是软件镜像的运行态,也即依照镜像运行的容器实例
Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
1 Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;
2 Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker 镜像时会真正开始提供服务;
3 Docker容器,容器是直接提供服务的。
https://github.com/docker-libary/tomcat
基础镜像,当新的镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from
容器构建时的命令
两种格式
1. shell格式
2. exec格式
run是在docker build时运行的
对容器外暴露的端口
指定该镜像是以什么样的用户去执行,如果都不指,默认是root
用来构建镜像过程中设置环境变量
COPY src destCOPY ["src", "dest"]
<dest目标路径>:容器内指定的路径,该路径不用事先建好,路径不存在的话,会自动创建。
容器数据卷,用于数据保存和持久化工作
指定容器启动后需要干的事
dockerfile中可以有多个cmd指令,但只有最有一个生效,cmd会被docker run之后的参数替换。
参考tomcat的dockerfile演示讲解我们演示自己的覆盖
CMD 是在docker run时运行的
RUN 是在 docker build时运行的
1. 也是用来指定一个容器启动时要运行的命令
2. 类似于 CMD 指令,但是ENTRYPOINT不会被docker run后面的命令覆盖而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序
3. 格式和案例说明
命令格式:
ENTRYPOINT可以和CMD一起用,一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参。
当指定了ENTRYPOINT后,CMD的含义就发生了变化,不再是直接运行其命令而是将CMD的内容作为参数传递给ENTRYPOINT指令,他两个组合会变成
案例如下:假设已通过 Dockerfile 构建了 nginx:test 镜像:
是否传参 按照dockerfile编写执行 传参运行 Docker命令 docker run nginx:test docker run nginx:test -c /etc/nginx/ new.conf 衍生出的实际命令 nginx -c /etc/nginx/nginx.conf nginx -c /etc/nginx/ new.conf优点:
在执行docker run的时候可以指定ENTRYPOINT运行所需的参数。
注意:
如果dockerfile中存在多个ENTRYPOINT指令,仅最后一个生效。
https://www.oracle.com/java/technologies/downloads/#java8
FROM centos MAINTAINER zzyy<zzyybs@126.com>ENV MYPATH /usr/localWORKDIR $MYPATH#安装vim编辑器RUN yum -y install vim#安装ifconfig命令查看网络IPRUN yum -y install net-tools#安装java8及lib库RUN yum -y install glibc.i686RUN mkdir /usr/local/java#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/#配置java环境变量ENV JAVA_HOME /usr/local/java/jdk1.8.0_171ENV JRE_HOME $JAVA_HOME/jreENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATHENV PATH $JAVA_HOME/bin:$PATHEXPOSE 80CMD echo $MYPATHCMD echo "success--------------ok"CMD /bin/bash
docker build -t centosjava8:1.5 .
docker run -it centosjava8:1.5 /bin/bash
仓库名和标签都是<none>的镜像,俗称dangling image
构建一个虚悬镜像1 vim Dockerfile
from ubuntu CMD echo 'action is success'2 docker build .
docker images ls -f dangling=true
FROM ubuntu MAINTAINER zzyy<zzyybs@126.com>ENV MYPATH /usr/localWORKDIR $MYPATHRUN apt-get updateRUN apt-get install net-tools#RUN apt-get install -y iproute2#RUN apt-get install -y inetutils-pingEXPOSE 80CMD echo $MYPATHCMD echo "install inconfig cmd into ubuntu success--------------ok"CMD /bin/bash构建镜像
docker build -t 新镜像名字:TAG
运行镜像
docker run -it 新镜像名字:TAG
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- nryq.cn 版权所有 赣ICP备2024042798号-6
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务