Skip to content

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.jsonpackage-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
最近更新