Skip to content
DAILY QUOTE

“ ”

记录笔记仅为个人记忆使用

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)

bash
ubuntu@Mystpet:~$ uname -r  #查看内核发行号
5.15.0-163-generic

为什么 Docker 教程强调“要求 3.0 以上”? 因为 Docker 根本不是在模拟硬件,它全靠 Linux 内核底层的两个神仙功能(Namespace 隔离和 Cgroups 资源限制)来实现“集装箱”效果。这两个功能在老掉牙的 2.x 内核里是没有或者不完善的,所以必须 3.0 以上。你的 5.15 已经远远超过要求,完全可以放心跑。

bash
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 版本称为 dockerdocker.iodocker-engine。如果已安装这些程序,请卸载它们以及相关的依赖项。

bash
# 1、卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

安装需要的安装包

在 Ubuntu 上,我们需要安装证书和工具来允许 apt 通过 HTTPS 使用仓库。

bash
# 2、更新 apt 索引并安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release

Docker仓库安装

bash
# 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

bash
# 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

bash
# 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连接从客户 端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器,是一个运行时环境就是我们所说的集装箱。