10款AI论文辅助工具测评:本科生写作全流程指南
2026/10/27 2:48:01
Docker 是现代软件开发和部署的核心技术之一,它通过容器化技术彻底改变了应用程序的打包、分发和运行方式。本文将带你深入了解 Docker 的基本概念、核心组件和实际应用,帮助你掌握这一重要的容器化技术。
Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包到轻量级、可移植的容器中。与传统的虚拟机相比,Docker 容器更加轻便,启动更快,资源利用率更高。
传统虚拟机: 应用 -> 操作系统 -> Hypervisor -> 物理硬件 Docker容器: 应用 -> Docker Engine -> 操作系统 -> 物理硬件在 Ubuntu 上安装 Docker:
# 更新包索引sudoapt-getupdate# 安装必要的包sudoapt-getinstall\ca-certificates\curl\gnupg\lsb-release# 添加 Docker 官方 GPG 密钥sudomkdir-p /etc/apt/keyringscurl-fsSL https://download.docker.com/linux/ubuntu/gpg|sudogpg --dearmor -o /etc/apt/keyrings/docker.gpg# 设置仓库echo\"deb [arch=$(dpkg --print-architecture)signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs)stable"|sudotee/etc/apt/sources.list.d/docker.list>/dev/null# 安装 Docker Enginesudoapt-getupdatesudoapt-getinstalldocker-ce docker-ce-cli containerd.io docker-compose-plugindocker--versiondockerrun hello-world# 搜索镜像dockersearch nginx# 拉取镜像dockerpull nginx:latest# 查看本地镜像dockerimages# 删除镜像dockerrmi nginx# 运行容器dockerrun -d -p8080:80 --name my-nginx nginx# 查看运行中的容器dockerps# 查看所有容器(包括停止的)dockerps-a# 启动、停止、重启容器dockerstart my-nginxdockerstop my-nginxdockerrestart my-nginx# 进入容器dockerexec-it my-nginx /bin/bash# 查看容器日志dockerlogs my-nginxDockerfile 是构建 Docker 镜像的脚本文件,它包含了一系列指令来描述如何构建镜像。
# 示例:Node.js 应用的 Dockerfile FROM node:18-alpine # 设置工作目录 WORKDIR /app # 复制 package.json 和 package-lock.json COPY package*.json ./ # 安装依赖 RUN npm ci --only=production # 复制应用源代码 COPY . . # 暴露端口 EXPOSE 3000 # 创建非 root 用户 RUN addgroup -g 1001 -S nodejs RUN adduser -S nextjs -u 1001 # 设置文件权限 RUN chown -R nextjs:nodejs /app USER nextjs # 启动命令 CMD ["npm", "start"]FROM: 指定基础镜像RUN: 执行命令COPY: 复制文件到容器ADD: 类似 COPY,但支持远程 URL 和自动解压WORKDIR: 设置工作目录EXPOSE: 声明暴露端口CMD: 指定容器启动时执行的命令ENTRYPOINT: 配置容器启动时运行的命令# 构建镜像dockerbuild -t my-app:latest.# 指定 Dockerfile 路径dockerbuild -f Dockerfile.prod -t my-app:prod.创建一个简单的 Flask 应用:
app.py
fromflaskimportFlask app=Flask(__name__)@app.route('/')defhello():return'<h1>Hello from Docker!</h1><p>This is a Flask app running in Docker.</p>'@app.route('/health')defhealth():return{'status':'healthy'}if__name__=='__main__':app.run(host='0.0.0.0',port=5000,debug=True)requirements.txt
Flask==2.3.3Dockerfile
FROM python:3.11-slim # 设置工作目录 WORKDIR /app # 复制依赖文件 COPY requirements.txt . # 安装依赖 RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . # 暴露端口 EXPOSE 5000 # 启动命令 CMD ["python", "app.py"]# 构建镜像dockerbuild -t flask-app.# 运行容器dockerrun -d -p5000:5000 --name my-flask-app flask-app# 验证运行curlhttp://localhost:5000Docker Compose 是用于定义和运行多容器 Docker 应用的工具。
version:'3.8'services:web:build:.ports:-"5000:5000"volumes:-.:/appenvironment:-FLASK_ENV=developmentdepends_on:-redisredis:image:redis:alpineports:-"6379:6379"# 启动服务docker-composeup -d# 查看服务状态docker-composeps# 查看日志docker-composelogs# 停止服务docker-composedowndocker volume create my-volume-v /host/path:/container/path--tmpfs# 创建命名卷dockervolume create mysql-data# 使用命名卷运行 MySQLdockerrun -d\--name mysql-container\-eMYSQL_ROOT_PASSWORD=rootpassword\-v mysql-data:/var/lib/mysql\mysql:8.0# 检查卷dockervolumelsdockervolume inspect mysql-data# 创建自定义网络dockernetwork create my-network# 运行容器并连接到自定义网络dockerrun -d --network my-network --name web-server nginxdockerrun -d --network my-network --name app-server my-app# 查看网络dockernetworklsdockernetwork inspect my-networkFROM node:18-alpine # 创建应用用户 RUN addgroup -g 1001 -S appuser && \ adduser -S appuser -u 1001 -G appuser WORKDIR /app COPY package*.json ./ RUN npm ci --only=production && \ chown -R appuser:appuser /app USER appuser COPY --chown=appuser:appuser . . EXPOSE 3000 CMD ["npm", "start"]Docker 为我们提供了一种标准化的方式来打包、分发和运行应用程序。通过掌握 Docker 的基本概念和操作,你可以:
随着实践经验的积累,你将能够更好地利用 Docker 的强大功能来构建和管理现代化的应用程序。