Docker入门到实践(一):Docker简介和安装
一、Docker是什么?
1.1 定义与核心概念
Docker是一个开源的容器化平台,通过将应用程序及其依赖(如代码、运行时、系统工具、库等)打包成独立的容器(Container),实现跨环境的快速部署和运行。其核心设计理念是”一次构建,到处运行”(Build Once, Run Anywhere),解决了传统开发中因环境差异导致的”在我机器上能运行”问题。
关键术语:
- 镜像(Image):容器的模板,包含运行应用所需的所有文件和配置(类似类定义)。
- 容器(Container):镜像的实例,是独立运行的进程(类似对象实例)。
- Dockerfile:定义镜像构建步骤的文本文件,包含基础镜像、依赖安装、环境变量等指令。
- Docker Hub:官方镜像仓库,提供海量预构建镜像(如Nginx、MySQL)。
1.2 为什么需要Docker?
传统部署的痛点
- 环境不一致:开发、测试、生产环境的系统版本、库依赖差异导致应用崩溃。
- 资源浪费:虚拟机(VM)需完整操作系统,占用大量资源(CPU、内存)。
- 部署效率低:手动配置环境耗时且易出错,难以快速扩展。
Docker的优势
- 轻量级:容器共享主机内核,无需独立OS,资源占用仅为VM的1/10。
- 隔离性:每个容器拥有独立文件系统、网络和进程空间,避免冲突。
- 可移植性:同一镜像可在开发、测试、生产环境无缝运行。
- 快速启动:容器启动时间以秒计,远快于虚拟机分钟级的启动。
1.3 典型应用场景
- 微服务架构:将大型应用拆分为多个独立容器,便于扩展和维护。
- 持续集成/持续部署(CI/CD):通过镜像自动化构建和测试环境。
- 多版本共存:同一主机运行不同版本的软件(如MySQL 5.7和8.0)。
- 云原生开发:与Kubernetes等编排工具结合,实现弹性伸缩。
二、Docker的工作原理
2.1 架构组成
Docker采用客户端-服务器(C/S)架构:
- Docker Daemon:后台服务,负责容器创建、运行和管理。
- Docker Client:命令行工具(
docker命令),用户通过其与Daemon交互。 - Docker Registry:镜像仓库(如Docker Hub),存储和分发镜像。
2.2 核心技术
- 命名空间(Namespaces):隔离进程、网络、文件系统等资源。
- 控制组(Cgroups):限制容器资源使用(CPU、内存)。
- 联合文件系统(UnionFS):分层存储镜像,实现高效构建和更新。
示例:构建一个简单的Node.js应用镜像
# 使用官方Node.js镜像作为基础FROM node:14# 创建工作目录WORKDIR /usr/src/app# 复制依赖文件并安装COPY package*.json ./RUN npm install# 复制应用代码COPY . .# 暴露端口EXPOSE 3000# 启动命令CMD ["node", "server.js"]
通过docker build -t my-node-app .命令构建镜像,docker run -p 3000:3000 my-node-app运行容器。
三、Docker安装指南
3.1 安装前准备
- 系统要求:
- Linux:内核版本≥3.10(推荐Ubuntu 20.04/CentOS 7+)。
- Windows:Windows 10/11 Pro及以上版本(需启用WSL2或Hyper-V)。
- macOS:macOS 12(Monterey)及以上版本。
- 推荐配置:至少4GB内存、双核CPU。
3.2 分系统安装步骤
3.2.1 Linux(Ubuntu示例)
- 卸载旧版本:
sudo apt-get remove docker docker-engine docker.io containerd runc
- 安装依赖:
sudo apt-get updatesudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
- 添加Docker官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 添加稳定版仓库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- 安装Docker Engine:
sudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.io
- 验证安装:
sudo docker run hello-world
输出
Hello from Docker!表示成功。
3.2.2 Windows
- 启用WSL2:
- 打开PowerShell(管理员)运行:
wsl --set-default-version 2
- 打开PowerShell(管理员)运行:
- 安装Docker Desktop:
- 从官网下载Windows版。
- 双击安装包,按向导完成安装。
- 配置资源限制:
- 启动Docker Desktop,进入
Settings > Resources,分配至少4GB内存和2核CPU。
- 启动Docker Desktop,进入
3.2.3 macOS
- 安装Docker Desktop:
- 从官网下载macOS版。
- 拖拽安装包到
Applications文件夹。
- 配置Kubernetes(可选):
- 进入
Preferences > Kubernetes,勾选Enable Kubernetes。
- 进入
3.3 安装后验证
- 查看版本:
docker version
应显示Client和Server版本信息。
- 运行测试容器:
docker run --rm alpine echo "Hello Docker"
输出
Hello Docker表示容器运行正常。
3.4 常见问题解决
- 权限问题(Linux):
- 将用户加入
docker组:sudo usermod -aG docker $USER
- 重启终端或执行
newgrp docker。
- 将用户加入
- 端口冲突:
- 运行容器时指定不同端口:
docker run -p 8080:80 nginx
- 运行容器时指定不同端口:
- 镜像拉取慢:
- 配置国内镜像源(如阿里云):
{"registry-mirrors": ["https://<your-id>.mirror.aliyuncs.com"]}
- 修改后重启Docker服务。
- 配置国内镜像源(如阿里云):
四、总结与下一步建议
4.1 核心收获
- 理解Docker的容器化理念及其与传统虚拟化的区别。
- 掌握Docker的核心组件(镜像、容器、Dockerfile)。
- 完成跨平台(Linux/Windows/macOS)的Docker安装与验证。
4.2 实践建议
- 从简单应用开始:尝试将现有项目容器化,编写Dockerfile。
- 学习常用命令:
docker ps:查看运行中的容器。docker images:列出本地镜像。docker-compose:管理多容器应用(后续章节详解)。
- 探索生态工具:
- Portainer:可视化Docker管理界面。
- Watchtower:自动更新容器镜像。
4.3 后续学习路径
- 第二篇:Docker基础命令与镜像管理。
- 第三篇:Docker Compose多容器编排。
- 第四篇:Docker与Kubernetes的集成实践。
通过本文,您已具备Docker的基础知识与实践能力。接下来,建议通过实际项目巩固所学,逐步掌握容器化开发的全流程。