篮球杂论 發表於 2022-5-15 23:51:00

Debian 11 安装 Docker Engine

<h1 id="debian-11-安装-docker-engine">Debian 11 安装 Docker Engine</h1>
<h2 id="卸载旧版本如果已安装">卸载旧版本(如果已安装)</h2>
<pre><code class="language-bash">sudo apt remove docker docker-engine docker.io containerd runc
</code></pre>
<h2 id="安装方法">安装方法</h2>
<ol>
<li>
<h3 id="使用仓库安装">使用仓库安装</h3>
<ul>
<li>更新 <code>apt</code> 包索引</li>
</ul>
<pre><code class="language-bash">sudo apt update
</code></pre>
<ul>
<li>安装允许 <code>apt</code> 通过 <code>HPPTS</code> 使用仓库的依赖包</li>
</ul>
<pre><code class="language-bash">sudo apt install ca-certificates curl gnupg lsb-release
</code></pre>
<ul>
<li>添加 Docker 的官方 GPG 密钥</li>
</ul>
<pre><code class="language-bash">curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
</code></pre>
<ul>
<li>配置仓库 添加<code>Docker</code>软件源</li>
</ul>
<pre><code class="language-bash">echo \
"deb https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
</code></pre>
<p><strong>官方地址是国外的 国内访问太慢 建议换成国内的镜像地址 比如阿里的</strong><br>
把地址 https://download.docker.com/linux/debian<br>
替换成 https://mirrors.aliyun.com/docker-ce/linux/debian</p>
<pre><code class="language-bash">echo \
"deb https://mirrors.aliyun.com/docker-ce/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
</code></pre>
<ul>
<li>更新 <code>apt</code> 包索引</li>
</ul>
<pre><code class="language-bash">sudo apt update
</code></pre>
<ul>
<li>安装最新版本的 <code>Docker Engine</code>,<code>containerd</code>,<code>Docker Compose</code></li>
</ul>
<pre><code class="language-bash">sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
</code></pre>
</li>
<li>
<h3 id="使用-deb-包手动安装离线安装">使用 <code>.deb</code> 包手动安装(离线安装)</h3>
<p>官方下载地址太慢 https://download.docker.com/linux/debian/dists<br>
使用阿里镜像地址 https://mirrors.aliyun.com/docker-ce/linux/debian/dists/<br>
选择版本 Debian 11 bullseye<br>
再选 pool<br>
再选稳定版 stable<br>
再选 CPU 架构 amd64<br>
下载相应的版本 例如:</p>
<pre><code class="language-bash"> curl -O https://mirrors.aliyun.com/docker-ce/linux/debian/dists/bullseye/pool/stable/amd64/docker-ce_20.10.16~3-0~debian-bullseye_amd64.deb

curl -O https://mirrors.aliyun.com/docker-ce/linux/debian/dists/bullseye/pool/stable/amd64/docker-ce-cli_20.10.16~3-0~debian-bullseye_amd64.deb

curl -O https://mirrors.aliyun.com/docker-ce/linux/debian/dists/bullseye/pool/stable/amd64/containerd.io_1.6.4-1_amd64.deb

curl -O https://mirrors.aliyun.com/docker-ce/linux/debian/dists/bullseye/pool/stable/amd64/docker-compose-plugin_2.5.0~debian-bullseye_amd64.deb
</code></pre>
<p>安装本地包</p>
<pre><code class="language-bash"> sudo dpkg -i docker-ce_20.10.16~3-0~debian-bullseye_amd64.deb \
docker-ce-cli_20.10.16~3-0~debian-bullseye_amd64.deb \
docker-compose-plugin_2.5.0~debian-bullseye_amd64.deb \
containerd.io_1.6.4-1_amd64.deb
</code></pre>
</li>
</ol>
<h2 id="验证安装">验证安装</h2>
<ul>
<li>
<p>运行 <code>hello-world</code> 镜像</p>
<pre><code class="language-bash">sudo docker run hello-world
</code></pre>
<p>打印以下内容 表示安装成功 <code>Hello from Docker!</code></p>
<pre><code class="language-bash">Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:80f31da1ac7b312ba29d65080fddf797dd76acfb870e677f390d5acba9741b17
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
      (amd64)
3. The Docker daemon created a new container from that image which runs the
      executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
      to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/
</code></pre>
</li>
<li>
<p>如果提示无法连接到 Docker 守护进程 启动服务后再运行 <code>hello-world</code> 镜像</p>
<pre><code class="language-bash">docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.
</code></pre>
</li>
<li>
<p>查看 <code>docker</code>,<code>containerd</code> 服务状态 <code>dead</code></p>
</li>
</ul>
<pre><code class="language-bash">sudo systemctl status docker

● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: inactive (dead)
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
</code></pre>
<ul>
<li>启动服务</li>
</ul>
<pre><code class="language-bash">sudo systemctl start docker
</code></pre>
<ul>
<li>再查看服务状态是 <code>running</code></li>
</ul>
<pre><code class="language-bash">sudo systemctl status docker

● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2022-05-14 16:02:45 CST; 2s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 4157 (dockerd)
      Tasks: 9
   Memory: 32.6M
      CPU: 125ms
   CGroup: /system.slice/docker.service
             └─4157 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
</code></pre>
<h2 id="以非-root-用户身份管理-docker">以非 root 用户身份管理 Docker</h2>
<blockquote>
<p>Docker 守护进程绑定到 Unix 套接字而不是 TCP 端口。默认情况下,Unix 套接字归 root 用户所有,其他用户只能使用 sudo. Docker 守护程序始终以 root 用户身份运行。<br>
如果您不想在 docker 命令前加上 sudo,请创建一个名为 Unix 组 docker 并将用户添加到其中。当 Docker 守护进程启动时,它会创建一个可供 docker 组成员访问的 Unix 套接字。<br>
docker 组授予与 root 用户等效的权限。</p>
</blockquote>
<p>不加 sudo 会提示拒绝访问 <code>permission denied</code></p>
<pre><code class="language-bash">docker run hello-world

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
</code></pre>
<ul>
<li>创建 docker 组(可跳过)<br>
安装 docker 后会自动创建 docker 组 但未向其中添加任何用户 需要使用 sudo 来运行 docker 命令</li>
</ul>
<pre><code class="language-bash">sudo groupadd docker
</code></pre>
<ul>
<li>将 xx 用户添加到 docker 组中</li>
</ul>
<pre><code class="language-bash">sudo usermod -aG docker xx
</code></pre>
<ul>
<li>切换用户当前登录所在组(或注销重新登录) 验证不使用 sudo 时是否可以使用 docker 命令</li>
</ul>
<pre><code class="language-bash">newgrp docker
</code></pre>
<h2 id="docker-hub-镜像加速">Docker Hub 镜像加速</h2>
<p>国内从 DockerHub 拉取镜像太慢 可以使用加速器提升获取 Docker 官方镜像的速度<br>
未加速 52 秒</p>
<pre><code class="language-bash">time docker pull debian

Using default tag: latest
latest: Pulling from library/debian
67e8aa6c8bbc: Pull complete
Digest: sha256:6137c67e2009e881526386c42ba99b3657e4f92f546814a33d35b14e60579777
Status: Downloaded newer image for debian:latest
docker.io/library/debian:latest

real    0m51.981s
user    0m0.009s
sys   0m0.046s
</code></pre>
<p>配置加速器 以阿里云为例</p>
<ol>
<li>登录阿里云</li>
<li>进入控制台</li>
<li>搜索 <code>容器镜像服务</code></li>
<li>镜像工具</li>
<li>镜像加速器 查看<code>个人专属</code>加速器地址(每个人的地址都不一样) 并按说明配置镜像加速器</li>
</ol>
<pre><code class="language-bash">sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json &lt;&lt;-'EOF'
{
"registry-mirrors": ["https://***.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker
</code></pre>
<p>删除镜像再次拉取 20 秒</p>
<pre><code class="language-bash">time docker pull debian

Using default tag: latest
latest: Pulling from library/debian
0e29546d541c: Pull complete
Digest: sha256:2906804d2a64e8a13a434a1a127fe3f6a28bf7cf3696be4223b06276f32f1f2d
Status: Downloaded newer image for debian:latest
docker.io/library/debian:latest

real    0m19.556s
user    0m0.004s
sys   0m0.017s
</code></pre>
<h2 id="docker-命令-tab-自动补全">docker 命令 tab 自动补全</h2>
<p>示例 docker run h 按 tab 会自动补全后面的 ello-world<br>
示例 docker r 按 2 下 tab 会自动打印匹配的选项 rename restart rm rmi run</p>
<p>如果不能自动补全 需要安装 bash 自动补全工具 <code>bash-completion</code></p>
<pre><code class="language-bash">sudo apt install bash-completion
</code></pre>
<p><code>docker compose</code> 命令行补全需要安装脚本</p>
<pre><code class="language-bash">sudo curl \
    -L https://raw.githubusercontent.com/docker/compose/v2.5.0/contrib/completion/bash/docker-compose \
    -o /etc/bash_completion.d/docker-compose
</code></pre>
<p>如果提示</p>
<p><code>curl: (7) Failed to connect to raw.githubusercontent.com port 443: 拒绝连接</code></p>
<p>一般是 DNS 问题 无法解析域名 一般手动配置 DNS 即可解决<br>
修改/etc/resolv.conf 修改 DNS 为阿里 DNS 223.5.5.5 或者 114.114.114.114 等等</p>
<pre><code class="language-bash">sudo vim /etc/resolv.conf
</code></pre>
<pre><code class="language-bash">nameserver 223.5.5.5
</code></pre>
<p>可惜还是<code>404</code> 截止 2022.05.15 还没有解决?https://github.com/docker/compose/issues/8550</p>
<h2 id="参考资料">参考资料</h2>
<ol>
<li>https://docs.docker.com/engine/install/debian/</li>
<li>https://docs.docker.com/engine/install/linux-postinstall/</li>
<li>https://docs.docker.com/compose/completion/</li>
</ol><br><br>
来源:https://www.cnblogs.com/TopStop/p/16275303.html
頁: [1]
查看完整版本: Debian 11 安装 Docker Engine