镜像的分层结构是docker很重要的环节,如同搭积木一样。
也主要是为了节省资源。
Docker在运行的时候分为Docker引擎,和客户端工具。docker的引擎提供一组API,被称为Docker Remote Api 而如果,docker命令这样的客户端工具,则是通过Api与Docker引擎交互完成的。
当我们进行镜像构建的时候,并非所有的定制都是依靠RUN指令来完成,也会优势使用ADD 命令,COPY命令,而docker build 命令构建镜像,其实并非在本地构建而是在服务端上构建,也就是docker引擎中构建,
会有一个问题,在客户端上,服务端框架中,如何获得本地文件
这里就引入了上下文的概念,当构建时候,用户会指定构建镜像上下文,docker build 命令收到这个路径的指令,会将上下文的内容打包,给到Docker.
Docker引擎收到这个上下文后,展开就会获得构建镜像所需要的一切文件
实际上Dockerfile的文件名并不是一定是Dockerfile ,和处于文件中,但是我们为了规范因此大家会默认使用Dockerfile为文件名,放置于构建镜像的目录中。
我这里简单的介绍一下。
案例的网址 [filebrowser/filebrowser: Web File Browser](https://github.com/filebrowser/filebrowser)
大家可以玩玩
[root@docker-110 filebrowser-master]# docker build -t filebrower:v10 .
# base image
FROM centos:7.8.2003
# MAINTAINER
MAINTAINER [email protected]
# add epel
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak \
&& curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo \
&& sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo \
&& curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo \
&& yum clean all && yum makecache
# Necessary packages
RUN yum install -y wget gcc gcc-c++ glibc make autoconf openssl openssl-devel ntpdata crontabs
# change timzone to Asia/Shanghai
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 编写nginx的镜像
# base image
FROM centos7.8:v1
MAINTAINER [email protected]
RUN useradd -M -s /sbin/nologin www
ADD nginx-1.19.2.tar.gz /usr/local/src
# install Dependency package
RUN yum install openssl openssl-devel libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel libx
ml2 libxml2-dev libxslt-devel
WORKDIR /usr/local/src/nginx-1.19.2
# make && make install
RUN ./configure --user=www --group=www --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module -
-with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_fi
lter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_m
odule --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_au
th_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degrada
tion_module --with-http_stub_status_module && make && make install
# configure
COPY nginx.conf /usr/local/nginx/conf/nginx.conf
COPY fastcgi_params /usr/local/nginx/conf/fastcgi_params
RUN mkdir /usr/local/nginx/conf/conf.d
COPY www.conf /usr/local/nginx/conf/conf.d/www.conf
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
FROM centos:7.8:v1
MAINTAINER [email protected]
COPY mysql-community-common-5.7.31-1.el7.x86_64.rpm /root/mysql-community-common-5.7.31-1.el7.x86_64.rpm
COPY mysql-community-libs-compat-5.7.31-1.el7.x86_64.rpm /root/mysql-community-libs-compat-5.7.31-1.el7.x86_64.rpm
COPY mysql-community-client-5.7.31-1.el7.x86_64.rpm /root/mysql-community-client-5.7.31-1.el7.x86_64.rpm
COPY mysql-community-libs-5.7.31-1.el7.x86_64.rpm /root/mysql-community-libs-5.7.31-1.el7.x86_64.rpm
COPY mysql-community-server-5.7.31-1.el7.x86_64.rpm /root/mysql-community-server-5.7.31-1.el7.x86_64.rpm
COPY postfix-2.10.1-9.el7.x86_64.rpm /root/postfix-2.10.1-9.el7.x86_64.rpm
WORKDIR /root
RUN yum remove mysql-libs -y
RUN yum -y install *.rpm
ADD initialization.sql /root/initialization.sql
ADD my.cnf /etc/my.cnf
ADD setup.sh /root/setup.sh
RUN yum clean all && rm -rf /root/*.rpm && chmod +x /root/setup.sh
EXPOSE 3306
CMD ["/root/setup.sh"]