Docker入门

一、 核心概念:快速理解 Docker 是什么
  1. Docker 的定义与核心价值

    • 是什么 :一个用于开发、发布和运行应用程序的开放平台。它允许你将应用程序及其所有依赖项(库、环境变量、配置文件等)打包到一个标准化的单元中,这个单元就是镜像

    • 解决了什么痛点:环境不一致问题。"在我的机器上能跑,为什么在你的机器上就跑不起来?" Docker 通过容器化技术,确保了应用在任何拥有 Docker 环境的机器上都能以完全相同的方式运行。

  2. 镜像与容器的关系(核心!)

    • 镜像 :一个只读的模板 ,类似于面向对象编程中的"类"。它包含了运行应用所需的文件系统、代码、库和环境变量。例如:nginx 镜像、python:3.8-slim 镜像。

    • 容器 :镜像的一个运行实例,类似于由"类"创建出来的"对象"。容器是隔离的、可执行的进程。你可以创建、启动、停止、移动或删除一个容器。容器在镜像的基础上,增加了一个可写的薄薄一层。

  3. Docker 与虚拟机的本质区别

    特性 Docker 容器 虚拟机
    虚拟化层级 操作系统级 硬件级
    启动速度 秒级 分钟级
    性能损耗 极低,接近原生 较高
    磁盘占用 通常为 MB 级别 通常为 GB 级别
    隔离性 进程级别隔离 完整的系统隔离
    运行原理 共享主机操作系统内核 每个 VM 都有自己的完整操作系统
二、 环境准备:快速搭建你的 Docker 游乐场
  1. 安装 Docker

    • Windows/macOS :前往 Docker Desktop 官网 下载安装包。安装后可能需要重启电脑。

    • Linux (Ubuntu 示例)

bash 复制代码
# 更新软件包索引
sudo apt update
# 安装依赖
sudo apt install apt-transport-https ca-certificates curl software-properties-common
# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 添加 Docker 软件源
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 安装 Docker
sudo apt update
sudo apt install docker-ce
# 将当前用户加入 docker 组,避免每次使用 sudo
sudo usermod -aG docker $USER
# 注销并重新登录使组权限生效

验证安装与配置加速器

  • 验证安装
bash 复制代码
docker --version
# 运行经典 hello-world 容器
docker run hello-world
  • 如果看到欢迎信息,说明安装成功!

  • 配置国内镜像加速器(重要!提升拉取镜像速度)

    • 阿里云:注册阿里云账号,进入"容器镜像服务" -> "镜像工具" -> "镜像加速器",按照操作文档配置。

    • DaoCloudhttps://docker.m.daocloud.io

    • 配置方法:编辑 Docker 配置文件(以 Linux 为例,Docker Desktop 在设置中直接修改)

bash 复制代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://your-mirror.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
三、 基础操作:从拉取到运行你的第一个容器
docker pull nginx:latest
  1. 运行容器

    bash 复制代码
    # -d: 后台运行
    # -p 80:80: 将主机的 80 端口映射到容器的 80 端口
    # --name my_nginx: 给容器起一个名字
    docker run -d -p 80:80 --name my_nginx nginx

    现在,打开浏览器访问 http://localhost,你应该能看到 Nginx 的欢迎页面!

  2. 管理容器

    • 查看运行中的容器docker ps

    • 查看所有容器(包括已停止的)docker ps -a

    • 查看容器日志docker logs my_nginx

    • 进入容器内部(就像 SSH 到一台服务器)

      bash 复制代码
      docker exec -it my_nginx /bin/bash
      # 现在你就在容器的 Linux 环境里了,可以执行 ls, cat 等命令
      # 输入 'exit' 退出
    • 停止容器docker stop my_nginx

    • 启动已停止的容器docker start my_nginx

    • 删除容器docker rm my_nginx (需先停止) 或 docker rm -f my_nginx (强制删除运行中的容器)

四、 实战案例:将你的 Python Flask 应用容器化
  1. 准备应用文件
    创建一个项目目录,例如 my_flask_app,并在其中创建两个文件:

    • app.py (你的 Flask 应用)

      python 复制代码
      from flask import Flask
      app = Flask(__name__)
      
      @app.route('/')
      def hello():
          return '<h1>Hello, Dockerized Flask App!</h1>'
      
      if __name__ == '__main__':
          app.run(host='0.0.0.0', port=5000) # 注意:必须绑定到 0.0.0.0
    • requirements.txt (声明依赖)

      python 复制代码
      flask==2.0.1
  2. 编写 Dockerfile(构建镜像的蓝图)
    在同一个目录下创建 Dockerfile 文件(无后缀):

    python 复制代码
    # 使用官方的 Python 轻量级镜像作为基础
    FROM python:3.8-slim
    
    # 设置容器内的工作目录
    WORKDIR /app
    
    # 先将依赖文件复制到工作目录(利用 Docker 缓存层)
    COPY requirements.txt .
    
    # 安装 Python 依赖
    RUN pip install --no-cache-dir -r requirements.txt
    
    # 将当前目录下的所有文件复制到容器的 /app 目录
    COPY . .
    
    # 声明容器运行时暴露的端口
    EXPOSE 5000
    
    # 定义容器启动时执行的命令
    CMD ["python", "app.py"]
  3. 构建镜像并运行

    • 构建镜像 (注意最后有一个点 .,表示当前目录是构建上下文):

      bash 复制代码
      docker build -t my_flask_app:latest .
    • 运行容器

      bash 复制代码
      docker run -d -p 5000:5000 --name my_running_flask_app my_flask_app
    • 访问应用 :打开浏览器访问 http://localhost:5000,你将看到你的 Flask 应用在容器中运行了!

五、 数据与网络管理
  1. 数据持久化:挂载数据卷
    容器内的数据是临时的,容器删除数据就没了。数据卷用于持久化数据。

    • 挂载主机目录

      bash 复制代码
      # 将主机的 /path/on/host 目录挂载到容器的 /path/in/container 目录
      docker run -v /path/on/host:/path/in/container nginx
    • 使用命名卷(Docker 管理路径)

      bash 复制代码
      docker volume create my_volume
      docker run -v my_volume:/path/in/container nginx
  2. 网络:容器互联

    • 创建自定义网络

      bash 复制代码
      docker network create my_app_net
    • 将容器连接到指定网络

      bash 复制代码
      docker run -d --name my_web --network my_app_net nginx
      docker run -d --name my_db --network my_app_net redis

      现在,my_web 容器可以直接通过主机名 my_db 来访问 redis 容器,无需知道其 IP 地址。

六、 常用命令速查表
命令 说明
docker images 列出所有本地镜像
docker rmi <image_id> 删除指定镜像
docker stop <container> 停止容器
docker start <container> 启动容器
docker rm -f <container> 强制删除容器
docker system prune 清理所有停止的容器、未使用的网络和构建缓存
docker logs -f <container> 实时查看容器日志
docker stats 实时查看容器资源占用(CPU、内存)
七、 进阶学习路径建议
  1. Docker Compose :用于定义和运行多容器应用。用一个 docker-compose.yml 文件就能管理整个应用栈(Web、DB、Cache 等),是开发环境的利器。

  2. 生产环境部署

    • Docker Swarm:Docker 原生的集群管理工具,相对简单。

    • Kubernetes:容器编排领域的事实标准,功能强大,学习曲线较陡。

  3. 安全最佳实践

    • 尽量使用官方认证的基础镜像。

    • 在 Dockerfile 中使用非 root 用户运行应用进程。

    • 定期扫描镜像中的安全漏洞。

    • 最小化镜像体积,减少攻击面。

相关推荐
ALex_zry2 小时前
Docker容器运维与故障排查实战手册
运维·docker·容器
haofafa3 小时前
Docker极简入门实战大纲
运维·docker·容器
生活爱好者!4 小时前
效率高!开源协作 Wiki 与文档管理平台 NAS一键部署docmost
运维·网络·docker·容器·开源
ACP广源盛139246256735 小时前
GSV1201D(2201D)#ACP@DisplayPort 1.2 转 HDMI 1.4 转换器(带嵌入式 MCU)
单片机·嵌入式硬件·电脑·音视频
q***T5835 小时前
Docker文本处理开发
运维·docker·容器
biubiubiu07065 小时前
给Docker设置代理
运维·docker·容器
Hellc0075 小时前
Docker网段与阿里云RDS内网冲突:深度分析与解决方案
阿里云·docker·容器
h***83935 小时前
Docker测试框架使用指南
运维·docker·容器
7***n756 小时前
Docker镜像瘦身
运维·docker·容器