惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
月光博客
月光博客
AI
AI
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
CXSECURITY Database RSS Feed - CXSecurity.com
WordPress大学
WordPress大学
GbyAI
GbyAI
L
Lohrmann on Cybersecurity
O
OpenAI News
Schneier on Security
Schneier on Security
P
Palo Alto Networks Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Troy Hunt's Blog
V2EX - 技术
V2EX - 技术
W
WeLiveSecurity
L
LINUX DO - 最新话题
人人都是产品经理
人人都是产品经理
S
Security Affairs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
A
Arctic Wolf
Recorded Future
Recorded Future
Microsoft Security Blog
Microsoft Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
G
GRAHAM CLULEY
N
Netflix TechBlog - Medium
TaoSecurity Blog
TaoSecurity Blog
C
Check Point Blog
Scott Helme
Scott Helme
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Apple Machine Learning Research
Apple Machine Learning Research
PCI Perspectives
PCI Perspectives
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Vercel News
Vercel News
The Hacker News
The Hacker News
Y
Y Combinator Blog
Latest news
Latest news
SecWiki News
SecWiki News
Hugging Face - Blog
Hugging Face - Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
Webroot Blog
Webroot Blog
Google DeepMind News
Google DeepMind News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
C
Cisco Blogs
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
宝玉的分享
宝玉的分享
L
LINUX DO - 热门话题

atpX

自建 S3 兼容对象存储服务 Garage 听风的歌 偶尔是深夜就好了 新玩具 AirPods Pro 3 公交车上的时间 从 WHOIS 到 RDAP 通过 WireGuard 访问 NFS 共享文件 自建音乐串流服务探索 我停止了探索 Fediverse 互联网背景噪音 我的数字生活降级 小城与确定性的墙 一只特立独行的猪 Fediverse 与社交 承认的勇气 mediaX - 轻量书影音记录管理工具 我的博客写作流程 网站新增 Misc 页面 擅长对线的鲍勃 在 Chroot 环境下使用 Rsync 同步 再见 JavaScript 当我玩博客时我在玩什么 为什么我的博客没有友链页面 小熊猫与大熊猫 (HDR 照片测试) 是时候为网站开启 HTTP/3 支持了吗 使用 AdGuard Home 搭建自用 DoH 服务 谈谈读书与消遣 2023 年终总结 西安两日游 从 AirPods「升级」到 EarPods Docker 搭建去中心化的微博客平台 Mastodon 聊聊 iPhone 15 Pro 使用感受 能否将 TOTP 二次验证存放在密码管理器里 认识史蒂夫·乔布斯 与“锤哥”克里斯·海姆斯沃斯一起养生 逃离爆炸的信息 你想活出怎样的人生 重温《龙珠》动画 为什么关闭评论 从域名注册商到 DNS 服务,找到自己的组合 如何提高用户网页阅读体验 从 Typecho 迁移到 Hugo 个人博客的最终归宿是静态网站吗 我选择了放弃 jQuery 关于我的小破站折腾速度优化这件事 记一次家庭网络折腾 贴一些 SmokePing 记录 我的域名邮箱选择 不存在的语录 Typecho 评论验证插件 CaptchaPlus 谈谈写字这件事 新的网站 Logo 探索 曲线解决 Typecho 图片占位抖动问题 自建 vaultwarden / bitwarden_rs 密码管理器 使用 Plausible 自建网站流量统计分析工具 如何优雅地徒手剥开火腿肠 简单的集中隔离生活记录 新玩具 M2 MacBook Air 使用 acme.sh 申请 Google 公共证书 Docker 搭建去中心化的微博客平台 Misskey 搭建 Lsky Pro 兰空图床 折腾树莓派系统的一天 我的吉卜力之旅 使用 Uptime Kuma 自建服务器/网站在线率监控 Spartan Host Review - Best Hosting & Service Support Debian 下 Nginx 配合 Fail2Ban 减少恶意扫描和攻击 升级 Typecho 到最新开发版本 v1.2.0 Linux rm 命令详解 BandwagonHost - Reliable Blog and Business VPS Hosting 使用 Isso 为 Hugo/Hexo 等静态网站添加评论功能 推荐 5 款免费开源的网站流量分析统计工具 搭建 Shynet 网站流量统计分析工具 聊聊 DDoS 攻击那些事 Hugo 使用 Fancybox 实现图片灯箱/放大功能 从 Debian 10 升级到 Debian 11 教程 使用 Umami 自建网站流量统计分析工具 Linux 一次执行多个命令的 3 种方式 Typecho 修改永久链接后旧链接 301 跳转到新链接 从不同需求推荐几家稳定可靠的 VPS 服务商 Build EchoIP service with Docker 浅谈一下这些年折腾过的 VPS 单线复用解决一根网线同时 IPTV 和宽带问题 不完全吃灰的树莓派 开发一个自己的 Telegram Bot 使用 Nginx 实现 TCP 四层反向代理 画画真难 我读村上春树 使用 acme.sh 自动签发和更新证书 卡拉马佐夫式悲剧 安装 File Browser 轻量网盘工具 新玩具树莓派到手 Linux 定时自动备份数据到 OneDrive/Google Drive 记一次服务器崩溃 使用 rsync 同步文件 短信的消失 幻灭的艺术家 新玩具戴尔 S2721DGF 开箱 蝴蝶 用 Docker 整合 SeafilePro 搭建私人云盘 搭建自己的 kms 服务器
Debian 系统安装 Docker 教程
ATP · 2021-10-02 · via atpX
docker-logo

Docker 容器是一款很方便的作业虚拟化工具,软件环境打包和迁移十分友好。前面的文章分享过的不少软件搭建都需要用到 Docker,如搭建 SeafilePro 网盘File Browser 网盘AdGuard Home 去广告等等,不过很多时候都略过了 Docker 的安装,这里简单的写一写在 Debian 系统(适用于最新的 Debian 11 以及 Debian 10 系统)上安装 Docker 的教程以及一些基本的使用命令,当然,你也可以从官方文档中找到在不同系统中的详细安装教程。

如果你现在使用的是 Debian 10 系统,想要升级到最新的 Debian 11,可以参考我前面的文章:从 Debian 10 升级到 Debian 11 教程

安装 Docker

以下所有的操作以 root 用户进行演示,如果你是以 root 权限用户执行,请在前面加上 sudo命令。

安装软件包依赖

我们需要从 Docker 官方的存储库中安装,因此将存储库添加到 Debian 系统中,而在添加 Docker 官方存储库之前,需要准备一些环境:

apt install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

如下图所示:

install-docker-env

添加 Docker 存储库

将存储库添加到 Debian 系统中:

  1. 添加 GPG 密钥:
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. 添加到系统软件源:

x86_64/amd64 平台:

echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
 $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

arm64 平台:

echo \
  "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

安装 Docker

直接更新软件包索引,然后安装:

apt update
apt install -y docker-ce docker-ce-cli containerd.io

安装好之后可以通过以下命令查看 Docker 是否开启自动启动并查看状态:

systemctl is-enabled docker
systemctl is-enabled containerd
systemctl status docker

可以从下图中看到,Docker 正在运行并且设置了开机自动启动。

install-docker-status

使用 hello-world 镜像测试 Docker 能否正常运行:

docker run hello-world

如果你的结果于下图类似,则说明能够正常使用:

install-docker-hello-word

至此,你的 Docker 已经成功安装并且能够正常使用了。

卸载 Docker

卸载 Docker Engine,CLI 和 Containerd 包:

apt-get purge docker-ce docker-ce-cli containerd.io

删除所有镜像、容器和配置文件等:

rm -rf /var/lib/docker
rm -rf /var/lib/containerd

安装 Docker Compose

通过仓库安装

前面安装 Docker 是已经添加过仓库了,这里可以直接安装(默认会安装 Compose V2):

apt install docker-compose-plugin

测试安装:

docker compose version

更新 Compose:

apt update
apt install docker-compose-plugin

手动安装

  1. 下载稳定版本的 Docker Compose:
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

请自行替换为需要的版本,如果你需要安装 Compose V2,可以参考官方文档

  1. 赋予可以执行权限:
chmod +x /usr/local/bin/docker-compose
  1. 测试安装:
docker-compose --version
# docker-compose version 1.29.2, build 5becea4c

Docker 基本使用

下面介绍一些 Docker 常用的基本命令。你可以直接输入 docker 查看 Docker 的所有命令,或者查看 runoob 教程

添加 Docker 软件镜像

对于国内用户来说,Docker 默认的软件源下载速度会很慢,这里可以z直接修改下面的文件(Docker 版本 >= 1.10)添加国内的镜像地址:

vim /etc/docker/daemon.json

添加以下内容:

{
 "registry-mirrors" : [
   "https://docker.mirrors.ustc.edu.cn",
   "http://registry.docker-cn.com",
   "https://dockerhub.azk8s.cn"
 ]
}

上面的部分地址可能会失效,你可以替换为你喜欢的镜像地址,然后重新启动 Docker:

systemctl daemon-reload
systemctl restart docker

运行命令 docker info, 查看最后的 Registry Mirrors 下是否有设置的内容,有的话就设置成功了。

容器/镜像使用

查看正在运行的容器

docker ps

查看所有容器

docker ps -a

查看所有镜像

docker images

停止所有容器

docker stop $(docker ps -a -q)

删除所有容器

docker rm $(docker ps -a -q)

删除所有镜像

docker rmi $(docker images -q)

如果是控制某一个容器/镜像,只需要将后面的变量 $() 换成该容器/镜像的 ID

查看指定容器日志

docker logs -f [container-name/id]

也可以和 “–tail n” 命令结合起来,查看日志最后 n 行:

docker logs --tail 10 [container-name/id]

进入容器

有两种方式进入后台运行的容器:

  1. docker attach(如果退出会导致容器停止)
docker attach [container-name/id]
  1. docker exec(推荐)
docker exec -it [container-name/id] /bin/bash

导入/导出容器

导出容器快照到本地(通过重定向命名):

docker export [container-name/id] > my_container.tar

将本地容器快照导入为镜像:

cat my_container.tar | docker import - my_container:new

Docker run 命令

下面介绍以下 Docker 中用得最多的运行容器命令。

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

完整的 OPTIONS 说明可以使用 docker run --help 查看,下面是部分常用的说明:

  • -d / --detach=true: 后台运行容器,并返回容器 ID;
  • -i / --interactive=true: 打开 STDIN,用于控制台交互,通常与 -t 同时使用;
  • -t / --tty=true: 分配 tty 设备,可以支持终端登录,默认为 false,通常与 -i 同时使用;
  • -P / --publish-all=true: 随机端口映射,容器内部端口随机映射到主机的端口
  • -p / --publish=[]: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • -h / --hostname="": 指定容器的 hostname;
  • -v / --volume[]: 给容器挂载存储卷,挂载到容器的某个目录;
  • --name="test": 为容器指定一个名称;
  • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  • -e username="": 设置环境变量 username
  • --env-file=[]: 从指定文件读入环境变量,文件格式为每行一个环境变量;
  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container 四种类型;
  • --link=[]: 添加链接到另一个容器,使用其他容器的IP、env等信息;
  • --restart="no": 指定容器停止后的重启策略,no:容器退出时不重启;on-failure:容器故障退出(返回值非零)时重启;always:容器退出时总是重启;
  • --rm=false: 容器退出时自动清理容器内部的文件系统,等价于在容器退出后,执行 docker rm -v,不支持以 docker run -d 启动的容器。

Docker system 命令

docker system 命令是 Docker 提供的帮助我们管理查看 Docker 运行情况的命令,你可以通过 docker system --help 查看介绍:

Usage:  docker system COMMAND

Manage Docker

Commands:
  df          Show docker disk usage
  events      Get real time events from the server
  info        Display system-wide information
  prune       Remove unused data

Run 'docker system COMMAND --help' for more information on a command.

其中比较有用的是 dfprune 两个指令:

  • docker system df: Docker 整体磁盘使用率的概况,包括镜像、容器、本地 Volume 和过程中的 Cache;
  • docker system prune: 清理没有使用的数据,包括那些已停止的容器、dangling 镜像(未被任何镜像引用的镜像)、未被容器引用的 network 和构建过程中的 cache

还可在不同在子命令下执行 prune,用来删除某类资源:

  • docker container prune: 删除所有退出状态的容器;
  • docker volume prune: 删除未被使用的数据卷;
  • docker image prune: 删除 dangling 或所有未被使用的镜像。

当然,你也可以通过下面的命令直接更加彻底的完全删除某类资源(谨慎使用):

  • docker container rm $(docker container ls -a -q): 删除所有容器;
  • docker volume rm $(docker volume ls -q): 删除所有数据卷;
  • docker image rm $(docker image ls -a -q): 删除所有镜像;
  • docker network rm $(docker network ls -q): 删除所有网络。