dockerfile建構容器指定挂載點和鏡像優化
- 一.dockerfile建構容器指定挂載點
- 二.鏡像優化
-
- 2.1 未優化前
- 2.2 優化一:把不需要的指令丢入/dev/null
- 2.2 優化二:減少RUN建構
- 2.3 優化三:多階段建構
- 2.4優化四:使用更為輕量級的linux發行版
一.dockerfile建構容器指定挂載點
dockfike建構nginx鏡像
[[email protected] ~]# mkdir nginx
[[email protected] ~]# cd nginx && vim nginx/Dockerfile
FROM centos:7
MAINTAINER THIS IS NGINX IMAGE
RUN yum -y update
RUN yum install -y pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.2.tar.gz /usr/local/src
WORKDIR /usr/local/src
WORkDIR nginx-1.12.2
VOLUME ["/usr/local/nginx/html"] #在容器中建立一個挂載點
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
CMD nginx #不加[]是shell寫法
[[email protected] nginx]# ls #上傳nginx-1.12.2.tar.gz包
Dockerfile nginx-1.12.2.tar.gz
[[email protected] nginx]# docker build -f Dockerfile -t centos:v1 . #建構鏡像
[[email protected] nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v1 3197c931c8b7 4 minutes ago 673MB
centos 7 8652b9f0cb4c 9 months ago 204MB
[[email protected] nginx]# docker run -d -P nginx:v1 #啟動容器
56ff8520680c6a65005c4752876207e58055e1f513b06812b0a14bf56859d657
[[email protected] nginx]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
56ff8520680c nginx:v1 "/bin/sh -c nginx" 7 seconds ago Up 6 seconds 0.0.0.0:49155->80/tcp, :::49155->80/tcp practical_jang
[[email protected] nginx]# docker inspect 56ff8520680c #檢視容器資訊

指定挂載目錄
二.鏡像優化
以建構nginx為例
2.1 未優化前
FROM centos:7
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make
ADD nginx-1.12.2.tar.gz /mnt
WORKDIR /mnt/nginx-1.12.2
#關閉debug日志
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN ./configure --prefix=/usr/local/nginx
RUN make
RUN make install
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
2.2 優化一:把不需要的指令丢入/dev/null
[[email protected] nginx]# mkdir -p nginx/nginx_v1 nginx/nginx_v2 nginx/nginx_v3
[[email protected] nginx]# cp nginx-1.12.2.tar.gz nginx/nginx_v1
[[email protected] nginx]# cd nginx_v1/
[[email protected] nginx_v1]# ls
Dockerfile nginx-1.12.2.tar.gz
[[email protected] nginx_v1]# docker build -f Dockerfile -t nginx:v1 .
FROM centos:7
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && yum clean all
ADD nginx-1.12.2.tar.gz /mnt
WORKDIR /mnt/nginx-1.12.2
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN ./configure --prefix=/usr/local/nginx &> /dev/null
RUN make &> /dev/null
RUN make install &> /dev/null
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
2.2 優化二:減少RUN建構
RUM指令比較多得時候
FROM centos:7
ADD nginx-1.12.2.tar.gz /mnt
WORKDIR /mnt/nginx-1.12.2
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && \
yum clean all && \
sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && \
./configure --prefix=/usr/local/nginx &> /dev/null && \
make &> /dev/null && make install &> /dev/null &&\
rm -rf /mnt/nginx-1.12.2
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
2.3 優化三:多階段建構
使用FRON指令生成多個鏡像,将指定的鏡像做為其他鏡像的基礎鏡像環境來建構
FROM centos:7 as build
ADD nginx-1.12.2.tar.gz /mnt
WORKDIR /mnt/nginx-1.12.2
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && \
yum clean all && \
sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && \
./configure --prefix=/usr/local/nginx &> /dev/null && \
make &> /dev/null && make install &> /dev/null &&\
rm -rf /mnt/nginx-1.12.2
FROM centos:7
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
COPY --from=build /usr/local/nginx /usr/local/nginx
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
2.4優化四:使用更為輕量級的linux發行版
debian和alpine