Dockerfile 构建应用
构建 Python Web 应用镜像
bash
# 使用官方 Python 基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制当前目录下的文件到工作目录
COPY . .
# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt
# 暴露端口
EXPOSE5000
# 定义环境变量
ENV FLASK_APP=app.py
ENV FLASK_ENV=production
# 启动命令
CMD ["flask", "run", "--host=0.0.0.0"]
这个 Dockerfile 的执行步骤如下:
- 使用
python:3.9-slim
作为基础镜像,这是一个轻量级的 Python 环境。 - 设置工作目录为
/app
。 - 将当前目录的所有文件复制到容器的
/app
目录。 - 运行
pip install
安装依赖包。 - 声明容器运行时监听的端口为
5000
。 - 设置两个环境变量,指定 Flask 应用入口和运行环境。
- 最后定义容器启动时执行的命令。
构建镜像的命令:
bash
docker build -t my-python-app .
运行容器的命令:
bash
docker run -d -p 5000:5000 my-python-app
构建 Node.js 应用镜像
bash
# 使用官方 Node.js 基础镜像
FROM node:16-alpine
# 设置工作目录
WORKDIR /usr/src/app
# 复制 package.json 和 package-lock.json
COPY package*.json ./
# 安装依赖
RUN npm install
# 复制所有源代码
COPY . .
# 构建应用
RUN npm run build
# 暴露端口
EXPOSE3000
# 启动命令
CMD ["npm", "start"]
这个 Dockerfile 的执行步骤如下:
- 使用
node:16-alpine
作为基础镜像,这是一个基于 Alpine Linux 的 Node.js 环境。 - 设置工作目录为
/usr/src/app
。 - 先复制
package.json
和package-lock.json
文件,这样可以利用 Docker 的缓存层。 - 运行
npm install
安装依赖。 - 复制所有源代码到容器中。
- 运行构建命令。
- 声明容器运行时监听的端口为
3000
。 - 定义容器启动时执行的命令。
构建镜像的命令:
bash
docker build -t my-node-app .
运行容器的命令:
bash
docker run -d -p 3000:3000 my-node-app
构建 Nginx 静态网站镜像
bash
# 使用官方 Nginx 基础镜像
FROM nginx:alpine
# 删除默认的 Nginx 配置
RUN rm -rf /etc/nginx/conf.d/default.conf
# 复制自定义配置
COPY nginx.conf /etc/nginx/conf.d/
# 复制静态网站文件
COPY dist/ /usr/share/nginx/html/
# 暴露端口
EXPOSE 80
# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]
这个 Dockerfile 的执行步骤如下:
- 使用
nginx:alpine
作为基础镜像,这是一个轻量级的 Nginx 环境。 - 删除默认的 Nginx 配置文件。
- 复制自定义的 Nginx 配置文件到容器中。
- 将构建好的静态网站文件复制到 Nginx 的默认网站目录。
- 声明容器运行时监听的端口为
80
。 - 定义容器启动时执行的命令,以前台模式运行 Nginx。
需要准备一个 nginx.conf
配置文件,例如:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
}
}
构建镜像的命令:
bash
docker build -t my-static-site .
运行容器的命令:
bash
docker run -d -p 8080:80 my-static-site