现在很多企业使用容器化技术部署应用,绕不开的docker技术,在生产环境docker常用操作总结。参考:https://juejin.cn/post/7259275893796651069
1. 尽可能使用官方镜像
在docker hub 官方 使用后面带有 DOCKER OFFICIAL IMAGE
标签的镜像,有更好的安全性保障。
2. 使用镜像指定版本
bash
FROM ubuntu
默认使用latest
标签,拉取最新镜像,镜像稳定性以及兼容性可能有问题,需要经过充分测试,才可以使用。
3. 构建镜像使用缓存,提高构建效率
bash
FROM node:current-alpine3.18
WORKDIR /app
COPY myapp /app
RUN npm install --production
CMD ["node", "src/index.js"]
1)镜像每一层中都会被Docker缓存。当重新构建镜像时,如果Dockerfile没有更改,Docker将只使用缓存的层来构建镜像。
2)在 Docker 中一旦一个层发生变化,所有后续或下游的层也必须重新创建。
3)在 Dockerfile 中,将我们的命令按照从最不经常变化到最经常变化的顺序进行排序,以利用缓存并优化镜像构建速度。
4. docker的多阶段构建
一般来讲,
第一阶段:用于构建服务的编译环境,生成二进制文件
第二阶段:运行二进制文件,加载运行期间的配置文件以及其他依赖文件(例如证书)
5. 使用最低权限的用户
Dockerfile没有指定用户时,默认使用root用户运行,在容器内使用root用户运行应用程序将使攻击者更容易提升主机的权限。可以使用普同样用户权限。
bash
...
# 创建demo 组和 demo 用户
RUN groupadd -r demo && useradd -g demo demo
# 设置 demo 用户的权限
RUN chown -R demo:demo /app
# 切换用户
user demo
cmd node index.js