搜索结果

×

搜索结果将在这里显示。

🚀 01-Docker零基础入门到企业实战

一、容器与虚拟机的区别

虚拟机运行应用时,调用请求需要经过虚拟化软件,再访问宿主机操作系统;
Docker 容器可直接使用宿主机操作系统,省去虚拟化层开销。

容器核心优势

  1. 敏捷、高性能:无需虚拟化中转,资源调用效率更高

  2. 环境隔离:不同应用、依赖互不干扰

Docker 设计思想:类比集装箱

服务器 = 货运大船
容器 = 标准集装箱

  • 各类应用及依赖统一封装,相互隔离

  • 一台服务器可运行多个不同环境应用,无需单独划分主机 / 虚拟机

  • 解决应用环境冲突、端口冲突等问题

Docker 解决的实际业务问题

  1. 环境冲突:.NET、PHP 等不同技术栈应用,依赖、端口易冲突,容器可轻量隔离,比虚拟机开销更小、成本更低。

  2. 环境迁移难题:开发、测试、生产系统版本不一致(Ubuntu / CentOS),镜像可完整打包运行环境,一次封装,到处运行

  3. 资源利用率高:虚拟机常驻占用空闲内存,Docker 可合理利用服务器内存资源。

  4. 经典痛点:开发环境正常,测试 / 生产环境报错(JDK、Tomcat、脚本版本不匹配),引发沟通问题、影响上线效率。

镜像 \& 容器概念

  • 镜像:把代码、运行依赖(JDK、Tomcat、系统文件等)整体打包的文件包。

  • 容器:镜像运行后的实例,对外提供服务。

  • 特性:镜像支持迁移、备份、存储、快速交付,保证环境强一致性

二、为什么学习 Docker

传统部署痛点:环境不一致导致跨环境运行异常,排障繁琐。
Docker 核心价值:

  1. 完整打包应用 + 所有依赖,环境完全统一

  2. 一次打包,任意 Docker 环境都可运行

  3. 启动、部署速度快,适合持续交付

三、Docker 基础介绍

1. 什么是 Docker

Docker 是 2013 年诞生的开源容器引擎,基于 Go 语言开发,隶属于 Linux 基金会,遵循 Apache 2.0 协议。
作用:将应用及依赖打包为可移植镜像,以沙箱模式运行容器,容器之间相互隔离、无直接调用。

2. Docker 优点

  1. 速度快:启动、停止、重启均为秒级 / 毫秒级

  2. 部署敏捷:裸机部署简单,运维成本低

  3. 轻量化:不额外加装完整操作系统

  4. 高密度:单台服务器可运行数百甚至上千个容器

  5. 低成本:开源免费

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: 服务端口 → 访问容器内应用