
🍃 予枫 :个人主页
📚 个人专栏 : 《Java 从入门到起飞》《读研码农的干货日常》
💻 Debug 这个世界,Return 更好的自己!
引言
作为程序员,不管是日常开发、测试部署,还是入门云原生,Docker都是绕不开的核心工具。但很多新手刚接触时,总会混淆"虚拟化"与"容器化",安装Docker踩坑不断,面对镜像、容器的操作无从下手,更不懂底层的资源限制与隔离原理。今天就从基础出发,用通俗的语言+实操命令,带你吃透虚拟化与Docker的核心知识点,避开入门雷区,为后续云原生学习筑牢基础~ 觉得有用的小伙伴,麻烦点赞收藏,后续持续更新Docker进阶内容!
文章目录
- 引言
- 一、虚拟化VS容器化:新手必懂的核心区别
- 二、Docker安装:不同系统一键搞定(避坑版)
-
- [2.1 Linux系统(CentOS 7/8,最常用)](#2.1 Linux系统(CentOS 7/8,最常用))
- [2.2 Linux系统(Ubuntu)](#2.2 Linux系统(Ubuntu))
- [2.3 Windows/Mac系统](#2.3 Windows/Mac系统)
- 三、Docker核心操作:镜像与容器生命周期管理
-
- [3.1 镜像核心操作(常用命令)](#3.1 镜像核心操作(常用命令))
- [3.2 容器核心操作(常用命令)](#3.2 容器核心操作(常用命令))
- [3.3 实操演示:启动一个Nginx容器](#3.3 实操演示:启动一个Nginx容器)
- 四、端口映射:容器与宿主机的"桥梁"
- 五、Docker底层核心:Cgroups与Namespace(极简解析)
-
- [5.1 Namespace:实现资源隔离("隔离墙")](#5.1 Namespace:实现资源隔离(“隔离墙”))
- [5.2 Cgroups:实现资源限制("资源管家")](#5.2 Cgroups:实现资源限制(“资源管家”))
- 六、结尾总结
一、虚拟化VS容器化:新手必懂的核心区别
很多新手刚接触Docker时,都会有一个疑问:虚拟化和容器化到底有啥不一样?为啥现在都在用容器化,而不是传统虚拟化?其实两者核心目标都是"资源隔离与复用",但实现方式和适用场景差异极大,用一张表就能快速分清:
| 对比维度 | 传统虚拟化(如VMware、KVM) | 容器化(如Docker) |
|---|---|---|
| 隔离级别 | 硬件级隔离(虚拟出完整操作系统) | 进程级隔离(共享宿主机内核) |
| 启动速度 | 慢(分钟级,需启动完整OS) | 快(秒级,仅启动单个进程) |
| 资源占用 | 高(需占用大量内存、磁盘) | 低(共享宿主机资源,轻量级) |
| 部署难度 | 复杂(需配置完整OS、依赖) | 简单(打包镜像,一键部署) |
| 适用场景 | 需独立OS环境(如多系统测试) | 开发部署、微服务、云原生 |
简单来说,传统虚拟化就像"租整套房子",不管用不用得到,都要占着整套资源;而容器化就像"租单间",共享房子的公共设施(宿主机内核),只占自己需要的空间,高效又灵活。
重点提醒:Docker属于容器化技术,但容器化≠Docker,还有Podman、LXC等其他容器化工具,只是Docker生态最完善、使用最广泛,新手优先学Docker准没错~
二、Docker安装:不同系统一键搞定(避坑版)
学会了核心区别,接下来就是实操环节------Docker安装。很多新手卡在安装步骤,要么版本不兼容,要么依赖缺失,这里整理了Windows、Mac、Linux(CentOS/Ubuntu)三大系统的最简安装命令,复制粘贴就能用,避开所有常见坑。
2.1 Linux系统(CentOS 7/8,最常用)
Linux是Docker的最优运行环境,命令如下(全程root权限操作):
bash
# 1. 卸载旧版本(若有)
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 2. 安装必要依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3. 设置阿里云镜像源(加速下载,避免官方源卡顿)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 4. 安装Docker CE(社区版,免费且够用)
yum install -y docker-ce docker-ce-cli containerd.io
# 5. 启动Docker并设置开机自启
systemctl start docker
systemctl enable docker
# 6. 验证安装成功(出现版本信息即成功)
docker --version
2.2 Linux系统(Ubuntu)
bash
# 1. 卸载旧版本
apt-get remove docker docker-engine docker.io containerd runc
# 2. 安装必要依赖
apt-get update
apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
# 3. 添加阿里云GPG密钥
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -
# 4. 设置阿里云镜像源
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 5. 安装并启动Docker
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker
# 6. 验证安装
docker --version
2.3 Windows/Mac系统
Windows和Mac推荐安装「Docker Desktop」,步骤极简:
- 访问Docker官方下载地址:https://www.docker.com/products/docker-desktop(需注册Docker账号,免费)
- 下载对应系统的安装包,双击安装(Windows需开启Hyper-V,Mac需开启虚拟化支持)
- 安装完成后,启动Docker Desktop,状态栏出现Docker图标即启动成功
- 打开终端(Windows用PowerShell,Mac用终端),输入
docker --version验证
避坑提醒:Windows 10家庭版不支持Hyper-V,需安装WSL2后再安装Docker Desktop,否则会启动失败;Mac M1/M2芯片需下载对应ARM版本的Docker Desktop。
三、Docker核心操作:镜像与容器生命周期管理
安装完成后,重点掌握「镜像」和「容器」的操作------镜像就是容器的"模板"(比如Ubuntu镜像、Nginx镜像),容器就是镜像运行后的"实例",两者的生命周期管理是Docker基础的核心。
3.1 镜像核心操作(常用命令)
bash
# 1. 拉取镜像(从Docker Hub拉取,示例:拉取Ubuntu 20.04镜像)
docker pull ubuntu:20.04 # :20.04是版本号,不写默认latest(最新版)
# 2. 查看本地所有镜像
docker images
# 3. 删除指定镜像(根据镜像ID删除,镜像ID可通过docker images查看)
docker rmi 镜像ID/镜像名称:版本号
# 4. 搜索镜像(从Docker Hub搜索镜像,示例:搜索Nginx镜像)
docker search nginx
小技巧:Docker Hub官方镜像下载速度可能较慢,可配置阿里云镜像加速器,评论区留言"加速器",获取详细配置步骤~ 记得点赞收藏,避免后续找不到!
3.2 容器核心操作(常用命令)
bash
# 1. 新建并启动容器(最常用,示例:启动Ubuntu容器并进入交互模式)
docker run -it --name my-ubuntu ubuntu:20.04 /bin/bash
# 说明:-it 表示交互模式,--name 给容器命名,/bin/bash 进入容器终端
# 2. 查看所有容器(运行中+已停止)
docker ps -a
# 3. 启动/停止/重启容器(根据容器ID或容器名称操作)
docker start 容器ID/容器名称
docker stop 容器ID/容器名称
docker restart 容器ID/容器名称
# 4. 进入已运行的容器(示例:进入my-ubuntu容器)
docker exec -it my-ubuntu /bin/bash
# 5. 删除指定容器(需先停止容器,或加-f强制删除)
docker rm 容器ID/容器名称 # 停止后删除
docker rm -f 容器ID/容器名称 # 强制删除(运行中也能删)
# 6. 查看容器日志(排查容器运行问题)
docker logs 容器ID/容器名称
3.3 实操演示:启动一个Nginx容器
用一个实际案例巩固操作,启动Nginx容器并访问:
bash
# 1. 拉取Nginx镜像
docker pull nginx
# 2. 启动Nginx容器,映射端口(后续讲解端口映射)
docker run -d -p 80:80 --name my-nginx nginx
# 说明:-d 表示后台运行,-p 80:80 表示端口映射
# 3. 查看容器是否运行
docker ps
# 4. 访问Nginx(本地访问:浏览器输入http://localhost,服务器访问:http://服务器IP)
操作成功后,浏览器会显示Nginx的默认页面,至此,你已经掌握了Docker的基础实操!
四、端口映射:容器与宿主机的"桥梁"
很多新手启动容器后,发现无法访问容器内的服务(比如上面的Nginx),核心原因是「容器与宿主机是隔离的」,需要通过「端口映射」打通两者的通信,也就是把宿主机的端口和容器内的端口绑定。
端口映射核心语法
bash
docker run -p 宿主机端口:容器内端口 镜像名称
- 示例:
docker run -d -p 80:80 nginx- 宿主机端口:80(外部访问时用的端口)
- 容器内端口:80(Nginx默认运行端口)
- 意思是:外部访问宿主机的80端口,会自动转发到容器内的80端口,从而访问到Nginx服务。
常见场景
- 本地开发:启动MySQL容器,映射端口
-p 3306:3306,本地代码就能连接容器内的MySQL - 服务器部署:启动Tomcat容器,映射端口
-p 8080:8080,外部就能通过服务器IP:8080访问Tomcat
注意:宿主机端口不能被占用,若80端口已被其他服务占用,可换其他端口,比如
-p 8081:80,访问时用http://localhost:8081。
五、Docker底层核心:Cgroups与Namespace(极简解析)
学会了实操,再了解一下Docker的底层原理------Docker能实现进程级隔离和资源限制,核心依赖Linux内核的两个特性:Cgroups和Namespace,不用深入源码,理解核心作用即可(为后续云原生学习打基础)。
5.1 Namespace:实现资源隔离("隔离墙")
Namespace的作用是「隔离进程的可见范围」,让每个容器都以为自己是"独立的系统",互不干扰,常见的Namespace类型:
- PID Namespace:隔离进程ID(容器内的PID从1开始,和宿主机PID不冲突)
- Network Namespace:隔离网络(每个容器有自己的网卡、IP、端口,和宿主机网络隔离)
- Mount Namespace:隔离文件系统(容器内的文件系统和宿主机隔离,互不影响)
- User Namespace:隔离用户(容器内的root用户,在宿主机上可能只是普通用户,保证安全)
简单来说,Namespace就像给每个容器建了一道"隔离墙",容器内的进程看不到墙外的宿主机和其他容器,实现了独立的运行环境。
5.2 Cgroups:实现资源限制("资源管家")
Cgroups(Control Groups)的作用是「限制容器能使用的资源」,避免某个容器占用过多资源(比如CPU、内存),导致其他容器或宿主机卡顿,核心功能:
- CPU限制:限制容器使用的CPU核心数、CPU使用率(比如限制只能用1个核心)
- 内存限制:限制容器能使用的最大内存(比如限制最多用1G内存)
- 磁盘IO限制:限制容器的磁盘读写速度
- 网络带宽限制:限制容器的网络带宽
示例:启动容器时限制CPU和内存
bash
# 限制容器最多使用1个CPU核心,最大内存1G
docker run -d -p 80:80 --name my-nginx -m 1g --cpus 1 nginx
通过Cgroups,我们可以合理分配资源,保证多个容器在同一台宿主机上稳定运行。
六、结尾总结
本文从基础概念出发,带你吃透了虚拟化与容器化的核心区别,掌握了Docker的安装、镜像/容器生命周期管理、端口映射等实操技巧,还简单了解了Docker底层的Cgroups和Namespace原理,全程干货无废话,适合Docker新手入门。