使用Dockerfile定制化镜像和私有网盘案例
镜像的分层结构是docker很重要的环节,如同搭积木一样。
也主要是为了节省资源。
理解docker build的工作原理
-
Docker在运行的时候分为Docker引擎,和客户端工具。docker的引擎提供一组API,被称为Docker Remote Api 而如果,docker命令这样的客户端工具,则是通过Api与Docker引擎交互完成的。
-
当我们进行镜像构建的时候,并非所有的定制都是依靠RUN指令来完成,也会优势使用ADD 命令,COPY命令,而docker build 命令构建镜像,其实并非在本地构建而是在服务端上构建,也就是docker引擎中构建,
-
会有一个问题,在客户端上,服务端框架中,如何获得本地文件
-
这里就引入了上下文的概念,当构建时候,用户会指定构建镜像上下文,docker build 命令收到这个路径的指令,会将上下文的内容打包,给到Docker.
-
Docker引擎收到这个上下文后,展开就会获得构建镜像所需要的一切文件
-
实际上Dockerfile的文件名并不是一定是Dockerfile ,和处于文件中,但是我们为了规范因此大家会默认使用Dockerfile为文件名,放置于构建镜像的目录中。
dockerfile的基础语法
我这里简单的介绍一下。
构建私有网盘镜像案例
案例的网址 [filebrowser/filebrowser: 📂 Web File Browser](https://github.com/filebrowser/filebrowser)
大家可以玩玩
[root@docker-110 filebrowser-master]# docker build -t filebrower:v10 .
编写一个centos系统的镜像
# base image
FROM centos:7.8.2003# MAINTAINER
MAINTAINER xxx@zz.com# 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的镜像
# 编写nginx的镜像
# base image
FROM centos7.8:v1MAINTAINER zz@zz.comRUN 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-develWORKDIR /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.confEXPOSE 80CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
定制化mysql镜像
FROM centos:7.8:v1
MAINTAINER zz@zz.comCOPY 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.rpmWORKDIR /root
RUN yum remove mysql-libs -y
RUN yum -y install *.rpmADD initialization.sql /root/initialization.sql
ADD my.cnf /etc/my.cnf
ADD setup.sh /root/setup.shRUN yum clean all && rm -rf /root/*.rpm && chmod +x /root/setup.shEXPOSE 3306CMD ["/root/setup.sh"]