使用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"]