广东省建设注册中心网站,一网通办 上海,几十张照片合成视频,电子商务热门岗位Dockerfile#xff1a;创建镜像#xff0c;创建自定义的镜像
包括配置文件#xff0c;挂载点#xff0c;对外暴露的端口#xff0c;设置环境变量 Docker的创建镜像方式#xff1a; 1.基于已经镜像进行创建
根据官方号已提供的镜像源#xff0c;创建镜像#xff0c;然…Dockerfile创建镜像创建自定义的镜像
包括配置文件挂载点对外暴露的端口设置环境变量 Docker的创建镜像方式 1.基于已经镜像进行创建
根据官方号已提供的镜像源创建镜像然后拉起容器是一个白板只能提供基础的功能扩展性的功能还是要自定义进入容器操作 2.基于模版进行创建
模版网址https://download.openvz.org/template/precreated/
演示乌班图
导入镜像 创建容器 3.Dockerfile
联合文件系统UnionFSdocker镜像的基础
镜像是通过分层来进行集成特性可以一次可以同时加载多个文件系统但是从外面来看也就是对用户来说就是一个文件系统。
Docker镜像实际上就是由一层一层的文件系统组成这种层级的文件系统就是unionFS
每一层都是layer每一层都包含文件系统的一部分这些层次叠加在一起最终形成的就是rootfs
rootfs是什么呢
看图 Bootfs:宿主机提供的内核和引导程序
Roofs:就是容器的操作系统在dockerfile中我们可以自己指定
Rootfs是多个镜像和应用镜像结合起来的只读层镜像实际上就是一个只读文件
容器基于镜像实例运行起来之后容器就变成可读可写层 在dockerfile当中每创建一个指令都是一个镜像层镜像层会被缓存和复用
1-6
1-4失败
1-4将直接完成继续运行5-6
一旦有一镜像失败那么所有的镜像层都会失败镜像也不会创建 镜像层是不可变的你在某一层当中添加一个新的命令但是下一层删除了指令镜像中基于这个指令创建的文件依然存在但是在容器中看不见 touch 123Rf -rf 123 Dockerdile的核心
用户个性化定制docker的镜像 Dockerfile的结构
基础镜像信息维护者信息镜像的操作指令容器启动时执行的命令 前段时间为什么nginx看不见日志 nginx定义好了容器的指令/bin/bash,覆盖了容器内的标准输出 Dockerfile的语法
都是大写
FROM指定基础镜像信息指定容器的操作系统
MAINTANER指定维护者信息可有可无
RUN在基础的镜像上执行命令每个RUN就是一层分层越多镜像越大
ENTRYPOINT设置容器运行时的默认命令容器内部运行的主程序
CMD指定容器运行时的默认命令docker run /bin/bash后面加了其他命令cmd的指令将会被覆盖
EXPOSE暴露端口指定容器的运行端口
ENV设置容器的环境变量环境变量可以被run命令使用声明容器运行需要的环境变量
ADD复制解压。解压是不支持.zip和.tar 只支持tar.gz 和tar.bz2可以支持url地址解压和复制主要作用就两字解压
COPY复制文件不能解压而且只能复制本地文件文件要和dockerfile在一个目录里 官方推荐复制用COPY
VOLUME创建一个容器内的挂载点既可以为宿主机挂载也可以供容器挂载
USER设置运行镜像时使用的用户或者UID可以不加可有可无
WORKDIR为后续指令设置的工作目录
ONBUILD这个镜像可以被其他镜像引用需要这个命令
ARG和EVN一样传参用与创建容器时传递参数ENV可用于容器运行时的设置的环境变量 CMD和ENTRYPOINT的区别
思考题
这两个都是可以作为容器启动时的默认命令
CMD可以把参数传给ENTRYPOINT多个ENTRYPOINT和多个CMD只会运行最后一个一个dockerfile当中只会有一个ENTRYPOINT和CMDENTRYPONIT的指令不会被覆盖CMD的指令如果在docker run的后面加上输出会被覆盖ENTRYPONIT和CMD的指令在容器启动时执行都会成为容器的主进程主进程负责接收信号处理容器的生命周期主进程退出容器也将终止运行 演示一个dockerfile vim DockerfileDocker要大写 docker build -t centos7:test .
docker run --name test3 centos7:test Run命令的优化
主要是减少镜像的层数把多个run命令写在一块
符号
RUN yum -y install nginx make -j 4 make install
前一个命令执行成功才会执行下一个命令
符号
RUN yun -y install nginx; make -j 4; make install
不管前面一个命令是否成功后面的命令都会执行
||
如果前面的命令执行失败才会执行后面的操作
反斜杠\:换行
RUN yun -y install nginx\ make -j 4\
make install
可读性更高 COPY和add区别
COPY和add都可以把本地文件复制到镜像中但是官方推荐如果复制使用COPY
区别
Add可以解压压缩如果是一个压缩文件add在复制之后会自动解压tar.gz和tar.bz2可以支持URL下载源文件支持下载但是不能解压通过URL拷贝的文件无法自动解压
COPY只能复制不能解压而且只能是本地文件不支持URL路径 如和构建一个更高级的dockerfile:
需求基于centos7构建一个Apache的dockerfile编译安装
必须要与dockerfile在同一目录否则解压报错 FROM centos:7
MAINTAINER this is my diy apache wang
RUN yum install -y gcc gcc-c make pcre pcre-devel expat-devel perl
ADD apr-1.6.2.tar.gz /opt/
ADD apr-util-1.6.0.tar.gz /opt/
ADD httpd-2.4.29.tar.bz2 /opt/
RUN mv /opt/apr-1.6.2 /opt/httpd-2.4.29/srclib/apr mv /opt/apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util \
cd /opt/httpd-2.4.29/ \
./configure --prefix/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi \
make -j 4 make install
EXPOSE 80
CMD [/usr/local/httpd/bin/apachectl,-D,FOREGROUND] docker build -t apache:centos .
构建dockerfile 层次 镜像已经创建好 创建容器后面不用加/bin/bash 否则将会覆盖CMD
docker run -itd --name test3 http -p 1314:80 apache:centos 如何基于镜像进行二次构建
通过二次构建可以大大减少镜像的空间补充
第一层 二层构建 重新构建一下 结果显示比原来小了200多MB