容器化开发运维:从 Docker 到 Kubernetes
一、Dockerfile 的组织与优化
1.1 初始 Dockerfile 及问题分析
假设我们有一个包含应用代码、数据库和缓存的应用栈,初始的 Dockerfile 可能如下:
FROM ubuntu
ADD . /proj
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y redis-server python python-pip mysql-server
ADD /proj/db/my.cnf /etc/mysql/my.cnf
ADD /proj/db/redis.conf /etc/redis/redis.conf
ADD https://example.com/otherteam/dep.tgz /tmp/
RUN -zxf /tmp/dep.tgz -C /usr/src
RUN pip install -r /proj/app/requirements.txt
RUN cd /proj/app ; python setup.py
CMD /proj/start-all-service.sh
这个 Dockerfile 存在一些问题:
- 一个容器承担了过多功能,没有遵循单一职责原则。
- 可能会将不必要的文件打包进镜像,增加镜像大小。
- 部分指令使用不够优化,如 ADD 指令。
超级会员免费看
订阅专栏 解锁全文
634

被折叠的 条评论
为什么被折叠?



