记录笔记仅为个人记忆使用
docker为什么出现

docker历史

docker使用教程

- Docker基于Go语言开发,开源项目。
- [仓库地址](Docker Hub Container Image Library | App Containerization](https://hub.docker.com/))
虚拟化技术和容器化技术对比
传统虚拟化:为了让不同的人(应用)住得互不干扰,你在地皮(物理服务器)上建了好几栋独栋别墅。每栋别墅都有自己独立的地基、承重墙、水电系统(完整的操作系统 Guest OS)。
缺点:太占地方,建房成本高,浪费资源(很多别墅的客厅可能空着)。

容器化技术:大家共享同一栋楼的地基、承重墙和主管道(宿主机的操作系统内核)。但是,每个人住进不同的房间(容器)。房间门一关,互相看不见。
优点:空间利用率极高,拎包入住(启动极快),成本极低。

| 对比维度 | 传统虚拟化技术 (Virtual Machine) | 容器化技术 (Docker) |
|---|---|---|
| 实现层级 | 硬件级虚拟化(通过 Hypervisor 模拟硬件) | 操作系统级虚拟化(利用 Linux 内核的 Namespace 和 Cgroups) |
| 操作系统 | 每个虚拟机都需要安装完整的独立操作系统 (Guest OS) | 所有容器共享宿主机 (Host OS) 的内核,没有独立的操作系统 |
| 启动速度 | 分钟级(需要经历完整的系统开机引导过程) | 秒级甚至毫秒级(只需启动一个进程) |
| 资源占用 | 极大(即使不跑应用,操作系统本身也要占几个G的内存和硬盘) | 极小(只占用应用本身和依赖库的体积,通常几十 MB 到几百 MB) |
| 隔离性与安全 | 极强(完全隔离的物理模拟环境) | 较弱(本质上是宿主机上的进程隔离,如果内核有漏洞可能会互相影响) |
| 可移植性 | 较差(往往受限于底层的虚拟化平台,体积庞大不易迁移) | 极强(“一次构建,到处运行”,只要有 Docker 环境就能跑) |
DevOps

名词解释
- 镜像(image)
- Docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像 ===> run ===> tomcat01容器, 通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)
- 容器(container)
- Docker利用容器技术,独立运行一个或者一组应用, 通过镜像来创建的
- 启动,停止,删除,基本命令!
- 就目前可以把这个容器理解为一个建议的linux系统
- 仓库(repository)
- 存放镜像的地方
- Docker Hub(默认是国外的)
- 阿里云,,,都有容器服务(配置镜像加速!)
环境准备
1、Linux内核要求3.0以上 2、Ubuntu 系统(如 Ubuntu 20.04 或 22.04 LTS)
ubuntu@Mystpet:~$ uname -r #查看内核发行号
5.15.0-163-generic为什么 Docker 教程强调“要求 3.0 以上”? 因为 Docker 根本不是在模拟硬件,它全靠 Linux 内核底层的两个神仙功能(Namespace 隔离和 Cgroups 资源限制)来实现“集装箱”效果。这两个功能在老掉牙的 2.x 内核里是没有或者不完善的,所以必须 3.0 以上。你的 5.15 已经远远超过要求,完全可以放心跑。
ubuntu@Mystpet:~$ cat /etc/os-release #查看系统信息
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy| 字段名称 | 英文含义 | 大白话解释 |
|---|---|---|
| PRETTY_NAME | 漂亮的名称 | 给人类看的全称。去发朋友圈或者写文档时,就用这个名字:“Ubuntu 22.04.3 LTS”。 |
| NAME | 名称 | 这个系统的家族大类,就是 Ubuntu。 |
| VERSION_ID | 版本号 | 22.04(代表 2022 年 4 月发布的版本)。 |
| VERSION | 完整版本信息 | 包含了版本号和它的代号,LTS 代表“长期支持版”,通常维护 5 年。 |
| VERSION_CODENAME 和 UBUNTU_CODENAME | 版本开发代号 | jammy。Ubuntu 每次发版都会用一个形容词+动物来命名,22.04 叫 Jammy Jellyfish(幸运的果酱水母)。 |
| ID | 系统标识符 | ubuntu。全小写,通常是给代码脚本看的。写自动化脚本时,程序就认这个词。 |
| ID_LIKE | 类似什么系统 | debian。这一行叫**“认祖归宗”**!Ubuntu 是基于 Debian 系统二次开发出来的。这意味着 Ubuntu 和 Debian 用着同一套包管理逻辑(比如都用 apt-get 装软件),而不是 CentOS 的 yum。 |
| HOME_URL 及其他 | 各种网址 | 官网、技术支持、提交 Bug 报告和隐私政策的网址链接。 |
安装docker
卸载旧版本
较旧的 Docker 版本称为 docker、docker.io 或 docker-engine。如果已安装这些程序,请卸载它们以及相关的依赖项。
# 1、卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc安装需要的安装包
在 Ubuntu 上,我们需要安装证书和工具来允许 apt 通过 HTTPS 使用仓库。
# 2、更新 apt 索引并安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-releaseDocker仓库安装
# 3、添加阿里云的 GPG 官方密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 4、设置阿里云仓库地址
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null安装 Docker Engine-Community
# 5、更新 apt 软件包索引
sudo apt-get update
# 6、安装 docker 相关的 docker-ce 社区版
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 7、设置 docker 开机自启
sudo systemctl enable docker
# 8、启动 docker
sudo systemctl start docker
# 9、使用 docker version 查看是否安装成功
sudo docker version
# 10、测试运行
sudo docker run hello-world
# 11、查看已经下载的镜像
sudo docker images
# 12、清理镜像为 <none> 的虚悬镜像
sudo docker image prune -f卸载Docker
# 13.1、卸载依赖 (注意 Ubuntu 卸载彻底用 purge)
sudo apt-get purge docker-ce docker-ce-cli containerd.io
# 13.2、删除资源 ( /var/lib/docker 是 docker 的默认工作路径)
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd底层原理


Docker Engine是一个客户端-服务器应用程序,具有以下主要组件:
- 一个服务器,它是一种长期运行的程序,称为守护进程(dockerd命令)
- 一个REST API,它指定程序可以用来与守护进程对话并指示它做什么的接口。
Docker是一个Client Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户 端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器,是一个运行时环境就是我们所说的集装箱。

