系统集成性能容器

容器宿主机、镜像如何进行调优?

容器宿主机如何调优?
容器镜像如何调优?

参与3

1同行回答

晓风晓风其它用友网络
 宿主机调优容器与宿主机的内核关系:共享内核docker容器共享宿主机OS的内核docker容器视为一个进程docker容器的资源配额受docker引擎和宿主机OS限制  在宿主机OS进行内核优化操作,优化docker容器的内存。性能工具 (Linux Performance Tools-full) 从 Linux 内核的各个...显示全部

 宿主机调优

容器与宿主机的内核关系:共享内核

  • docker容器共享宿主机OS的内核
  • docker容器视为一个进程
  • docker容器的资源配额受docker引擎和宿主机OS限制  

在宿主机OS进行内核优化操作,优化docker容器的内存。

性能工具 (Linux Performance Tools-full) 从 Linux 内核的各个子系统出发,列出了我们在对各个子系统进行性能分析时,可使用的工具,涵盖了监测、分析、调优等性能优化的方方面面。

对比上面的性能工具(Linux Performance Tools-full)图,下图的优势在于:把具体的工具同性能指标结合了起来,同时从不同的层次去描述了性能瓶颈点的分布,实用性和可操作性更强一些。系统层的工具分为CPU、内存、磁盘(含文件系统)、网络四个部分,工具集同性能工具(Linux Performance Tools-full)图中的工具基本一致。组件层和应用层中的工具构成为:JDK 提供的一些工具 + Trace 工具 + dump 分析工具 + Profiling 工具等。

 docker镜像优化:

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
收起
互联网服务 · 2020-06-19
浏览2063

提问者

张张
系统架构师指趣网络科技
擅长领域: 云计算容器一体化运维

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2020-06-17
  • 关注会员:2 人
  • 问题浏览:3944
  • 最近回答:2020-06-19
  • X社区推广