笔记:docker安装(ubuntu 20.04)

bash 复制代码
sudo apt update   #sudo:以 超级用户权限 运行命令。apt update:更新 APT 软件包管理器 的软件源列表,确保安装的是最新版本的软件。

sudo apt install docker.io -y   #apt install docker.io:安装 Docker; -y:自动确认安装(否则安装过程中会提示你输入 Y/N 进行确认)

sudo systemctl enable --now docker   #systemctl enable docker:让 Docker 在系统启动时自动运行; --now:除了启用 Docker 开机自启,还立即启动 Docker 服务。 这个命令确保每次开机 Docker 都会自动启动,并且你现在就可以使用它了

#注:下面这句我用了之后再使用docker run 的话还是要加sudo,有待进一步排查
sudo usermod -aG docker $USER       #usermod -aG docker $USER:把当前用户 ($USER) 添加到 docker 用户组,这样,你可以在 不使用 sudo 的情况下运行 Docker 命令,比如 docker ps、docker run 等

newgrp docker  #让当前用户生效,无需重启。newgrp docker:让新的用户组权限 立即生效,否则你需要 重启系统 才能生效。这样你可以立刻使用 docker 命令,而不需要退出终端或重启电脑

按顺序执行这些命令,然后试试运行:

bash 复制代码
docker --version
docker run hello-world  (显示没有权限别忘了加sudo)

第一句正常,但是第二条命令会报错:

docker run hello-world

Unable to find image 'hello-world:latest' locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers). See 'docker run --help'.

这个错误表明 Docker 无法从官方 Docker Hub 拉取 hello-world 镜像 ,通常是因为 网络问题(比如访问 Docker Hub 受限或超时)

可以先试一下检查 Docker 运行状态(虽然大概不是这里的问题)

bash 复制代码
sudo systemctl restart docker  # 重启 Docker
sudo systemctl status docker   # 查看 Docker 运行状态

如果 status 显示 active (running),说明 Docker 正常

尝试手动拉取 hello-world(大概率也会失败)

bash 复制代码
docker pull hello-world(显示没有权限别忘了加sudo)
要更换docker源https://zhuanlan.zhihu.com/p/32004414428
bash 复制代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://docker.m.daocloud.io"]
}
EOF                       #sudo:以 超级用户权限 运行。

#tee /etc/docker/daemon.json:将 接下来的内容(EOF 之间的部分)写入 /etc/docker/daemon.json。

#<<EOF:表示 多行输入,直到遇到 EOF 结束。

#{ "registry-mirrors": ["https://docker.m.daocloud.io"] }这是 Docker 的 JSON 配置,告诉 Docker 使用 国内镜像源 来加速拉取镜像。

#registry-mirrors:指定 镜像加速地址。

#EOF:这个 EOF 是 结束标记,告诉 Shell 写入完成,不要再继续追加内容。

使用vim或nano也可以,反正有这么个文件就行(anyway,如果显示是只读文件,别忘了vim或nano前加sudo)

此时还是不能正常使用的,需要

bash 复制代码
sudo systemctl daemon-reload    #systemctl:用于管理 systemd 服务(Linux 的服务管理工具)daemon-reload:重新加载 systemd 配置,让它识别 新的或修改后的服务配置(比如 /etc/docker/daemon.json 的更改)。
#作用:如果你修改了 Docker 的配置文件(例如换了镜像源),就需要 daemon-reload 让系统重新读取它。
 sudo systemctl restart docker   #重启 Docker 服务

此时sudo docker run hello-world应该可以正常使用了

docker-io, docker-ce区别(因为很多教程给的都是下载ce社区版,和大模型给的方法不同,故有此疑问):

维护者:https://www.zhihu.com/question/266021659/answer/1257882242

  • docker.io:由Debian团队维护,存在于Ubuntu的官方库中。

  • docker-ce:由Docker官方维护,是Docker社区版。

依赖管理:【搬运】docker.io 和 docker-ce 区别 - 小明明007 - 博客园

  • docker.io :采用apt方式管理依赖,依赖包由Ubuntu统一管理。
  • docker-ce :使用go语言管理依赖,自行管理所有依赖,确保运行稳定。
相关推荐
YuCaiH1 小时前
数组理论基础
笔记·leetcode·c·数组
秦始皇爱找茬1 小时前
docker部署Jenkins工具
docker·容器·jenkins
bicijinlian2 小时前
多语言笔记系列:使用导入魔法命令
笔记
zru_96023 小时前
Docker 部署 Redis:快速搭建高效缓存服务
redis·缓存·docker
foo1st4 小时前
JDK(Ubuntu 18.04.6 LTS)安装笔记
java·笔记·ubuntu
DKPT4 小时前
常见正则表达式整理与Java使用正则表达式的例子
java·笔记·学习·面试·正则表达式
下雨的Jim4 小时前
前端速成之——Script
前端·笔记
樽酒ﻬق4 小时前
Kubernetes 常用运维命令整理
运维·容器·kubernetes
爱码小白4 小时前
wordpress学习笔记
笔记·学习
我的golang之路果然有问题5 小时前
快速上手GO的net/http包,个人学习笔记
笔记·后端·学习·http·golang·go·net