2025-01-24 15:14:06 +08:00

312 lines
20 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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=1">
<meta name="robots" content="noodp"/>
<link rel="stylesheet" href="https://blog.dich.bid/style.css">
<link rel="stylesheet" href="https://blog.dich.bid/color/blue.css">
<link rel="stylesheet" href="https://blog.dich.bid/color/background_dark.css">
<link rel="stylesheet" href="https://blog.dich.bid/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.bid/learn-docker-7/">
<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.bid">
<meta property="twitter:url" content="https://blog.dich.bid/learn-docker-7/">
<link rel="alternate" type="application/atom+xml" title="Dich&#x27;blog Atom Feed" href="https://blog.dich.bid/atom.xml" />
<link rel="icon" type="image/png" href=&#x2F;dich.webp />
</head>
<body class="">
<div class="container">
<header class="header">
<div class="header__inner">
<div class="header__logo">
<a href="https://blog.dich.bid" 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.bid">blog</a></li>
<li><a href="https://blog.dich.bid/tags">tags</a></li>
<li><a href="https://blog.dich.bid/archive">archive</a></li>
<li><a href="https://blog.dich.bid/about">about me</a></li>
<li><a href="https://blog.dich.bid/links">links</a></li>
<li><a href="https://blog.dich.bid/search">search</a></li>
<li><a href="https://blog.dich.bid/weekly">weekly</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.bid/learn-docker-7/">Docker学习笔记(七)</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-03-31
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/xue-xi-bi-ji/">#学习笔记</a></span>
<div class="post-content">
<p>前言 容器镜像仓库是 Docker 容器镜像的集中存储和分发系统。它允许开发人员以这些映像的形式轻松共享和部署应用程序。容器镜像仓库在容器化应用程序的部署中起着至关重要的作用,因为它们提供了一种快速、可靠且安全的方式来跨各种生产环境分发容器映像。</p>
<span id="continue-reading"></span><h2 id="container-registries-rong-qi-jing-xiang-cang-ku"><strong>Container Registries 容器镜像仓库</strong></h2>
<p>以下是当今可用的常用容器镜像仓库列表:</p>
<ul>
<li>Docker HubDocker Hub 是公共 Docker 映像的默认注册表,用作在开发人员之间共享和分发映像的平台。</li>
<li>Google Container Registry GCRGCR 是 Google Cloud Platform 提供的托管、安全且高度可用的注册表,非常适合托管私有容器镜像。</li>
<li>Amazon Elastic Container Registry ECRAmazon ECR 是由 Amazon Web Services 提供的完全托管的 Docker 容器镜像仓库,为存储、管理和部署容器映像提供高可扩展性和性能。</li>
<li>Azure 容器镜像仓库 ACRACR 是 Microsoft Azure 提供的托管注册表,提供异地复制、访问控制以及与其他 Azure 服务的集成。</li>
</ul>
<p><strong>DockerHub</strong>
DockerHub 是 Docker Inc. 提供的基于云的注册服务。它是默认的公共容器镜像仓库,您可以在其中存储、管理和分发 Docker 映像。DockerHub 使其他用户可以轻松查找和使用您的映像,或者与 Docker 社区共享他们自己的映像。</p>
<p><strong>DockerHub的功能</strong></p>
<ul>
<li>公共和私有存储库:将映像存储在每个人都可以访问的公共存储库中,或者选择仅限您的团队或组织访问的私有存储库。</li>
<li>自动构建DockerHub 与 GitHub 和 Bitbucket 等常用代码存储库集成,允许您为 Docker 映像设置自动构建。每当您将代码推送到存储库时DockerHub 都会自动创建一个包含最新更改的新映像。</li>
<li>WebhookDockerHub 允许您配置 Webhook以便在构建或更新映像时通知其他应用程序或服务。</li>
<li>组织和团队:通过创建组织和团队来管理对映像和存储库的访问,使协作变得容易。</li>
<li>官方镜像DockerHub 为 MongoDB、Node.js、Redis 等流行软件提供了一组精选的官方镜像。这些映像由 Docker Inc. 和上游软件供应商维护,确保它们是最新且安全的。</li>
</ul>
<p>要开始使用 DockerHub您需要在他们的网站上创建一个免费帐户。注册后您可以创建存储库、管理组织和团队以及浏览可用映像。</p>
<p>当您准备好共享自己的映像时,可以使用 docker 命令行工具将本地映像推送到 DockerHub</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker login
</span><span>docker tag your-image your-username/your-repository:your-tag
</span><span>docker push your-username/your-repository:your-tag
</span></code></pre>
<p>要从 DockerHub 拉取镜像,可以使用 docker pull 命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker pull your-username/your-repository:your-tag
</span></code></pre>
<p>DockerHub 对于分发和共享 Docker 映像至关重要,使开发人员能够更轻松地部署应用程序和管理容器基础架构。</p>
<h2 id="jing-xiang-biao-ji-zui-jia-shi-jian"><strong>镜像标记最佳实践</strong></h2>
<p>正确标记 Docker 映像对于高效的容器管理和部署至关重要。在本节中,我们将讨论镜像标记的一些最佳实践。</p>
<p><strong>使用语义版本控制</strong>
标记镜像时建议遵循语义版本控制指南。语义版本控制是一种广受认可的方法可以帮助更好地维护应用程序。Docker 镜像标签应具有以下结构 &lt;major_version&gt;.&lt;minor_version&gt;.<patch>。示例3.2.1。</p>
<p><strong>标记最新版本</strong>
除了版本号之外Docker 还允许您将映像标记为“最新”。通常的做法是将映像的最新稳定版本标记为“最新”,以便用户无需指定版本号即可快速访问它。但是,在发布新版本时保持此标记更新非常重要。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker build -t your-username/app-name:latest .
</span></code></pre>
<p><strong>具有描述性和一致性</strong>
选择清晰且描述性的标签名称,以传达镜像的用途或与先前版本相比的更改。您的标签还应该在映像和存储库中保持一致,以便更好地组织和易用。</p>
<p><strong>包括生成和 Git 信息(可选)</strong>
在某些情况下,在镜像标记中包含有关构建和 Git 提交的信息可能会有所帮助。这有助于识别用于生成映像的源代码和环境。示例app-name-1.2.3-b567-d1234efg。</p>
<p><strong>使用特定于环境和体系结构的标签</strong>
如果应用程序部署在不同的环境生产、暂存、开发或具有多个体系结构amd64、arm64则可以使用指定这些变体的标记。示例your-username/app-name:1.2.3-production-amd64。</p>
<p><strong>需要时重新标记镜像</strong>
有时,您可能需要在将映像推送到注册表后重新标记映像。例如,如果您已经为应用程序发布了补丁,则可能需要使用与以前版本相同的标记重新标记新的补丁版本。这样可以更顺畅地更新应用程序,并减少需要应用补丁的用户的手动工作。</p>
<p><strong>使用自动生成和标记工具</strong>
请考虑使用 CI/CD 工具Jenkins、GitLab CI、Travis-CI根据提交、分支或其他规则自动生成映像和标记。这确保了一致性并减少了人工干预导致错误的可能性。</p>
<p>通过遵循这些映像标记的最佳做法,可以确保 Docker 映像的容器注册表更有条理、更可维护且用户友好。</p>
<h2 id="running-containers-yun-xing-rong-qi"><strong>Running Containers 运行容器</strong></h2>
<p>要启动一个新容器,我们使用 docker run 命令,后跟映像名称。基本语法如下:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run [options] IMAGE [COMMAND] [ARG...]
</span></code></pre>
<p>例如,要运行官方的 Nginx 镜像,我们将使用:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run -d -p 8080:80 nginx
</span></code></pre>
<p>这将启动一个新容器,并将主机的端口 8080 映射到容器的端口 80。</p>
<p><strong>Listing Containers 列出容器</strong>
要列出所有正在运行的容器,请使用 docker ps 命令。要查看所有容器(包括已停止的容器),请使用 -a 标志:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker container ls -a
</span></code></pre>
<p><strong>Accessing Containers 访问容器</strong>
要访问正在运行的容器的 shell请使用 docker exec 命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker exec -it CONTAINER_ID bash
</span></code></pre>
<p>将 CONTAINER_ID 替换为所需容器的 ID 或名称。您可以在 docker ps 的输出中找到它。</p>
<p><strong>Stopping Containers 停止容器</strong>
若要停止正在运行的容器,请使用 docker stop 命令,后跟容器 ID 或名称:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker container stop CONTAINER_ID
</span></code></pre>
<p><strong>Removing Containers 移除容器</strong>
容器停止后,我们可以使用 docker rm 命令后跟容器 ID 或名称将其删除:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker container rm CONTAINER_ID
</span></code></pre>
<p>若要在容器退出时自动删除容器,请在运行容器时添加 --rm 标志:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run --rm IMAGE
</span></code></pre>
<p><strong>使用 docker run 运行容器</strong>
在本节中,我们将讨论 docker run 命令,该命令使你能够运行 Docker 容器。docker run 命令从指定映像创建一个新容器并启动它。</p>
<p>docker run 命令的基本语法如下:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
</span><span>OPTIONS这些是命令行标志可用于调整容器的设置如内存约束、端口、环境变量等。
</span><span>IMAGE容器将运行的 Docker 映像。这可以是 Docker Hub 中的映像,也可以是存储在本地的您自己的映像。
</span><span>COMMAND这是容器启动时将在容器内执行的命令。如果未指定则将使用映像的默认入口点。
</span><span>ARG...:这些是可选参数,可以传递给正在执行的命令。
</span></code></pre>
<p><strong>常用选项</strong>
以下是一些常用的 docker run 选项:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>--name为容器分配名称使其更易于识别和管理。
</span><span>-p, --publish将容器的端口发布到主机。当您想要从容器外部访问容器内运行的服务时这很有用。
</span><span>-e, --env在容器内设置环境变量。您可以多次使用此选项来设置多个变量。
</span><span>-d, --detach在分离模式下运行容器在后台运行容器并且不在控制台中显示日志。
</span><span>-v, --volume将卷从主机绑定挂载到容器。这有助于持久保存容器生成的数据或在主机和容器之间共享文件。
</span></code></pre>
<p><strong>下面是一些示例命令,可帮助您了解如何使用 docker run</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>运行 Ubuntu 容器的交互式会话:
</span><span>docker run -it --name=my-ubuntu ubuntu
</span><span>运行 Nginx Web 服务器并在主机上发布端口 80
</span><span>docker run -d --name=my-nginx -p 80:80 nginx
</span><span>使用自定义环境变量运行 MySQL 容器以配置数据库:
</span><span>docker run -d --name=my-mysql -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=mydb -p 3306:3306 mysql
</span><span>使用绑定挂载卷运行容器:
</span><span>docker run -d --name=my-data -v /path/on/host:/path/in/container some-image
</span></code></pre>
<h2 id="docker-compose"><strong>Docker Compose</strong></h2>
<p>Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。它允许您使用名为 docker-compose.yml 的简单 YAML 文件创建、管理和运行应用程序。此文件描述了应用程序的服务、网络和卷,使您只需使用一个命令即可轻松运行和管理容器。</p>
<p>使用 Docker Compose 的一些好处包括:</p>
<ul>
<li>简化的容器管理Docker Compose 允许您在一个地方定义和配置所有服务、网络和卷,使其易于管理和维护。</li>
<li>可重现版本:与他人共享您的 docker-compose.yml 文件,以确保他们与您运行相同的环境和服务。</li>
<li>版本控制支持:可以对 Docker Compose 文件进行版本控制,以便更轻松地兼容不同版本的 Docker Compose 工具本身。</li>
</ul>
<p><strong>创建 Docker Compose 文件:</strong>
若要创建 docker-compose.yml 文件,请首先指定要使用的 Docker Compose 版本,然后指定要定义的服务。下面是基本 docker-compose.yml 文件的示例:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>version: &quot;3.9&quot;
</span><span>services:
</span><span> web:
</span><span> image: nginx:latest
</span><span> ports:
</span><span> - &quot;80:80&quot;
</span><span> db:
</span><span> image: mysql:latest
</span><span> environment:
</span><span> MYSQL_ROOT_PASSWORD: mysecretpassword
</span></code></pre>
<p>在此示例中,我们指定了两个服务:运行最新版本的 nginx 映像的 Web 服务器 web 和运行 MySQL 的数据库服务器 db。Web 服务器将其端口 80 公开给主机,并且数据库服务器为 root 密码设置了环境变量。</p>
<p><strong>运行 Docker Compose</strong>
要运行 Docker Compose 应用程序,只需导航到包含 docker-compose.yml 文件的目录并运行以下命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker-compose up
</span><span>Docker Compose 将读取文件并按指定顺序启动定义的服务。
</span></code></pre>
<p><strong>其他有用的命令:</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker-compose down停止并删除 docker-compose.yml 文件中定义的所有正在运行的容器、网络和卷。
</span><span>docker-compose ps列出 docker-compose.yml 文件中定义的所有容器的状态。
</span><span>docker-compose logs显示 docker-compose.yml 文件中定义的所有容器的日志。
</span><span>docker-compose build构建 docker-compose.yml 文件中定义的所有映像。
</span></code></pre>
<h2 id="yun-xing-shi-pei-zhi-xuan-xiang"><strong>运行时配置选项</strong></h2>
<p>运行时配置选项允许您在运行 Docker 容器时自定义它们的行为和资源。这些选项有助于管理容器资源、安全性和网络。以下是一些常用运行时配置选项的简要摘要:</p>
<p><strong>Resource Management 资源管理</strong>
CPU您可以使用 --cpus 和 --cpu-shares 选项限制容器的 CPU 使用率。--cpus 限制容器可以使用的 CPU 内核数,而 --cpu-shares 为容器分配 CPU 时间的相对份额。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run --cpus=2 --cpu-shares=512 your-image
</span></code></pre>
<p>内存:您可以使用 --memory 和 --memory-reservation 选项限制和保留容器的内存。这有助于防止容器消耗过多的系统资源。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run --memory=1G --memory-reservation=500M your-image
</span></code></pre>
<p><strong>Security 安全</strong>
用户:默认情况下,容器以 root 用户身份运行。为了提高安全性,您可以使用 --user 选项以其他用户或 UID 身份运行容器。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run --user 1000 your-image
</span></code></pre>
<p>只读根文件系统:为防止对容器文件系统进行不必要的更改,可以使用 --read-only 选项将根文件系统挂载为只读。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run --read-only your-image
</span></code></pre>
<p><strong>Networking 联网</strong>
发布端口:可以使用 --publish或 -p选项将容器的端口发布到主机系统。这允许外部系统访问容器化服务。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run -p 80:80 your-image
</span></code></pre>
<p>主机名和 DNS您可以使用 --hostname 和 --dns 选项自定义容器的主机名和 DNS 设置。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run --hostname=my-container --dns=8.8.8.8 your-image
</span></code></pre>
<p>包含这些运行时配置选项将使你能够有效地管理容器的资源、安全性和网络需求。有关可用运行时配置选项的完整列表,请参阅 Docker 的官方文档。</p>
</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.bid/learn-docker-6/">
<span class="button__icon"></span>&nbsp;
<span class="button__text">Docker学习笔记(六)</span>
</a>
</span>
<span class="button next">
<a href="https://blog.dich.bid/learn-docker-8/">
<span class="button__text">Docker学习笔记(八)</span>&nbsp;
<span class="button__icon"></span>
</a>
</span>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="footer__inner">
<div class="copyright">
<span>©
2025
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>
</div>
</body>
</html>