Docker容器化部署实战教程:从入门到项目部署

文章最后更新时间:2026-04-13 16:24:19

Docker是现代软件开发和运维的核心工具,它让”在我机器上能跑”不再是问题。本文用通俗易懂的语言,讲解什么是Docker、为什么要用它,以及如何将一个真实项目容器化部署

一、为什么需要Docker?

在传统部署方式中,开发人员经常遇到这样的问题:”在我的电脑上明明能运行,部署到服务器上就不行了。”这通常是因为开发环境和生产环境的差异导致的。

传统部署的问题:

  • 环境不一致:开发机是Windows,服务器是Linux,依赖版本不同
  • 依赖冲突:项目A需要Python 2.7,项目B需要Python 3.9,无法共存
  • 部署复杂:新同事入职,光配置环境就要几天
  • 资源浪费:一台服务器只能跑一个项目,利用率低

Docker的解决方案:

Docker将应用程序和它的所有依赖打包成一个”容器”,这个容器可以在任何安装了Docker的机器上运行,无论这台机器是Windows、Linux还是Mac。

类比:就像集装箱运输货物——无论是什么货物(服装、电子产品、食品),都用同一个标准的集装箱,在任何码头都能用同样的设备装卸。

二、Docker核心概念

镜像(Image)
镜像相当于应用程序的”模板”或”蓝图”。镜像是一个只读的模板,包含了运行应用程序所需的所有内容:代码、运行时环境、系统工具、库文件等。

类比:就像装好系统的U盘镜像,复制到任何电脑上都能启动。

容器(Container)
容器是镜像的”运行实例”。从镜像创建出来的正在运行的程序就是容器。一个镜像可以创建多个容器,它们相互独立。

类比:镜像是一个菜谱,容器是用这个菜谱做出来的菜。可以同时做多份。

仓库(Registry/Hub)
仓库是存储和分发镜像的地方。最常用的是Docker Hub,类似GitHub,但存储的是Docker镜像。

三、Docker安装

在Windows上安装Docker

Windows 10/11用户推荐安装Docker Desktop:

  1. 下载Docker Desktop:docker.com/products/docker-desktop
  2. 运行安装程序(需要开启WSL2或Hyper-V)
  3. 安装完成后,打开Docker Desktop
  4. 打开PowerShell或命令行,运行 docker –version 验证

在Linux(Ubuntu)上安装Docker

sudo apt update
sudo apt install docker.io -y
sudo systemctl start docker
sudo systemctl enable docker
docker --version

在Mac上安装Docker

下载Docker Desktop for Mac并安装,操作与Windows类似。

四、Docker基本命令

运行第一个容器

docker run hello-world

这行命令会从Docker Hub拉取hello-world镜像并运行,如果看到欢迎信息,说明Docker安装成功。

常用命令速查

docker ps              # 查看正在运行的容器
docker ps -a           # 查看所有容器(包括已停止的)
docker images          # 查看本地镜像列表
docker pull nginx      # 从Docker Hub拉取nginx镜像
docker stop container_id  # 停止容器
docker rm container_id    # 删除容器
docker rmi image_name     # 删除镜像
docker logs container_id  # 查看容器日志

五、将项目容器化(实战)

假设你有一个Node.js项目,需要用Docker容器化部署。

Step 1:创建Dockerfile

在项目根目录创建名为 Dockerfile 的文件:

FROM node:18-alpine

WORKDIR /app

COPY package*.json ./

RUN npm install --production

COPY . .

EXPOSE 3000

CMD ["node", "server.js"]

解释:

  • FROM node:18-alpine:基于Node.js 18镜像(alpine是精简版Linux)
  • WORKDIR /app:在容器内创建/app工作目录
  • COPY package*.json ./:复制依赖文件
  • RUN npm install:安装依赖
  • COPY . .:复制项目代码
  • EXPOSE 3000:声明容器端口
  • CMD:容器启动命令

Step 2:创建.dockerignore文件

在项目根目录创建 .dockerignore 文件,排除不需要打包的文件:

node_modules
.git
.env
*.log
dist

Step 3:构建镜像

docker build -t my-node-app .

-t my-node-app:给镜像起个名字叫my-node-app

. :当前目录作为构建上下文

Step 4:运行容器

docker run -d -p 3000:3000 --name my-app my-node-app

-d:后台运行

-p 3000:3000:将容器的3000端口映射到主机的3000端口

–name my-app:给容器起个名字

Step 5:验证运行

docker ps
curl http://localhost:3000

六、Docker Compose多容器编排

实际项目中,通常有多个服务(如Node.js + MySQL + Redis)。用Docker Compose可以一键启动所有服务。

创建 docker-compose.yml

version: '3'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DB_HOST=db
    depends_on:
      - db
  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: myapp
    volumes:
      - db_data:/var/lib/mysql
volumes:
  db_data:

启动所有服务

docker-compose up -d

停止所有服务

docker-compose down

七、Docker最佳实践

  • 使用多阶段构建:减少最终镜像体积。构建阶段用完整工具链,运行阶段只复制必要文件。
  • 不要用root运行容器:创建专门的用户运行应用,提高安全性。
  • 减少镜像层数:合并RUN指令,减少镜像体积。
  • 使用.dockerignore:排除不必要的文件,减小构建上下文。
  • 设置健康检查:让Docker知道容器是否正常运行。

八、常见问题

Q:Docker和虚拟机有什么区别?
A:虚拟机包含完整的操作系统,体积大(GB级)、启动慢。Docker容器共享宿主机内核,体积小(MB级)、启动快(秒级)。

Q:Docker容器里的数据如何持久化?
A:使用数据卷(Volumes)将容器内的数据目录映射到宿主机,即使容器删除,数据依然保留。

Q:容器内的数据如何备份?
A:使用 docker cp 命令将容器内的文件复制出来,或者使用数据卷的备份功能。

Q:如何查看Docker容器占用了多少资源?
A:使用 docker stats 查看所有容器的CPU、内存、网络使用情况。

总结

Docker是现代开发和运维的必备技能。核心概念:镜像(模板)、容器(运行实例)、仓库(分发平台)。基本流程:写Dockerfile → 构建镜像 → 运行容器。掌握了这些,你就已经入门Docker了。

瀚煜云提供服务器托管及容器化部署技术支持服务。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容