第六篇:Dockerfile——把自己的程序做成镜像
【摘要】 一直使用:docker pull nginx当然没问题。但自己的程序怎么办?这时候就需要 Dockerfile。Dockerfile 是什么?简单来说:Dockerfile 是一份描述“如何制作 Docker 镜像”的配置文件。例如:FROM nginx:alpineCOPY ./html /usr/share/nginx/htmlEXPOSE 80CMD ["nginx", "-g", "...
一直使用:
docker pull nginx
当然没问题。
但自己的程序怎么办?
这时候就需要 Dockerfile。
Dockerfile 是什么?
简单来说:
Dockerfile 是一份描述“如何制作 Docker 镜像”的配置文件。
例如:
FROM nginx:alpine
COPY ./html /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
FROM
指定基础镜像:
FROM nginx:alpine
或者:
FROM node:22-alpine
WORKDIR
设置工作目录:
WORKDIR /app
之后很多操作都会以 /app 作为当前目录。
COPY
把项目文件复制进去:
COPY . .
也可以只复制需要的文件:
COPY package*.json ./
RUN
构建镜像时执行:
RUN npm install
注意:
RUN 是构建镜像的时候执行。
CMD
容器启动的时候执行:
CMD ["node", "server.js"]
所以:
RUN
构建阶段
CMD
运行阶段
千万不要搞混。
构建镜像
Dockerfile 写好之后:
docker build -t my-app:1.0 .
最后那个:
.
表示当前目录作为构建上下文。
.dockerignore
如果项目里面有:
node_modules
.git
.env
这些文件通常不应该直接进入构建上下文。
可以创建:
.dockerignore
内容:
node_modules
.git
.env
这样构建更干净,也更安全。
一个常见误区
很多人第一次写 Dockerfile 会:
COPY . .
RUN npm install
虽然能用,但并不一定是最佳实践。
后面讲镜像优化时,我们会看到为什么更推荐:
COPY package*.json ./
RUN npm ci
COPY . .
这样可以更好地利用 Docker 的构建缓存。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)