dockerfile
dockerfile:创建镜像,创建自定义的镜像,包括配制文件,挂载点,对外暴露的端口,设置环境变量
1.docker的创建镜像的方式
1.基于已有镜像进行创建
根据官方提供的镜像源,创建镜像,然后拉起容器,是一个白板,只能提供基础的功能,扩展性的功能还是需要自定义(进入容器进行操作)
docker pull centos:7
docker run -itd --name test1 centos:7 /bin/bash
2.基于模版进行创建
docker import ubuntu-14 -- 名字
3.dockerfile
联合文件系统(UnionFS)docker镜像的基础,
镜像通过分层来进行集成,特性:一次同时加载多个文件系统,但是从外面来看,就是一个文件系统。
docker镜像实际上就是由一层一层的文件系统组成,这种层级的文件系统就是UnionFS
每一层都是layers,每一层都包含文件系统的一部分,这些层次叠加在一起,最终形成的就是rootfs
2.dockerfile的结构
1.基础镜像信息
2.维护者信息
3.镜像的操作指令
4.容器启动时,执行的命令
nginx:定义好了容器执行的命令 /bin/bash覆盖了容器内的标准输出
3.docker的语法
FROM:指定基础镜像信息,指定容器的操作系统。
MAINTAINER:指定维护者信息(可有可无)
RUN:在基础的镜像上执行的命令。每个run就是一层,分层越多,镜像就越大
ENTRYPOINT:设置容器运行是的默认命令(容器内部运行的主程序)
CMD:指定容器运行时的默认命令(docker run /bin/bash 后面加上了其他的命令,cmd的指令将会被覆盖)
EXPOSE:暴露端口(指定容器的运行端口)
ENV:设置环境变量可以被RUN命令使用(声明容器运行需要的环境变量)
ADD:复制,解压,解压不支持.zip和tar 只能是tar.gz tar.br2 支持url地址解压和复制(解压)
COPY:复制文件,不能解压,而且只能复制本地文件,文件要和dockerfile在一个目录(挂房推荐复制用copy
VOLUME:创建一个容器内的挂载点,既可以为宿主机挂载,也可以供容器挂载,
USER:设置运行镜像时使用用户名或者UUID
WORKDIR:为后续指令设置的工作目录
ONRULD:这个环境可以被其他镜像引用,需要这个命令
ARG:铲傪,用于创建容器时,传递参数,ENV用于容器运行时设置的环境变量
4.CMD和END的区别
都是可以作为容器时的默认命令
区别:
1.cmd可以把参数传给ENTRYPOINT
2.多个entrypoint和多个cmd只会运行最后一个(一个dockerfile当中只会有一个)
3. entrypoint的指令不会被覆盖,CMD的指令如果在docker run的后面加上输出,会被覆盖
4.entrypoint和cmd的指令在容器启动时执行,都会成为容器的主进程,主进程负责接收信号,处理容器的生命周期,容器也将终止运行
5.RUN命令的优化
主要是减少镜像的层数,把多个run命名写在一块。
&& 符号:前一个命令执行成功才会执行下一个命令。
RUN yum -y install nginx && make -j 4 && make install
;符号:不管前一个命令是否成功,后面的命令都会执行
RUN yum -y install nginx;make -j 4;make install
||:如果前面的命令执行失败,才会执行后面的操作
RUN yum -y install nginx||make -j 4||make install
反斜杠\:换行 ,提高可读性
RUN yum -y install nginx \
&& make -j 4 \
&& make install
6.copy和add的区别
copy和add都可以把本地文件复制到镜像中,但是官方推荐如果是复制,使用copy
区别:
ADD可以解压,如何是一个压缩文件,add在复制之后自动解压(tar.gz和tar.bz2)可以支持URL下载源文件,通过URL的文件只能支持下载,但是不能解压
copy只能复制不能解压,而且只能是本地文件,不支持URL路径。
7.基于centos7 构建一个apache的dockerfile(编译安装)
cd /opt
mkdir apache
拖进去三个包
vim Dockerfile
#基础镜像的指定
FROM centos:7
#作者信息
MAINTAINER "this is my apache <guoqi>"
RUN yum -y install 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 .
docker run -itd --name httpd1 -p 1314:80 apache:centos
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!