<?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 Study Note - 其雁过无痕</title><link>https://gyqblog.top/tags/docker/</link><description>Recent content in Docker on Study Note - 其雁过无痕</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>© 2026 其雁过无痕</copyright><lastBuildDate>Sat, 30 May 2026 18:08:00 +0800</lastBuildDate><atom:link href="https://gyqblog.top/tags/docker/index.xml" rel="self" type="application/rss+xml"/><item><title>任务 8：后端接口上线与 Nginx 代理</title><link>https://gyqblog.top/posts/vps-combat/task-8-nginx-proxy/</link><pubDate>Sat, 30 May 2026 18:08:00 +0800</pubDate><guid>https://gyqblog.top/posts/vps-combat/task-8-nginx-proxy/</guid><description>&lt;p&gt;在经历了前面的基础环境搭建后，本任务我们将真正把后端服务暴露给公网。&lt;/p&gt;</description></item><item><title>任务 7：部署限制内存的数据库</title><link>https://gyqblog.top/posts/vps-combat/task-7-database/</link><pubDate>Sun, 17 May 2026 18:39:00 +0800</pubDate><guid>https://gyqblog.top/posts/vps-combat/task-7-database/</guid><description>&lt;p&gt;在服务器部署的进阶之路上，部署限制内存的数据库是一个必经的关卡 。对于这种小内存的 VPS（比如 RackNerd），如果直接裸跑默认配置的 MySQL 8.0，它会一口气吞掉 400MB 甚至更多的内存，极易导致服务器 OOM（内存溢出）死机。&lt;/p&gt;</description></item><item><title>任务 6：搭建全网关架构 —— 域名解析、SSL 证书与 Docker Nginx 部署</title><link>https://gyqblog.top/posts/vps-combat/task-6-gateway/</link><pubDate>Fri, 15 May 2026 00:57:00 +0800</pubDate><guid>https://gyqblog.top/posts/vps-combat/task-6-gateway/</guid><description>&lt;h2 class="relative group"&gt;📝 1. 背景与目标
 &lt;div id="-1-背景与目标" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-1-%e8%83%8c%e6%99%af%e4%b8%8e%e7%9b%ae%e6%a0%87" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;在云服务器（VPS）上部署项目时，直接暴露端口既不安全也不优雅。本次实战的目标是：&lt;/p&gt;</description></item><item><title>任务 5：配置 Nginx 与静态网站的前端部署</title><link>https://gyqblog.top/posts/vps-combat/task-5-nginx/</link><pubDate>Thu, 07 May 2026 12:39:00 +0800</pubDate><guid>https://gyqblog.top/posts/vps-combat/task-5-nginx/</guid><description>&lt;p&gt;折腾服务器，从“在宿主机上乱装一气”到“全面拥抱容器化” 。如何使用 Docker 和 Nginx，将纯前端项目托管到云服务器上，并实现公网访问 。&lt;/p&gt;</description></item><item><title>番外：1G 小内存 VPS 部署 Java JSP 项目实战：Docker 本地构建 + 远程运行完美方案</title><link>https://gyqblog.top/posts/tech-extras/jsp-deployment/</link><pubDate>Wed, 29 Apr 2026 02:04:00 +0800</pubDate><guid>https://gyqblog.top/posts/tech-extras/jsp-deployment/</guid><description>&lt;p&gt;在拥有了一台属于自己的 VPS（如 1核 1G内存，配置了 2G Swap）后，很多新手在尝试部署 Java 项目时，往往会选择直接在服务器上安装 Maven 或运行 &lt;code&gt;docker build&lt;/code&gt;。但现实很残酷：Java 编译极其消耗内存，1G 的内存在构建瞬间就会被挤爆，导致系统卡死或触发 OOM (Out Of Memory) 杀掉进程。&lt;/p&gt;</description></item><item><title>番外：Dockerfile 常用指令详解</title><link>https://gyqblog.top/posts/tech-extras/dockerfile-tips/</link><pubDate>Wed, 29 Apr 2026 00:13:00 +0800</pubDate><guid>https://gyqblog.top/posts/tech-extras/dockerfile-tips/</guid><description>&lt;h3 class="relative group"&gt;基础环境设置
 &lt;div id="基础环境设置" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%9f%ba%e7%a1%80%e7%8e%af%e5%a2%83%e8%ae%be%e7%bd%ae" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FROM&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;指定基础镜像&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：这是每个 &lt;code&gt;Dockerfile&lt;/code&gt; 的&lt;strong&gt;第一条指令&lt;/strong&gt;（除注释外）。它决定了你的应用运行在什么环境之上。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;code&gt;FROM ubuntu:24.04&lt;/code&gt; （基于 Ubuntu 24.04 系统）或 &lt;code&gt;FROM nginx:alpine&lt;/code&gt; （基于轻量级的 Nginx 镜像）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;WORKDIR&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;设置工作目录&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：相当于 Linux 里的 &lt;code&gt;cd&lt;/code&gt; 命令。后续的 &lt;code&gt;RUN&lt;/code&gt;、&lt;code&gt;CMD&lt;/code&gt;、&lt;code&gt;COPY&lt;/code&gt; 等指令都会在这个目录下执行。如果目录不存在，Docker 会自动帮你创建。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;code&gt;WORKDIR /app&lt;/code&gt; （将后续操作的默认路径设为容器内的 &lt;code&gt;/app&lt;/code&gt; 目录）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;2. 文件复制
 &lt;div id="2-文件复制" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2-%e6%96%87%e4%bb%b6%e5%a4%8d%e5%88%b6" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;COPY&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;复制文件/目录到容器中&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：将宿主机（你的电脑或服务器）上的文件或目录，原封不动地拷贝到容器的指定路径下。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;code&gt;COPY . /app&lt;/code&gt; （将当前宿主机目录下的所有文件，复制到容器的 &lt;code&gt;/app&lt;/code&gt; 目录下）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ADD&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;高级复制&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：和 &lt;code&gt;COPY&lt;/code&gt; 类似，但带有额外功能。如果复制的是一个本地的 &lt;code&gt;.tar.gz&lt;/code&gt; 压缩包，&lt;code&gt;ADD&lt;/code&gt; 会自动解压到目标路径；它也支持填入一个网络 URL 来下载文件。&lt;strong&gt;（新手推荐优先使用 &lt;code&gt;COPY&lt;/code&gt;，语义更清晰）&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;3. 执行命令与配置
 &lt;div id="3-执行命令与配置" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#3-%e6%89%a7%e8%a1%8c%e5%91%bd%e4%bb%a4%e4%b8%8e%e9%85%8d%e7%bd%ae" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;RUN&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;在构建镜像时执行命令&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：这是构建阶段的主力军。通常用来安装软件包、创建文件夹、配置环境等。&lt;strong&gt;注意：每次 &lt;code&gt;RUN&lt;/code&gt; 都会生成一个新的镜像层&lt;/strong&gt;，所以通常会把多条命令用 &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; 连起来写。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;code&gt;RUN apt-get update &amp;amp;&amp;amp; apt-get install -y curl&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ENV&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;设置环境变量&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：定义环境变量，后续的 &lt;code&gt;RUN&lt;/code&gt; 指令可以使用，并且这些变量也会一直保留到容器运行阶段供你的程序读取。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;code&gt;ENV MYSQL_ROOT_PASSWORD=my-secret-pw&lt;/code&gt; 或 &lt;code&gt;ENV PORT=8080&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EXPOSE&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;声明监听端口&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：这只是一个&lt;strong&gt;声明&lt;/strong&gt;，告诉使用这个镜像的人，该容器内部的程序会使用哪个端口。它&lt;em&gt;不会&lt;/em&gt;自动将端口映射到宿主机，映射依然需要在运行 &lt;code&gt;docker run&lt;/code&gt; 时加上 &lt;code&gt;-p&lt;/code&gt; 参数或在 &lt;code&gt;docker-compose.yml&lt;/code&gt; 中配置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;code&gt;EXPOSE 80&lt;/code&gt; （声明容器内的 Web 服务使用 80 端口）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;4. 容器启动指令
 &lt;div id="4-容器启动指令" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#4-%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8%e6%8c%87%e4%bb%a4" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CMD&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;容器启动时的默认命令&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：指定容器跑起来之后要做的第一件事（例如启动 Nginx、运行 Java 后端应用等）。如果用户在 &lt;code&gt;docker run&lt;/code&gt; 时手动指定了其他命令，&lt;code&gt;CMD&lt;/code&gt; 的内容会被&lt;strong&gt;覆盖&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;code&gt;CMD [&amp;quot;nginx&amp;quot;, &amp;quot;-g&amp;quot;, &amp;quot;daemon off;&amp;quot;]&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ENTRYPOINT&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;容器启动的主入口&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：和 &lt;code&gt;CMD&lt;/code&gt; 类似，但它&lt;strong&gt;不会被轻易覆盖&lt;/strong&gt;。通常用于让容器表现得像一个独立的可执行程序。如果同时存在 &lt;code&gt;ENTRYPOINT&lt;/code&gt; 和 &lt;code&gt;CMD&lt;/code&gt;，&lt;code&gt;CMD&lt;/code&gt; 的内容会作为参数传递给 &lt;code&gt;ENTRYPOINT&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h3 class="relative group"&gt;综合示例
 &lt;div id="综合示例" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%bb%bc%e5%90%88%e7%a4%ba%e4%be%8b" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;为了方便理解，这里提供一个部署简单前端/静态网页的通用 &lt;code&gt;Dockerfile&lt;/code&gt; 模板：&lt;/p&gt;</description></item><item><title>番外：客户端和服务器谁为工作方的建议</title><link>https://gyqblog.top/posts/tech-extras/cs-choose/</link><pubDate>Mon, 27 Apr 2026 08:09:00 +0800</pubDate><guid>https://gyqblog.top/posts/tech-extras/cs-choose/</guid><description>&lt;h3 class="relative group"&gt;方案一：Windows 不装 Docker
 &lt;div id="方案一windows-不装-docker" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%96%b9%e6%a1%88%e4%b8%80windows-%e4%b8%8d%e8%a3%85-docker" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;这种方式下，你的 Windows 只负责写代码和生成基础的打包文件，镜像的构建全在服务器上。&lt;/p&gt;</description></item><item><title>任务 4：全面拥抱 Docker 与容器化部署初体验</title><link>https://gyqblog.top/posts/vps-combat/task-4-docker/</link><pubDate>Sat, 25 Apr 2026 17:32:00 +0800</pubDate><guid>https://gyqblog.top/posts/vps-combat/task-4-docker/</guid><description>&lt;h2 class="relative group"&gt;背景与目标
 &lt;div id="背景与目标" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af%e4%b8%8e%e7%9b%ae%e6%a0%87" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;在完成了服务器基础的安全加固与虚拟内存分配后，环境搭建正式进入容器化阶段。本次实践的核心目标是全面拥抱 Docker。摒弃传统的“直接在宿主机装一切”的做法，转而通过编写 &lt;code&gt;docker-compose.yml&lt;/code&gt; 文件来统一管理和启动服务 。&lt;/p&gt;</description></item></channel></rss>