Docker实战:一键部署轻量级容器

1.1 Docker 简介

Docker 之父 Solomon Hykes 有一个经典比喻:Docker 就好比传统的货运集装箱。

!NOTE 2008 年 LXC (LinuX Contiainer) 发布,但是没有行业标准,兼容性非常差; Docker 在 2013 年首次发布,由 Docker, Inc 开发。

1.1.1 什么是 Docker

Docker 是管理容器的引擎,是为应用打包、部署的平台,并非单纯的虚拟化技术。 它具有以下几个重要特点和优势:

  1. 轻量级虚拟化 Docker 容器相较于传统的虚拟机更加轻量和高效,能够快速启动和停止,节省系统资源。 例如,启动一个 Docker 容器可能只需要几秒钟,而启动一个虚拟机则可能需要几分钟。
  2. 一致性 确保应用程序在不同的环境中(开发、测试、生产)具有一致的运行表现。 无论在本地还是云端,应用的运行环境都能保持相同,减少 "在我电脑上能跑" 这类环境差异问题。
  3. 可移植性 可以轻松地将 Docker 容器从一个平台迁移到另一个平台,无需担心依赖和环境配置的差异。 本地开发打包好的容器,可以无缝部署到云服务器上。
  4. 高效的资源利用 多个 Docker 容器可以共享主机的操作系统内核,相比虚拟机不需要独立操作系统,资源利用率更高。
  5. 易于部署和扩展 能够快速部署新的应用实例,并且可以根据业务流量轻松完成水平扩展。

总而言之,Docker 极大地简化了应用程序的开发、部署和管理流程,提高了开发效率和运维的便利性,在现代软件开发、云计算领域被广泛使用。

1.1.2 Docker 在企业中的应用场景

在企业中,Docker 作为业务的最小载体被大规模使用。借助 Docker,企业可以更加高效地部署业务应用,同时节约服务器资源。

!NOTE IaaS(Infrastructure as a Service):基础设施即服务 PaaS(Platform as a Service):平台即服务 SaaS(Software as a Service):软件即服务

Docker 可以运行在 IaaS 层之上,作为 PaaS 平台的底层基础,是微服务、CI/CD 流水线、私有云平台非常核心的底层组件。

1.1.3 Docker 与虚拟化的对比

对比项 虚拟机 Docker 容器
操作系统 拥有独立完整虚拟机 OS 共享宿主机操作系统内核
存储 镜像较大,一般 GB 级别 镜像小巧,多为 MB 级别
性能 存在额外 CPU、内存虚拟化开销 几乎无性能损耗,接近原生
移植性 笨重,和虚拟化方案耦合高 轻量,镜像一次构建随处运行
隔离性 硬件级完全隔离 内核提供的资源隔离,安全隔离
部署速度 慢,分钟级启动 快速,秒级启动
运行密度 单机数量有限 单机可以支持上千个容器

1.1.4 Docker 的优势

  • 对于开发人员:Build once、Run anywhere(一次构建,随处运行)
  • 对于运维人员:Configure once、Run anything(一次配置,承载各类业务)

容器技术统一了开发与运维的交付标准,大大提升 IT 人员的工作效率。

1.2 部署 Docker

官方文档地址:Docker Docs

本次部署环境:RHEL9 系列,使用阿里 Docker 源

1.2.1 容器的工作方法

Docker 底层依托 Linux 内核特性实现资源隔离与资源限制:

  • Namespace:实现 PID、网络、挂载、用户等资源隔离,让容器内部看起来是独立系统
  • Cgroups:限制容器 CPU、内存、磁盘 IO 等资源上限,防止单容器耗尽宿主机资源
  • UnionFS:联合文件系统,实现分层镜像,镜像复用、只读分层 + 容器读写层

1.2.2 部署第一个容器

1.2.2.1 配置软件仓库

使用阿里云 Docker CE 镜像源,适配 RHEL9 x86_64

复制代码
[root@docker-node1 ~]# cat /etc/yum.repos.d/docker.repo
[docker]
name=docker
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9.3/x86_64/stable/
gpgcheck=0
1.2.2.2 安装 Docker-ce 并修改启动文件
复制代码
# 安装docker-ce
[root@docker-node1 ~]# dnf install docker-ce -y

# 编辑docker启动文件,指定使用iptables(RHEL9默认是nftables)
[root@docker-node1 ~]# vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --iptables=true

说明:RHEL9 默认 nftables,部分企业网络环境习惯使用 iptables,添加 --iptables=true 参数适配。

1.2.2.3 激活内核网络选项并启动服务
复制代码
# 加载网桥过滤模块
[root@docker-node1 ~]# echo br_netfilter > /etc/modules-load.d/docker_mod.conf
[root@docker-node1 ~]# modprobe -a br_netfilter

# 配置内核转发与网桥过滤参数
[root@docker-node1 ~]# cat  > /etc/sysctl.d/docker.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

# 生效sysctl配置
[root@docker-node1 ~]# sysctl --system

# 开机自启并立刻启动docker服务
[root@docker-node1 ~]# systemctl enable --now docker
1.2.2.4 验证 Docker + 运行第一个容器
复制代码
# 查看docker版本
docker --version
# 查看docker详细信息
docker info

# 运行hello-world测试容器
docker run hello-world

输出 hello-world 提示信息,代表 Docker 环境部署成功。

相关推荐
山乐191311 小时前
麒麟系统,安装Nginx并配置https证书
运维·nginx·https
月落汀兰1 小时前
拒绝配置写死镜像!K8s 存储卷与配置管理,PV/PVC、ConfigMap、Secret 实战避坑指南
运维·kubernetes
服务器硬件项目经理1 小时前
《超节点修仙录》· 第一卷·炼气期【第04话】 超节点 vs 普通服务器——不就是多插了几张卡吗?
运维·服务器·人工智能·嵌入式硬件·深度学习·机器学习
杨云龙UP2 小时前
MySQL 主从复制管理:暂停、恢复、清理主从关系及命令执行位置
运维·数据库·mysql·主从配置·主从命令·reset replica·清除复制
艾伦_耶格宇2 小时前
【kubernetes - 1.28版本】-10 K8S命名空间
云原生·容器·kubernetes
Android系统攻城狮3 小时前
Linux FFmpeg深度解析之avcodec_parameters_from_context调用流程与实战(十六)
linux·运维·ffmpeg·音视频进阶·ffmpeg音视频·车载音视频进阶
隔窗听雨眠3 小时前
从存储引擎到执行计划:OceanBase高效运维的调优逻辑与工程实践
运维·oceanbase
运维行者_3 小时前
供应链安全成最大风险源,企业如何构建可控的运维体系?
运维·开发语言·网络·数据库·安全·云计算·流量监控
xiaoyunxuexibiji3 小时前
采购协同管理:从备货计划、进度确认到到货签收
大数据·运维·人工智能