<?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 KSC</title>
		<link>https://sckwon.dev/tags/docker/</link>
		<description>Recent content in Docker on KSC</description>
		<generator>Hugo</generator>
		<language>ko-KR</language>
		
		
		
		
			<lastBuildDate>Tue, 21 Jul 2026 14:40:00 +0900</lastBuildDate>
		
			<atom:link href="https://sckwon.dev/tags/docker/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Docker 보안, 리소스 제한, BuildKit — 운영할 때 알아야 할 것들</title>
				<link>https://sckwon.dev/posts/docker-advanced/</link>
				<pubDate>Tue, 21 Jul 2026 14:40:00 +0900</pubDate>
				<guid>https://sckwon.dev/posts/docker-advanced/</guid>
				<description>&lt;h2 id=&#34;개요&#34;&gt;개요&lt;/h2&gt;&#xA;&lt;p&gt;기본편이 &amp;ldquo;컨테이너를 어떻게 만들고 실행하는가&amp;quot;였다면, 이 글은 &amp;ldquo;프로덕션에서 어떻게 안전하고 안정적으로 운영하는가&amp;quot;에 초점을 둡니다.&lt;/p&gt;&#xA;&lt;p&gt;각 주제를 정의와 기본 동작, 관련 옵션 순으로 정리합니다.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-컨테이너-보안&#34;&gt;1. 컨테이너 보안&lt;/h2&gt;&#xA;&#xA;&#xA;&#xA;&lt;details class=&#34;interview-answer&#34; open&gt;&#xA;  &lt;summary&gt;정리 보기&lt;/summary&gt;&#xA;  &lt;div class=&#34;interview-answer-body&#34;&gt;&#xA;    &lt;p&gt;&lt;strong&gt;컨테이너 실행 사용자(USER)&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;컨테이너 프로세스는 기본적으로 root(UID 0)로 실행됩니다. &lt;code&gt;USER&lt;/code&gt; 명령은 그 뒤에 오는 명령과 컨테이너 실행 시점의 사용자를 지정합니다.&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-dockerfile&#34; data-lang=&#34;dockerfile&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;node:20-alpine&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 앱 전용 유저 생성&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;RUN&lt;/span&gt; addgroup -S app &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; adduser -S app -G app&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WORKDIR&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;/app&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;COPY&lt;/span&gt; --chown&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;app:app . .&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;RUN&lt;/span&gt; npm ci --omit&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;dev&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 이후 명령과 컨테이너 실행 사용자를 app으로 지정&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;USER&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CMD&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;node&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;server.js&amp;#34;&lt;/span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;root로 실행된 컨테이너 프로세스는 마운트된 볼륨과 네트워크에 root 권한으로 접근합니다&lt;/li&gt;&#xA;&lt;li&gt;K8s에서는 &lt;code&gt;securityContext.runAsNonRoot: true&lt;/code&gt;로 강제할 수 있음&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;빌드 시 시크릿 전달 방식&lt;/strong&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Docker 컨테이너 개념부터 Compose까지 한 번에 정리</title>
				<link>https://sckwon.dev/posts/docker-basics/</link>
				<pubDate>Tue, 21 Jul 2026 12:38:13 +0900</pubDate>
				<guid>https://sckwon.dev/posts/docker-basics/</guid>
				<description>&lt;h2 id=&#34;개요&#34;&gt;개요&lt;/h2&gt;&#xA;&lt;p&gt;Docker는 애플리케이션을 컨테이너라는 격리된 환경에서 실행할 수 있게 해주는 도구입니다. 이미지에 애플리케이션과 의존성을 함께 담아 실행 환경을 고정합니다.&lt;/p&gt;&#xA;&lt;p&gt;이 글에서는 컨테이너 개념, Dockerfile, 네트워크, 볼륨, Compose를 정리합니다.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-컨테이너-vs-가상머신&#34;&gt;1. 컨테이너 vs 가상머신&lt;/h2&gt;&#xA;&#xA;&#xA;&#xA;&lt;details class=&#34;interview-answer&#34; open&gt;&#xA;  &lt;summary&gt;정리 보기&lt;/summary&gt;&#xA;  &lt;div class=&#34;interview-answer-body&#34;&gt;&#xA;    &lt;p&gt;&lt;strong&gt;가상머신 (VM)&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;&#xA;      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;┌─────────────┐  ┌─────────────┐&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│    App A    │  │    App B    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   Libs/Bins │  │   Libs/Bins │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│  Guest OS   │  │  Guest OS   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├─────────────┴──┴─────────────┤&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│         Hypervisor           │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├──────────────────────────────┤&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│          Host OS             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;└──────────────────────────────┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;각 VM마다 완전한 게스트 OS가 올라감&lt;/li&gt;&#xA;&lt;li&gt;실행하려면 게스트 OS 부팅 과정이 필요함&lt;/li&gt;&#xA;&lt;li&gt;완전한 격리&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;컨테이너&lt;/strong&gt;&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
