【Docker入门】Docker原理和安装

🚀 欢迎来到我的CSDN博客:Optimistic _ chen

一名热爱技术与分享的全栈开发者,在这里记录成长,专注分享编程技术与实战经验,助力你的技术成长之路,与你共同进步!


🚀我的专栏推荐

专栏 内容特色 适合人群
🔥C语言从入门到精通 系统讲解基础语法、指针、内存管理、项目实战 零基础新手、考研党、复习
🔥Java基础语法 系统解释了基础语法、类与对象、继承 Java初学者
🔥Java核心技术 面向对象、集合框架、多线程、网络编程、新特性解析 有一定语法基础的开发者
🔥Java EE 进阶实战 Servlet、JSP、SpringBoot、MyBatis、项目案例拆解 想快速入门Java Web开发的同学
🔥Java数据结构与算法 图解数据结构、LeetCode刷题解析、大厂面试算法题 面试备战、算法爱好者、计算机专业学生
🔥Redis系列 从数据类型到核心特性解析 项目必备

🚀我的承诺:

✅ 文章配套代码:每篇技术文章都提供完整的可运行代码示例

✅ 持续更新:专栏内容定期更新,紧跟技术趋势

✅ 答疑交流:欢迎在文章评论区留言讨论,我会及时回复(支持互粉)


🚀 关注我,解锁更多技术干货!
⏳ 每天进步一点点,未来惊艳所有人!✍️ 持续更新中,记得⭐收藏关注⭐不迷路 ✨

📌 标签:#技术博客#编程学习#Java#C语言#算法#程序员

文章目录

前言

参考前文博客【Docker入门】技术架构演进之路 中对Docker发展历程的介绍,Docker并非唯一的容器解决方案,我们了解到最初容器是通过LXC技术实现的。

随着Docker 1.0 版本的发布,在保留LXC支持的同时,Docker引入了自主研发的libcontainer组件,旨在构建更通用的底层容器虚拟化库。

截至2016年,Docker已基本完成从LXC到libcontainer的技术过渡。伴随技术的发展 libcontainer 后成为OCI标准的基础,衍生出runC组件。

Docker的本质

LXC(Linux 容器) :一种操作系统层的虚拟化技术 。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。通过统一的namespace 和 cgroups 分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境。

LXC是最早一批真正把完整的容器技术用一组简易使用的工具和模板 来极大的简化了容器技术使用的一个方案;后来出现的Docker本质上是LXC的增强版,它本身不是容器,而是容器的易用工具。容器是Linux内核中的技术 ,Docker只是作为容器技术的一个实现,使得应用能够做到"一次封装,到处运行 "。

Docker的引擎迭代从最开始的基于LXC容器管理引擎实现,到后来Docker自建的容器引擎libcontainer实现,最后因为CNCF的介入,直到现在使用工业化标准的容器 runC 。

Docker的架构

Docker使用客户端-服务器(C/S)架构模式,通过远程API来管理和创建Docker容器。


Docker容器通过Docker镜像来创建

  • Doocker仓库(Registry) :Docker仓库用来保存镜像(GitHub中的代码仓库),Docker Hub提供了大量镜像使用
  • Docker daemonDocker引擎的核心组件,运行在宿主机上的后台线程,它负责管理和控制Docker所有的核心功能,也称为"守护线程"。
  • Docker Client :客户端通过命令行和其他工具使用Docker API与Docker daemon通信
  • Docker 镜像(images) :用于创建Docker容器的模板
  • Docker 容器(Container) :独立运行的一个应用

安装Docker


安装环境: 华为云 Ubuntu 22.04.4

CPU支持x86_64


卸载历史版本:

powershell 复制代码
# 这是一个 for 循环,遍历列表中所有软件包
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do

    # 对每个软件包执行 apt-get remove 命令(卸载但保留配置文件)
    sudo apt-get remove $pkg;
    
done

配置docker的下载源

powershell 复制代码
# 更新本地软件包索引
sudo apt-get update

# 安装必要的依赖工具
sudo apt-get install ca-certificates curl

# 创建密钥目录
sudo install -m 0755 -d /etc/apt/keyrings

# 下载Docker官方的GPG公钥
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

# 设置密钥文件权限
sudo chmod a+r /etc/apt/keyrings/docker.asc

# 将Docker官方仓库添加到系统的软件源列表中
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  
# 更新软件包
sudo apt-get update
  • ca-certificates :CA根证书,用于HTTPS连接验证
  • curl:命令行工具,用于从网络下载文件
  • /etc/apt/keyrings :这是 Ubuntu 存储 GPG 密钥的新标准位置
  • https://download.docker.com/linux/ubuntu/gpg :官方密钥的URL
  • -o /etc/apt/keyrings/docker.asc:保存密钥到指定文件(.asc格式)
  • chmod a+r :给所有 ( a )用户添加读取 ( r ) 权限,确保apt包管理器能读取这个密钥文件
  • deb:表示二进制包仓库
  • $(dpkg --print-architecture)动态获取当前架构
  • signed-by=/etc/apt/keyrings/docker.asc:指定验证软件包签名的GPG密钥文件
  • . /etc/os-release:加载系统版本信息文件
  • $VERSION_CODENAME:提取Ubuntu版本号,自动适应当前Ubuntu版本


开始安装Docker全家桶

powershell 复制代码
# 安装必要的一些系统工具
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 验证是否安装成功
docker --version

配置docker

powershell 复制代码
# 加载配置
sudo systemctl daemon-reload
# 测试是否安装成功
docker run hello-world
powershell 复制代码
# 配置Docker镜像加速器(国内仓库)
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
  "insecure-registries": []
}
EOF

#修改配置后,需要重启才可以加载配置 
sudo systemctl daemon-reload
sudo systemctl restart docker

# 测试国内镜像源
docker run hello-world

完结撒花!🎉

如果这篇博客对你有帮助,不妨点个赞支持一下吧!👍
你的鼓励是我创作的最大动力~

想获取更多干货? 欢迎关注我的专栏 → optimistic_chen

📌 收藏本文,下次需要时不迷路!

我们下期再见!💫 持续更新中......


悄悄说:点击主页有更多精彩内容哦~ 😊

相关推荐
wdfk_prog2 小时前
[Linux]学习笔记系列 --[drivers][base]devtmpfs
linux·笔记·学习
天空属于哈夫克32 小时前
基于 UI 自动化实现企业微信外部群主动推送的架构设计
运维·自动化·企业微信
渣渣灰95872 小时前
Windows11安装WSL2(Windows Subsystem for Linux)
linux·运维·windows
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.2 小时前
LVS基于 IPVS 的 NAT 模式负载均衡实战部署与故障排查指南
运维·负载均衡·lvs
南山二毛2 小时前
ubuntu开机自启动脚本
linux·运维·ubuntu
代码游侠2 小时前
学习笔记——文件传输工具配置与Makefile详解
运维·前端·arm开发·笔记·学习
宇钶宇夕2 小时前
CoDeSys入门实战一起学习(八):CoDeSys库文件详解——从概念到分类,高效编程的基础
运维·自动化·软件工程
L1624762 小时前
nmcli 命令和手动修改网卡配置文件详细讲解(最后附带配置脚本参考学习)
服务器·网络·php
北京盟通科技官方账号2 小时前
Docker 容器化部署 EtherNet/IP 协议栈(ESDK):Windows 与国产银河麒麟 V10 实测对比
网络·网络协议·tcp/ip·docker·国产系统·ethernet/ip·工业协议