🚀 01-Docker零基础入门到企业实战
一、容器与虚拟机的区别
虚拟机运行应用时,调用请求需要经过虚拟化软件,再访问宿主机操作系统;
Docker 容器可直接使用宿主机操作系统,省去虚拟化层开销。
容器核心优势
-
敏捷、高性能:无需虚拟化中转,资源调用效率更高
-
环境隔离:不同应用、依赖互不干扰
Docker 设计思想:类比集装箱
服务器 = 货运大船
容器 = 标准集装箱
-
各类应用及依赖统一封装,相互隔离
-
一台服务器可运行多个不同环境应用,无需单独划分主机 / 虚拟机
-
解决应用环境冲突、端口冲突等问题
Docker 解决的实际业务问题
-
环境冲突:.NET、PHP 等不同技术栈应用,依赖、端口易冲突,容器可轻量隔离,比虚拟机开销更小、成本更低。
-
环境迁移难题:开发、测试、生产系统版本不一致(Ubuntu / CentOS),镜像可完整打包运行环境,一次封装,到处运行。
-
资源利用率高:虚拟机常驻占用空闲内存,Docker 可合理利用服务器内存资源。
-
经典痛点:开发环境正常,测试 / 生产环境报错(JDK、Tomcat、脚本版本不匹配),引发沟通问题、影响上线效率。
镜像 \& 容器概念
-
镜像:把代码、运行依赖(JDK、Tomcat、系统文件等)整体打包的文件包。
-
容器:镜像运行后的实例,对外提供服务。
-
特性:镜像支持迁移、备份、存储、快速交付,保证环境强一致性。
二、为什么学习 Docker
传统部署痛点:环境不一致导致跨环境运行异常,排障繁琐。
Docker 核心价值:
-
完整打包应用 + 所有依赖,环境完全统一
-
一次打包,任意 Docker 环境都可运行
-
启动、部署速度快,适合持续交付
三、Docker 基础介绍
1. 什么是 Docker
Docker 是 2013 年诞生的开源容器引擎,基于 Go 语言开发,隶属于 Linux 基金会,遵循 Apache 2.0 协议。
作用:将应用及依赖打包为可移植镜像,以沙箱模式运行容器,容器之间相互隔离、无直接调用。
2. Docker 优点
-
速度快:启动、停止、重启均为秒级 / 毫秒级
-
部署敏捷:裸机部署简单,运维成本低
-
轻量化:不额外加装完整操作系统
-
高密度:单台服务器可运行数百甚至上千个容器
-
低成本:开源免费
3. Docker 版本区分
-
docker-ce:社区版(免费,个人 / 中小企业使用) -
docker-ee:商业版(付费,企业级商用)
4. Docker 缺点
所有容器共用 Linux 内核,在资源隔离、安全层面存在一定局限性。
四、CentOS7 环境安装 Docker
环境信息
主机 IP:192.168.40.180
系统:CentOS7.6 \~ CentOS7.9
配置:4Gib 内存 / 4vCPU
1. 基础环境初始化
1.1 设置主机名
hostnamectl set-hostname master1 && bash
1.2 关闭防火墙 \& Iptables
# 关闭并禁用 firewalld
systemctl stop firewalld && systemctl disable firewalld
# 安装、关闭并禁用 iptables
yum install iptables-services -y
service iptables stop && systemctl disable iptables
# 清空防火墙规则
iptables -F
1.3 关闭 SELinux
# 临时关闭
setenforce 0
# 永久关闭(重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 查看状态(显示 Disabled 即为成功)
getenforce
1.4 时间同步
# 安装时间同步工具
yum install -y ntp ntpdate
# 立即同步时间
ntpdate cn.pool.ntp.org
# 配置定时任务:每小时同步一次时间
crontab -e
# 写入内容
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
# 重启定时任务服务
systemctl restart crond
1.5 安装基础依赖包
yum install -y wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack
2. 安装 Docker CE
2.1 配置阿里云 Docker YUM 源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.2 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
2.3 安装 Docker CE
yum install docker-ce -y
3. 启动 Docker 服务
# 启动并设置开机自启
systemctl start docker && systemctl enable docker
# 查看运行状态(显示 active(running) 即正常)
systemctl status docker
# 查看 Docker 版本
docker version
4. 开启内核转发与网络模块
Docker 网络依赖桥接转发,需配置内核参数。
4.1 加载内核模块 \& 配置参数
# 加载 br_netfilter 模块
modprobe br_netfilter
# 写入内核配置
cat > /etc/sysctl.d/docker.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# 生效配置
sysctl -p /etc/sysctl.d/docker.conf
4.2 设置开机自动加载模块
# 创建开机加载脚本
cat > /etc/rc.sysinit <<EOF
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules ; do
[ -x \$file ] && \$file
done
EOF
# 创建模块自启文件
cat > /etc/sysconfig/modules/br_netfilter.modules <<EOF
modprobe br_netfilter
EOF
# 授权
chmod 755 /etc/sysconfig/modules/br_netfilter.modules
# 查看模块是否加载
lsmod |grep br_netfilter
4.3 重启 Docker
systemctl restart docker
说明:
net.ipv4.ip_forward = 1开启 IP 数据包转发,否则容器内应用无法被外网访问。
5. 配置 Docker 镜像加速器
官方仓库拉取镜像速度慢,配置国内加速器提升下载速度。
5.1 编辑加速器配置文件
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors":["https://y8y6vosv.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]
}
EOF
5.2 生效配置
systemctl daemon-reload
systemctl restart docker
常用国内加速器地址
-
阿里云:专属镜像地址(需登录阿里云容器镜像服务获取)
-
Docker 中国官方:
https://registry.docker-cn.com -
科大镜像:
https://docker.mirrors.ustc.edu.cn -
网易云:
http://hub-mirror.c.163.com -
DaoCloud:
http://f1361db2.m.daocloud.io
五、Docker 基础命令
1. 镜像操作
1.1 搜索镜像
docker search centos
字段说明:
-
NAME:镜像名称 -
DESCRIPTION:镜像描述 -
STARS:点赞数 -
OFFICIAL:是否为官方镜像 -
AUTOMATED:是否自动构建
1.2 拉取(下载)镜像
docker pull centos
1.3 查看本地镜像
docker images
1.4 镜像导出为离线包
docker save -o centos.tar.gz centos
1.5 导入离线镜像包
docker load -i centos.tar.gz
1.6 删除镜像
docker rmi -f centos:latest
2. 容器操作
2.1 交互式启动容器(前台运行,退出即停止)
docker run --name=hello -it centos /bin/bash
参数说明:
-
--name:指定容器名称 -
-i:交互式运行 -
-t:分配虚拟终端 -
/bin/bash:进入 bash 终端
输入 exit 退出容器。
2.2 守护进程方式启动(后台运行)
docker run --name=hello1 -td centos
-d:后台守护进程运行
2.3 进入后台运行的容器
docker exec -it hello1 /bin/bash
2.4 查看容器
# 查看正在运行的容器
docker ps
# 查看所有容器(包含已停止)
docker ps -a
2.5 启停容器
# 停止容器
docker stop hello1
# 启动已停止的容器
docker start hello1
2.6 删除容器
# 强制删除容器
docker rm -f hello1
2.7 查看帮助
docker --help
六、实战:Docker 部署 Nginx 服务
1. 启动容器并做端口映射
# -p 端口映射:容器80端口随机映射到宿主机端口
docker run --name nginx -p 80 -itd centos
2. 进入容器
docker exec -it nginx /bin/bash
3. 查看容器 IP
ip addr
# 示例容器IP:172.17.0.3
4. 容器内配置 YUM 源并安装 Nginx
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/CentOS-vault-8.5.2111.repo
yum install wget -y
yum install nginx -y
yum install vim-enhanced -y
5. 编写静态页面
mkdir /var/www/html -p
cd /var/www/html/
cat > index.html <<EOF
<html>
<head>
<title>nginx in docker</title>
</head>
<body>
<h1>hello,My Name is ZHappy</h1>
</body>
</html>
EOF
6. 修改 Nginx 配置,指定页面路径
vim /etc/nginx/nginx.conf
# 修改配置项
root /var/www/html/;
7. 启动 Nginx
/usr/sbin/nginx
8. 访问服务
8.1 查看宿主机映射端口(宿主机终端执行)
docker ps | grep nginx
# 例:宿主机端口 49153 -> 容器80端口
8.2 访问测试
# 方式1:宿主机IP+映射端口
curl http://192.168.40.180:49153
# 方式2:直接访问容器IP+端口
curl 172.17.0.3:80
访问流量走向
客户端访问 宿主机 IP: 映射端口 → 转发至 容器 IP: 服务端口 → 访问容器内应用