2024-04-20 20:22:58 +08:00

246 lines
13 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<title>Dich&#x27;blog</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5">
<meta name="robots" content="noodp"/>
<link rel="stylesheet" href="https://blog.dich.ink/style.css">
<link rel="stylesheet" href="https://blog.dich.ink/color/blue.css">
<link rel="stylesheet" href="https://blog.dich.ink/color/background_dark.css">
<link rel="stylesheet" href="https://blog.dich.ink/font-hack-subset.css">
<meta name="description" content="">
<meta property="og:description" content="">
<meta property="og:title" content="Dich'blog">
<meta property="og:type" content="article">
<meta property="og:url" content="https://blog.dich.ink/docker-learn-3/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:description" content="">
<meta name="twitter:title" content="Dich'blog">
<meta property="twitter:domain" content="blog.dich.ink">
<meta property="twitter:url" content="https://blog.dich.ink/docker-learn-3/">
<link rel="alternate" type="application/atom+xml" title="RSS" href="https://blog.dich.ink/atom.xml">
</head>
<body class="">
<div class="container">
<header class="header">
<div class="header__inner">
<div class="header__logo">
<a href="https://blog.dich.ink" style="text-decoration: none;">
<div class="logo">
Dich&#x27;blog
</div>
</a>
</div>
</div>
<nav class="menu">
<ul class="menu__inner">
<li class="active"><a href="https://blog.dich.ink">blog</a></li>
<li><a href="https://blog.dich.ink/tags">tags</a></li>
<li><a href="https://blog.dich.ink/archive">archive</a></li>
<li><a href="https://blog.dich.ink/about">about me</a></li>
<li><a href="https://blog.dich.ink/links">links</a></li>
<li><a href="https://github.com/Dichgrem" target="_blank" rel="noopener noreferrer">github</a></li>
</ul>
</nav>
</header>
<div class="content">
<div class="post">
<h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-3/">Docker学习笔记(三)</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-03-27
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
<div class="post-content">
<p>前言 Docker 是一个平台,可简化在轻量级、可移植容器中构建、打包和部署应用程序的过程。在本节中,我们将介绍 Docker 的基础知识、其组件以及入门所需的关键命令。</p>
<span id="continue-reading"></span><h2 id="ji-chu-zhi-shi"><strong>基础知识</strong></h2>
<p>Docker 是一个平台,可简化在轻量级、可移植容器中构建、打包和部署应用程序的过程。在本节中,我们将介绍 Docker 的基础知识、其组件以及入门所需的关键命令。</p>
<h2 id="shen-me-shi-rong-qi"><strong>什么是容器?</strong></h2>
<p>容器是一个轻量级、独立且可执行的软件包,其中包含运行应用程序所需的所有依赖项(库、二进制文件和配置文件)。容器将应用程序与其环境隔离开来,确保它们在不同系统中一致地工作。</p>
<h2 id="docker-sheng-tai-xi-tong-zhong-you-san-ge-guan-jian-zu-jian"><strong>Docker 生态系统中有三个关键组件:</strong></h2>
<ul>
<li>Dockerfile包含用于构建 Docker 映像的指令(命令)的文本文件。</li>
<li>Docker 映像:从 Dockerfile 创建的容器快照。映像存储在注册表(如 Docker Hub可以拉取或推送到注册表。</li>
<li>Docker 容器Docker 映像的运行实例。</li>
</ul>
<h2 id="an-zhuang-docker"><strong>安装Docker</strong></h2>
<p><strong>安装基础工具</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt-get update
</span><span> sudo apt-get install \
</span><span> apt-transport-https \
</span><span> ca-certificates \
</span><span> curl \
</span><span> gnupg \
</span><span> lsb-release
</span></code></pre>
<p><strong>安装docker的gpg key</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
</span></code></pre>
<p><strong>安装docker源</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>echo &quot;deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
</span></code></pre>
<p>上面命令中的 lsb_release -cs 返回 bullseye 也就是debian11的代号。</p>
<p><strong>安装docker</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>apt-get update
</span><span>sudo apt-get install docker-ce docker-ce-cli containerd.io
</span><span>sudo systemctl enable docker
</span><span>sudo systemctl start docker
</span></code></pre>
<p>至此安装完成。</p>
<p>在debian系的Linux发行版上docker会开机启动启动。</p>
<p>如果平时使用非root账户又不想每次执行docker命令之前都加上sudo参考docker的 文档 可以添加 docker 并将非root账户加入到该组中。下面的命令创建 docker 组并将当前用户加入 docker 执行完成之后重新登陆生效</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo groupadd docker
</span><span>sudo usermod -aG docker $USER
</span></code></pre>
<p><strong>使用 Docker 存储库安装</strong></p>
<p>我建议使用此方法的主要原因是您可以轻松升级,因为存储库可以轻松更新!</p>
<p>首先,使用以下命令安装此方法的先决条件:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt update &amp;&amp; sudo apt install ca-certificates curl gnupg
</span></code></pre>
<p>现在,让我们使用以下命令创建一个目录来存储密钥环:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo install -m 0755 -d /etc/apt/keyrings
</span></code></pre>
<p>接下来,使用给定的命令下载 GPG 密钥并将其存储在  /etc/apt/keyrings/etc/apt/keyrings  目录中</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
</span></code></pre>
<p>完成后,使用 chmod 命令更改 docker.gpg 文件的权限:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo chmod a+r /etc/apt/keyrings/docker.gpg
</span></code></pre>
<p>最后,使用以下命令为 Docker 设置存储库:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>echo \
</span><span> &quot;deb [arch=&quot;$(dpkg --print-architecture)&quot; signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
</span><span> &quot;$(. /etc/os-release &amp;&amp; echo &quot;$VERSION_CODENAME&quot;)&quot; stable&quot; | \
</span><span> sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
</span></code></pre>
<p>上述命令中每行末尾的额外  \  只是添加新行的一种方式,以便您可以轻松查看整个命令。就是这样!</p>
<p>现在,您可以使用以下命令更新存储库索引并安装 Docker</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt update &amp;&amp; sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
</span></code></pre>
<p>要验证 Docker 安装,您可以安装 hello-world 映像:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo docker run hello-world
</span></code></pre>
<p>hello-world docker 镜像很小,仅用于检查 Docker 是否运行正常。</p>
<h2 id="shi-yong-docker-er-bu-shi-yong-sudo"><strong>使用 Docker 而不使用 sudo</strong></h2>
<p>如果您注意到,在运行 hello-world 映像时,我使用了 sudo。</p>
<p>这可能不太方便。那么如何将其配置为不必使用 sudo 呢?</p>
<p>首先使用 groupadd 命令创建一个 docker 组:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo groupadd docker
</span></code></pre>
<p>现在将用户添加到组docker</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo usermod -aG docker $USER
</span></code></pre>
<p>现在从终端注销并重新登录以使更改生效。</p>
<p>如果您在虚拟机中安装 Docker需要重新启动才能使您所做的更改生效。</p>
<p>让我们通过运行 hello-world 图像来测试它:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run hello-world
</span></code></pre>
<p>正如您所看到的,我无需使用 sudo 即可获得相同的结果。</p>
<h2 id="xie-zai-docker"><strong>卸载 Docker</strong></h2>
<p>首先,使用以下命令停止 docker 服务:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo systemctl stop docker
</span></code></pre>
<p>然后按以下方式使用 apt purge 命令从系统中删除 Docker</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
</span></code></pre>
<p>如果您打算进行全新安装或者不想拥有任何以前的数据,那么您可以使用 rm 命令删除 Docker 文件:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo rm -rf /var/lib/docker
</span></code></pre>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>sudo rm -rf /var/lib/containerd
</span></code></pre>
<p>就是这样! Docker 已成功删除。</p>
<h2 id="docker-commands-docker-ming-ling"><strong>Docker Commands Docker 命令</strong></h2>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker pull &lt;image&gt; 从注册表(如 Docker Hub下载映像。
</span><span>docker build -t &lt;image_name&gt; &lt;path&gt; 从 Dockerfile 构建映像,其中 &lt;path&gt; 是包含 Dockerfile 的目录。
</span><span>docker image ls 列出本地计算机上可用的所有映像。
</span><span>docker run -d -p &lt;host_port&gt;:&lt;container_port&gt; --name &lt;container_name&gt; &lt;image&gt;:从映像运行容器,将主机端口映射到容器端口。
</span><span>docker container ls 列出所有正在运行的容器。
</span><span>docker container stop &lt;container&gt; 停止正在运行的容器。
</span><span>docker container rm &lt;container&gt; 移除停止的容器。
</span><span>docker image rm &lt;image&gt; 从本地计算机中删除映像。
</span></code></pre>
</div>
<div class="pagination">
<div class="pagination__title">
<span class="pagination__title-h">Thanks for reading! Read other posts?</span>
<hr />
</div>
<div class="pagination__buttons">
<span class="button previous">
<a href="https://blog.dich.ink/docker-learn-2/">
<span class="button__icon"></span>&nbsp;
<span class="button__text">Docker学习笔记(二)</span>
</a>
</span>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="footer__inner">
<div class="copyright">
<span>©
2024
Dichgrem</span>
<span class="copyright-theme">
<span class="copyright-theme-sep">:: </span>
Theme: <a href="https://github.com/pawroman/zola-theme-terminimal/">Terminimal</a> by pawroman
</span>
</div>
</div>
</footer>
<script async defer src="http://173.249.208.93:12345/tracker.js" data-website-id="cluckwxwg0005qf4n55m737sz"></script>
</div>
</body>
</html>