容器与宿主机的内核关系:共享内核
在宿主机OS进行内核优化操作,优化docker容器的内存。
性能工具 (Linux Performance Tools-full) 从 Linux 内核的各个子系统出发,列出了我们在对各个子系统进行性能分析时,可使用的工具,涵盖了监测、分析、调优等性能优化的方方面面。
对比上面的性能工具(Linux Performance Tools-full)图,下图的优势在于:把具体的工具同性能指标结合了起来,同时从不同的层次去描述了性能瓶颈点的分布,实用性和可操作性更强一些。系统层的工具分为CPU、内存、磁盘(含文件系统)、网络四个部分,工具集同性能工具(Linux Performance Tools-full)图中的工具基本一致。组件层和应用层中的工具构成为:JDK 提供的一些工具 + Trace 工具 + dump 分析工具 + Profiling 工具等。
1.优化镜像应该主要有以下几个方面:
1 选择最精简的基础镜像
2 减少镜像的层数
3 清理镜像构建的中间产物
4 注意优化网络需求
5 尽量去用构建缓存
举例(以nginx为例):
1、未优化
$ ls
Dockerfile nginx-1.15.8.tar.gz westos.repo
$ cat Dockerfile
FROM rhel7
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
ADD nginx-1.15.9.tar.gz /mnt
COPY westos.repo /etc/yum.repos.d/westos.repo
RUN rpmdb --rebuilddb
RUN yum install -y gcc pcre-devel zlib-devel make
WORKDIR /mnt/nginx-1.15.9
RUN ./configure --prefix=/usr/local/nginx
RUN make
RUN make install
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
创建镜像并查看镜像大小
docker build -t nginx:v1 .
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v1 c4712dcc2963 About a minute ago 295MB
rhel7 latest 0a3eb3fde7fd 5 years ago 140MB
2、 清理中间缓存并尽量减少镜像层数
vim Dockerfile
FROM rhel7
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
ADD nginx-1.15.9.tar.gz /mnt
COPY westos.repo /etc/yum.repos.d/westos.repo
WORKDIR /mnt/nginx-1.15.9
RUN rpmdb --rebuilddb && yum install -y gcc pcre-devel zlib-devel make && yum clean all && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx && make && make install
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
创建镜像并查看镜像大小
docker build -t nginx:v2 .
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v2 2b20e470e31c 25 seconds ago 252MB
nginx v1 c4712dcc2963 11 minutes ago 295MB
rhel7 latest 0a3eb3fde7fd 5 years ago 140MB
3、使用多阶段构建方法
我们需要的只不过是编译之后的软件包,那么我们就可以在一容器编译安装以后,将编译安装之后的安装包拷贝到另一个容器中,这样就减小了不需要的开销。并且将压缩包删除。
vim Dockerfile
FROM rhel7 as build # 这一阶段只需需要完成nginx的编译
ADD nginx-1.15.9.tar.gz /mnt
COPY westos.repo /etc/yum.repos.d/westos.repo
WORKDIR /mnt/nginx-1.15.9
RUN rpmdb --rebuilddb && yum install -y gcc pcre-devel zlib-devel make && yum clean all && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx && make && make install && rm -fr /mnt/nginx-1.15.8
FROM rhel7 # 创建镜像,将编译好的文件直接拿过来用
COPY --from=build /usr/local/nginx /usr/local/nginx
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
创建镜像并查看镜像大小
docker build -t nginx:v3 .
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v3 e5b903942033 19 seconds ago 141MB
nginx v2 2b20e470e31c 11 minutes ago 252MB
nginx v1 c4712dcc2963 22 minutes ago 295MB
rhel7 latest 0a3eb3fde7fd 5 years ago 140MB
4、减少底层base的大小
使用一个最基础的系统环境镜像。然后从nginx进行中将运行nginx所需要的依赖库都导入到基础的系统镜像中,就可以满足运行nginx的要求。做到最小化。
docker load -i distroless.tar ##一个基础的系统环境镜像
docker load -i nginx.tar ##nginx的进行,
vim Dockerfile
FROM nginx:1.16 as base
# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ARG Asia/Shanghai
RUN mkdir -p /opt/var/cache/nginx && \\\\
cp -a --parents /usr/lib/nginx /opt && \\\\
cp -a --parents /usr/share/nginx /opt && \\\\
cp -a --parents /var/log/nginx /opt && \\\\
cp -aL --parents /var/run /opt && \\\\
cp -a --parents /etc/nginx /opt && \\\\
cp -a --parents /etc/passwd /opt && \\\\
cp -a --parents /etc/group /opt && \\\\
cp -a --parents /usr/sbin/nginx /opt && \\\\
cp -a --parents /lib/x86_64-linux-gnu/libpcre.so.* /opt && \\\\
cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \\\\
cp -a --parents /lib/x86_64-linux-gnu/libc.so.* /opt && \\\\
cp -a --parents /lib/x86_64-linux-gnu/libdl.so.* /opt && \\\\
cp -a --parents /lib/x86_64-linux-gnu/libpthread.so.* /opt && \\\\
cp -a --parents /lib/x86_64-linux-gnu/libcrypt.so.* /opt && \\\\
cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \\\\
cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \\\\
cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtime
FROM gcr.io/distroless/base
COPY --from=base /opt /
EXPOSE 80
VOLUME ["/usr/share/nginx/html"]
ENTRYPOINT ["nginx", "-g", "daemon off;"]
创建镜像并查看镜像大小
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v4 cb475e8f4412 7 seconds ago 23.7MB
nginx v3 e5b903942033 19 minutes ago 141MB
nginx 1.16 ac44715da54a 4 weeks ago 109MB
rhel7 latest 0a3eb3fde7fd 5 years ago 140MB
gcr.io/distroless/base latest 9a255d5fe262 49 years ago 16.8MB
收起