使用Dockerfile定制化镜像和私有网盘案例

使用Dockerfile定制化镜像和私有网盘案例

使用Dockerfile定制化镜像和私有网盘案例_第1张图片

镜像的分层结构是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的基础语法

我这里简单的介绍一下。

使用Dockerfile定制化镜像和私有网盘案例_第2张图片

构建私有网盘镜像案例

案例的网址 [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 [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的镜像

# 编写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;"]

定制化mysql镜像

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

你可能感兴趣的:(使用Dockerfile定制化镜像和私有网盘案例)