什么是Docker

Docker是一个开源的应用容器引擎,允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中。容器化技术解决了“在我的机器上能运行”的问题,确保应用在不同环境中表现一致。

为什么使用Docker

传统虚拟机需要完整的操作系统,资源占用高。Docker容器直接运行在宿主机内核上,启动快、资源消耗低。容器镜像可共享、版本化管理,简化了开发、测试和部署流程。

核心概念解析

  • 镜像(Image):只读模板,包含运行应用所需的文件系统。类似面向对象中的“类”。
  • 容器(Container):镜像的运行实例,具有可写层。类似“对象”。
  • 仓库(Registry):存储和分发镜像的服务,Docker Hub是官方公共仓库。

安装Docker

支持Windows、macOS和主流Linux发行版。以Ubuntu为例:

sudo apt update
sudo apt install docker.io
sudo systemctl enable --now docker
sudo usermod -aG docker $USER  # 允许当前用户直接运行docker

Windows/macOS用户需下载Docker Desktop,安装后需重启终端。

第一个容器

运行Nginx服务器测试安装:

docker pull nginx:latest
docker run -d -p 8080:80 --name my_nginx nginx

访问http://localhost:8080可见Nginx欢迎页。-d指定后台运行,-p映射端口,--name设置容器名称。

构建自定义镜像

通过Dockerfile定义镜像。创建包含Python应用的镜像示例:

# 基于官方Python镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install -r requirements.txt

# 复制应用代码
COPY . .

# 启动命令
CMD ["python", "app.py"]

构建镜像:

docker build -t my-python-app .

容器数据管理

容器默认 ephemeral(临时存储),重要数据需持久化:

# 使用卷(Volume)持久化数据库数据
docker volume create db_data
docker run -d -v db_data:/var/lib/mysql mysql

# 绑定挂载(Bind Mount)开发时同步代码
docker run -v $(pwd):/app python-app

多容器协作

使用Docker Compose管理多个关联容器。示例docker-compose.yml

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

启动服务:

docker compose up -d

常用命令速查

docker ps                 # 查看运行中容器
docker images             # 列出本地镜像
docker stop <container>   # 停止容器
docker rm <container>     # 删除容器
docker rmi <image>        # 删除镜像
docker logs <container>   # 查看容器日志

实战建议

  1. 生产环境使用特定标签而非latest
  2. 限制容器资源使用(CPU/内存)
  3. 定期清理无用镜像和容器释放空间
  4. 使用.dockerignore文件排除无关文件
  5. 学习最佳实践安全加固容器

通过以上步骤可快速掌握Docker核心用法,实现开发环境的标准化和部署的自动化。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐