<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Docker on UOG的BLOG</title>
    <link>http://uogog.github.io/tags/docker/</link>
    <description>Recent content in Docker on UOG的BLOG</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sat, 04 Apr 2026 17:04:13 +0800</lastBuildDate>
    <atom:link href="http://uogog.github.io/tags/docker/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>docker_learn4_compose</title>
      <link>http://uogog.github.io/posts/docker_compose/</link>
      <pubDate>Sat, 04 Apr 2026 17:04:13 +0800</pubDate>
      <guid>http://uogog.github.io/posts/docker_compose/</guid>
      <description>&lt;h1 id=&#34;compose-的常用命令&#34;&gt;&#xA;  COMPOSE 的常用命令&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#compose-%e7%9a%84%e5%b8%b8%e7%94%a8%e5%91%bd%e4%bb%a4&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;h2 id=&#34;项目启动和停止&#34;&gt;&#xA;  项目启动和停止&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e9%a1%b9%e7%9b%ae%e5%90%af%e5%8a%a8%e5%92%8c%e5%81%9c%e6%ad%a2&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose up &lt;span class=&#34;c1&#34;&gt;# 启动服务 -d 后台运行&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose down &lt;span class=&#34;c1&#34;&gt;# 停止服务并删除容器、网络等资源&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose start &lt;span class=&#34;c1&#34;&gt;# 启动服务&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose stop &lt;span class=&#34;c1&#34;&gt;# 停止服务&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;调试和查看&#34;&gt;&#xA;  调试和查看&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e8%b0%83%e8%af%95%e5%92%8c%e6%9f%a5%e7%9c%8b&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose logs &lt;span class=&#34;c1&#34;&gt;# 查看日志 -f 实时查看日志 &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 这个log会显示所有服务的日志，如果想要查看某个服务的日志，可以指定服务名称，比如 docker compose logs web&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose ps &lt;span class=&#34;c1&#34;&gt;# 查看服务状态&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose &lt;span class=&#34;nb&#34;&gt;exec&lt;/span&gt; web bash &lt;span class=&#34;c1&#34;&gt;# 进入容器 web是服务名称 bash是要执行的命令&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;构建和更新&#34;&gt;&#xA;  构建和更新&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e6%9e%84%e5%bb%ba%e5%92%8c%e6%9b%b4%e6%96%b0&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose build &lt;span class=&#34;c1&#34;&gt;# 构建服务&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose pull &lt;span class=&#34;c1&#34;&gt;# 拉取最新的镜像&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;其他常用命令&#34;&gt;&#xA;  其他常用命令&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%85%b6%e4%bb%96%e5%b8%b8%e7%94%a8%e5%91%bd%e4%bb%a4&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose run web python manage.py &lt;span class=&#34;c1&#34;&gt;# 运行命令一次性命令&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose config &lt;span class=&#34;c1&#34;&gt;# 查看配置,看看自己写的docker-compose.yml有没有问题&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;其他命令&#34;&gt;&#xA;  其他命令&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%e5%85%b6%e4%bb%96%e5%91%bd%e4%bb%a4&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose version &lt;span class=&#34;c1&#34;&gt;# 查看版本&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose &lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 查看帮助&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose ps &lt;span class=&#34;c1&#34;&gt;# 查看服务状态&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose top &lt;span class=&#34;c1&#34;&gt;# 查看服务的进程信息&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 强制停止服务&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docket compose restart &lt;span class=&#34;c1&#34;&gt;# 重启服务&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose ports &lt;span class=&#34;c1&#34;&gt;# 查看服务的端口映射&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose ports web &lt;span class=&#34;c1&#34;&gt;# 查看web服务的端口映射&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose rm &lt;span class=&#34;c1&#34;&gt;# 删除服务容器 -v --force 强制删除&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose watch &lt;span class=&#34;c1&#34;&gt;# 开启服务的自动重启功能，当服务的配置文件发生变化时，自动重启服务&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>docker_learn3</title>
      <link>http://uogog.github.io/posts/docket_net/</link>
      <pubDate>Wed, 01 Apr 2026 18:02:56 +0800</pubDate>
      <guid>http://uogog.github.io/posts/docket_net/</guid>
      <description>&lt;h1 id=&#34;net&#34;&gt;&#xA;  NET&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#net&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;docker本身提供了三种默认的网络模式：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NETWORK ID     NAME      DRIVER    SCOPE&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;5cafb44e403b   bridge    bridge    &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;86f5bc4ba7e1   host      host      &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;688cd4970295   none      null      &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;bridge 就是创建了一个虚拟的网桥，容器通过这个网桥进行通信，默认情况下，容器之间是可以相互通信的，除非你使用了&amp;ndash;network=none来禁用网络。&#xA;默认的birge不能直接用容器名字进行通信，需要使用容器的IP地址进行通信，如果想要使用容器名字进行通信，可以创建一个用户自定义的网络，使用&amp;ndash;network参数指定网络名称即可。&lt;/p&gt;&#xA;&lt;p&gt;还有什么overlay网络，主要用于Swarm模式下的多主机网络，可以让不同主机上的容器通过一个虚拟网络进行通信。这个到底是什么我还没有深入了解，后续有机会再学习一下。&lt;/p&gt;</description>
    </item>
    <item>
      <title>docker_learn2</title>
      <link>http://uogog.github.io/posts/docket_file/</link>
      <pubDate>Sun, 29 Mar 2026 18:02:56 +0800</pubDate>
      <guid>http://uogog.github.io/posts/docket_file/</guid>
      <description>&lt;h1 id=&#34;docker_file就是docker脚本&#34;&gt;&#xA;  docker_file就是docker脚本&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#docker_file%e5%b0%b1%e6%98%afdocker%e8%84%9a%e6%9c%ac&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;基础知识：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;每个docker_file必须以FROM开头，指定基础镜像，例如：FROM ubuntu:20.04&lt;/li&gt;&#xA;&lt;li&gt;每个保留关键字必须大写，例如：RUN、COPY、CMD等&lt;/li&gt;&#xA;&lt;li&gt;执行从上到下的顺序构建镜像，每个命令都会创建一个新的镜像层&lt;/li&gt;&#xA;&lt;li&gt;#表示注释，注释内容不会被执行&lt;/li&gt;&#xA;&lt;li&gt;每个命令都会创建一个新的镜像层，尽量减少层数可以优化镜像大小和构建速度&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-docker&#34; data-lang=&#34;docker&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;FROM&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;#指定基础镜像，一切都从这个镜像开始构建，例如：FROM&lt;/span&gt; ubuntu:20.04&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# MAINTAINER #指定镜像的维护者，例如：MAINTAINER uogog 邮箱 已经废除&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;RUN&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#在镜像构建过程中执行命令，例如：RUN apt-get update &amp;amp;&amp;amp; apt-get install -y nginx&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;注意：一个RUN命令会创建一个新的镜像层，尽量合并多个命令为一个RUN命令可以减少层数和优化镜像大小&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ADD&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#将文件或目录添加到镜像中，例如：ADD ./app /app&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;WORKDIR&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;#设置工作目录，例如：WORKDIR&lt;/span&gt; /app&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;EXPOSE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;#声明容器运行时监听的端口，例如：EXPOSE&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;CMD&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#指定容器启动时执行的命令，例如：CMD [&amp;#34;nginx&amp;#34;, &amp;#34;-g&amp;#34;, &amp;#34;daemon off;&amp;#34;]&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;注意：CMD可以被docker run命令行参数覆盖，例如：docker run myimage &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Hello World&amp;#34;&lt;/span&gt;会覆盖CMD中的命令&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;多个CMD命令只有最后一个会生效，前面的CMD命令会被覆盖.&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;例如：CMD &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;echo&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;Hello&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; CMD &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;echo&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;World&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; 最终只会执行CMD &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;echo&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;World&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ENTRYPOINT&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#指定容器启动时执行的命令，类似于CMD，但更适合不可变的命令，例如：ENTRYPOINT [&amp;#34;python&amp;#34;, &amp;#34;app.py&amp;#34;]&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;甚至可以结合CMD定义默认参数&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;例如：ENTRYPOINT &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;python&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;app.py&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; CMD &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;--help&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; 这样运行容器时默认会执行python app.py --help&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;但如果docker run myimage --version则会覆盖CMD中的参数，最终执行python app.py --version&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ONBUILD&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;#指定一个命令，当这个镜像被用作基础镜像时会执行，例如：ONBUILD RUN echo &amp;#34;This is an onbuild command&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;COPY&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#将文件或目录复制到镜像中，例如：COPY ./app /app&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ENV&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#设置环境变量，例如：ENV ENV_VAR=value&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;本参数使用很多，需要结合实际&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;VOLUME&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 注意所有对VOLUME的路径的更改比如RUN mkdir /data都要在VOLUME之前&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;否则会被覆盖掉，VOLUME会创建一个匿名卷并挂载到指定路径上&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;如果路径已经存在数据，则会将数据复制到匿名卷中，如果路径不存在，则会创建一个空目录并挂载到匿名卷中&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ARG&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;TT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;d  a&amp;#34;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 这个是构建参数，可以在构建时通过--build-arg TT=&amp;#34;value&amp;#34;来传递值&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;默认值是&lt;span class=&#34;s2&#34;&gt;&amp;#34;d  a&amp;#34;&lt;/span&gt;，注意ARG只能在构建阶段使用，不能在运行阶段使用&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ARG&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;可以不提供&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;后面的默认值，但如果在构建时没有传递值，则该参数的值将为空字符串&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;CMD和ENTRYPOINT的区别在于CMD可以被docker run命令行参数覆盖，而ENTRYPOINT则不行，ENTRYPOINT更适合定义一个固定的命令，而CMD更适合定义默认参数&lt;/p&gt;</description>
    </item>
    <item>
      <title>docker_learn1</title>
      <link>http://uogog.github.io/posts/docker1/</link>
      <pubDate>Thu, 26 Mar 2026 11:21:58 +0800</pubDate>
      <guid>http://uogog.github.io/posts/docker1/</guid>
      <description>&lt;h2 id=&#34;docker的简单安装就直接看菜鸟教程就好&#34;&gt;&#xA;  docker的简单安装就直接看&lt;a href=&#34;https://www.runoob.com/docker/docker-tutorial.html&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;菜鸟教程&lt;/a&gt;就好&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#docker%e7%9a%84%e7%ae%80%e5%8d%95%e5%ae%89%e8%a3%85%e5%b0%b1%e7%9b%b4%e6%8e%a5%e7%9c%8b%e8%8f%9c%e9%b8%9f%e6%95%99%e7%a8%8b%e5%b0%b1%e5%a5%bd&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h1 id=&#34;docker的基本的一些东西&#34;&gt;&#xA;  docker的基本的一些东西&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#docker%e7%9a%84%e5%9f%ba%e6%9c%ac%e7%9a%84%e4%b8%80%e4%ba%9b%e4%b8%9c%e8%a5%bf&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;链接到标题&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;链接到标题&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;docker 里一个dockerfile 就是一个镜像的构建文件，里面写了这个镜像的构建步骤，构建完成后就可以运行这个镜像了&lt;/p&gt;&#xA;&lt;p&gt;注意一个镜像可以运行多个容器，容器是镜像的一个实例，容器之间是相互隔离的，可以有不同的环境变量，端口映射等&lt;/p&gt;&#xA;&lt;p&gt;主要的docker命令如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;docker run 启动一个新的容器并运行命令 docker run -d ubuntu&lt;/li&gt;&#xA;&lt;li&gt;docker ps 列出当前正在运行的容器 docker ps&lt;/li&gt;&#xA;&lt;li&gt;docker ps -a 列出所有容器（包括已停止的容器） docker ps -a&lt;/li&gt;&#xA;&lt;li&gt;docker build 使用 Dockerfile 构建镜像 docker build -t my-image .&lt;/li&gt;&#xA;&lt;li&gt;docker images 列出本地存储的所有镜像 docker images&lt;/li&gt;&#xA;&lt;li&gt;docker pull 从 Docker 仓库拉取镜像 docker pull ubuntu&lt;/li&gt;&#xA;&lt;li&gt;docker push 将镜像推送到 Docker 仓库 docker push my-image&lt;/li&gt;&#xA;&lt;li&gt;docker exec 在运行的容器中执行命令 docker exec -it container_name bash&lt;/li&gt;&#xA;&lt;li&gt;docker stop 停止一个或多个容器 docker stop container_name&lt;/li&gt;&#xA;&lt;li&gt;docker start 启动已停止的容器 docker start container_name 可以来个$(docker ps -a -q)来启动所有容器&lt;/li&gt;&#xA;&lt;li&gt;docker restart 重启一个容器 docker restart container_name&lt;/li&gt;&#xA;&lt;li&gt;docker rm 删除一个或多个容器 docker rm container_name&lt;/li&gt;&#xA;&lt;li&gt;docker rmi 删除一个或多个镜像 docker rmi my-image&lt;/li&gt;&#xA;&lt;li&gt;docker logs 查看容器的日志 docker logs container_name&lt;/li&gt;&#xA;&lt;li&gt;docker inspect 获取容器或镜像的详细信息 docker inspect container_name&lt;/li&gt;&#xA;&lt;li&gt;docker exec -it 进入容器的交互式终端 docker exec -it container_name /bin/bash&lt;/li&gt;&#xA;&lt;li&gt;docker network ls 列出所有 Docker 网络 docker network ls&lt;/li&gt;&#xA;&lt;li&gt;docker volume ls 列出所有 Docker 卷 docker volume ls&lt;/li&gt;&#xA;&lt;li&gt;docker-compose up 启动多容器应用（从 docker-compose.yml 文件） docker-compose up&lt;/li&gt;&#xA;&lt;li&gt;docker-compose down 停止并删除由 docker-compose 启动的容器、网络等 docker-compose down&lt;/li&gt;&#xA;&lt;li&gt;docker info 显示 Docker 系统的详细信息 docker info&lt;/li&gt;&#xA;&lt;li&gt;docker version 显示 Docker 客户端和守护进程的版本信息 docker version&lt;/li&gt;&#xA;&lt;li&gt;docker stats 显示容器的实时资源使用情况 docker stats&lt;/li&gt;&#xA;&lt;li&gt;docker login 登录 Docker 仓库 docker login&lt;/li&gt;&#xA;&lt;li&gt;docker logout 登出 Docker 仓库 docker logout&lt;/li&gt;&#xA;&lt;li&gt;常用选项说明:&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;-d：后台运行容器，例如 docker run -d ubuntu。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;-it：以交互式终端运行容器，例如 docker exec -it container_name bash。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;-t：为镜像指定标签，例如 docker build -t my-image .。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;-p：映射端口，例如 docker run -p 8080:80 nginx。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;-v：挂载卷，例如 docker run -v /host/path:/container/path nginx。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&amp;ndash;name：为容器指定名称，例如 docker run &amp;ndash;name my-container nginx。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;-e：设置环境变量，例如 docker run -e ENV_VAR=value nginx。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;e.g. 一次简易的docker安装镜像流程：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
