{"id":1665,"date":"2026-04-08T12:58:47","date_gmt":"2026-04-08T12:58:47","guid":{"rendered":"https:\/\/wayhope.kro.kr\/?p=1665"},"modified":"2026-08-31T07:32:38","modified_gmt":"2026-08-31T07:32:38","slug":"docker-%ed%95%b5%ec%8b%ac-%ec%a0%95%eb%a6%ac","status":"publish","type":"post","link":"https:\/\/wayhope.kro.kr\/?p=1665","title":{"rendered":"Docker \ud575\uc2ec \uc815\ub9ac"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Docker\uc758 \ubaa9\uc801\uc740 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uacfc \uc2e4\ud589\uc5d0 \ud544\uc694\ud55c \ud658\uacbd\uc744 \ud558\ub098\uc758 \ubc30\ud3ec \ub2e8\uc704\ub85c \ubb36\ub294 \uac83\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Application -&gt; Runtime -&gt; Dependencies -&gt; Configuration -&gt; Image -&gt; Container -&gt; Process<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac1c\ubc1c \ud658\uacbd\uacfc \uc11c\ubc84 \ud658\uacbd\uc758 \ucc28\uc774\ub85c \ubc1c\uc0dd\ud558\ub294 \ubb38\uc81c\ub97c \uc904\uc778\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Source Code -&gt; Dockerfile -&gt; Image -&gt; Registry -&gt; Server -&gt; Container<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker \uc804\uccb4 \uad6c\uc870<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Docker\uc758 \ud575\uc2ec \uad00\uacc4\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Dockerfile -&gt; Image -&gt; Container<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ubbf8\uc9c0\ub294 \ucee8\ud14c\uc774\ub108\ub97c \uc0dd\uc131\ud558\uae30 \uc704\ud55c \ud15c\ud50c\ub9bf\uc774\uace0, \ucee8\ud14c\uc774\ub108\ub294 \uc774\ubbf8\uc9c0\ub97c \uae30\ubc18\uc73c\ub85c \uc2e4\ud589\ub418\ub294 \uc778\uc2a4\ud134\uc2a4\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Image -&gt; Container A\nImage -&gt; Container B\nImage -&gt; Container C<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker Engine<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Docker CLI\uc5d0\uc11c \uba85\ub839\uc744 \uc2e4\ud589\ud558\uba74 Docker Engine\uc5d0 \uc791\uc5c5\uc744 \uc694\uccad\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Docker CLI -&gt; Docker API -&gt; Docker Engine -&gt; Image \/ Container \/ Network \/ Volume<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Docker \uba85\ub839\uc740 \ud06c\uac8c \ub2e4\uc74c \ud750\ub984\uc73c\ub85c \uc774\ud574\ud558\uba74 \ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker build -&gt; Image \uc0dd\uc131\ndocker pull -&gt; Image \ub2e4\uc6b4\ub85c\ub4dc\ndocker run -&gt; Container \uc0dd\uc131 \ubc0f \uc2e4\ud589\ndocker stop -&gt; Container \uc911\uc9c0\ndocker rm -&gt; Container \uc0ad\uc81c<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker Image<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Image\ub294 \uc5ec\ub7ec Layer\ub85c \uad6c\uc131\ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Base Image -&gt; System Package -&gt; Runtime -&gt; Dependencies -&gt; Application Code -&gt; Image<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dockerfile\uc744 \uae30\ubc18\uc73c\ub85c Image\ub97c \ub9cc\ub4e0\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Dockerfile -&gt; docker build -&gt; Image<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dockerfile\uc758 \uc77c\ubc18\uc801\uc778 \uad6c\uc131 \ud750\ub984\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM -&gt; WORKDIR -&gt; COPY -&gt; RUN -&gt; COPY -&gt; CMD<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 Node.js \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc740 \ub2e4\uc74c\ucc98\ub7fc \uad6c\uc131\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Node Image -&gt; Working Directory -&gt; package.json -&gt; npm install -&gt; Source Code -&gt; Application Start<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker Layer\uc640 Build Cache<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Dockerfile\uc758 \uac01 \ub2e8\uacc4\ub294 Layer\ub97c \ud615\uc131\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM -&gt; Layer\nRUN -&gt; Layer\nCOPY -&gt; Layer\nRUN -&gt; Layer<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ubcc0\uacbd\uc774 \uc801\uc740 \uc791\uc5c5\uc744 \uc55e\uc5d0 \ubc30\uce58\ud558\uba74 Cache\ub97c \ud65c\uc6a9\ud558\uae30 \uc88b\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package.json -&gt; npm install -&gt; Cache\nSource Code -&gt; COPY -&gt; \ubcc0\uacbd \ubc1c\uc0dd<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c \uc77c\ubc18\uc801\uc778 Node.js Dockerfile\uc740:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package.json -&gt; Dependency Install -&gt; Source Code Copy -&gt; Application Start<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc21c\uc11c\ub85c \uad6c\uc131\ud558\ub294 \uacbd\uc6b0\uac00 \ub9ce\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Container<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Container\ub294 Image\ub97c \uae30\ubc18\uc73c\ub85c \uc2e4\ud589\ub418\ub294 \uaca9\ub9ac\ub41c \ud504\ub85c\uc138\uc2a4 \ud658\uacbd\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Image -&gt; docker run -&gt; Container -&gt; Process<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Container\ub294 VM\uacfc \uad6c\uc870\uac00 \ub2e4\ub974\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Host OS -&gt; Docker Engine -&gt; Container -&gt; Application<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">VM\uc740 \uc77c\ubc18\uc801\uc73c\ub85c:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Host OS -&gt; Hypervisor -&gt; Guest OS -&gt; Application<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Container\ub294 Guest OS\ub97c \ubcc4\ub3c4\ub85c \uc2e4\ud589\ud558\ub294 \ubc29\uc2dd\uc774 \uc544\ub2c8\ub77c \ud638\uc2a4\ud2b8\uc758 \ucee4\ub110 \uae30\ub2a5\uc744 \ud65c\uc6a9\ud574 \ud504\ub85c\uc138\uc2a4\uc640 \ub9ac\uc18c\uc2a4\ub97c \uaca9\ub9ac\ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Container\uc640 VM<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>VM -&gt; Guest OS -&gt; Application<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Container -&gt; Host Kernel -&gt; Application Process<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c Container\ub294 \uc791\uc740 VM\uc774\ub77c\uace0 \ubcf4\ub294 \uac83\ubcf4\ub2e4 <strong>\uaca9\ub9ac\ub41c \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc2e4\ud589 \ud658\uacbd<\/strong>\uc73c\ub85c \uc774\ud574\ud558\ub294 \uac83\uc774 \uc815\ud655\ud558\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker Registry<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Image\ub97c \ub2e4\ub978 \ud658\uacbd\uc73c\ub85c \uc804\ub2ec\ud558\ub824\uba74 Registry\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Dockerfile -&gt; docker build -&gt; Image -&gt; docker push -&gt; Registry<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc11c\ubc84\uc5d0\uc11c\ub294:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Registry -&gt; docker pull -&gt; Image -&gt; docker run -&gt; Container<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc804\uccb4 \ubc30\ud3ec \ud750\ub984\uc740:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Source Code -&gt; Dockerfile -&gt; Image -&gt; Registry -&gt; Server -&gt; Container<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker Volume<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Container \ub0b4\ubd80\uc5d0 \uc911\uc694\ud55c \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\uba74 Container \uc0ad\uc81c \uc2dc \ub370\uc774\ud130\uac00 \uc0ac\ub77c\uc9c8 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub530\ub77c\uc11c \uc601\uc18d \ub370\uc774\ud130\ub294 Volume\uc73c\ub85c \ubd84\ub9ac\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Container -&gt; Application -&gt; Data -&gt; Volume<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">MySQL\uc744 \uc608\ub85c \ub4e4\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL Container -&gt; Database Files -&gt; Volume<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Container\uc640 \ub370\uc774\ud130\uc758 \uad00\uacc4\ub294 \ub2e4\uc74c\ucc98\ub7fc \uc7a1\uc73c\uba74 \ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Container -&gt; \uc2e4\ud589 \ud658\uacbd\nVolume -&gt; \uc601\uc18d \ub370\uc774\ud130<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Container\ub97c \uc0ad\uc81c\ud558\uace0 \ub2e4\uc2dc \ub9cc\ub4e4\uc5b4\ub3c4 Volume\uc744 \uc5f0\uacb0\ud558\uba74 \ub370\uc774\ud130\ub97c \uc720\uc9c0\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Container A -&gt; Volume\nContainer A \uc0ad\uc81c -&gt; Volume \uc720\uc9c0\nContainer B -&gt; \ub3d9\uc77c Volume -&gt; \uae30\uc874 \ub370\uc774\ud130 \uc0ac\uc6a9<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker Network<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\ub7ec Container\uac00 \ud1b5\uc2e0\ud558\ub824\uba74 Docker Network\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Application Container -&gt; Docker Network -&gt; Database Container<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\ub7ec \uc11c\ube44\uc2a4\uac00 \uac19\uc740 Network\uc5d0 \uc5f0\uacb0\ub418\uba74 \uc11c\ube44\uc2a4 \uc774\ub984\uc744 \ud1b5\ud574 \ud1b5\uc2e0\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Application -&gt; db -&gt; Database<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc804\uccb4 \uad6c\uc870\ub294:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Application Container -&gt; Docker Network -&gt; Database Container<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker Compose<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Container \ud558\ub098\ub9cc \uc2e4\ud589\ud560 \ub54c\ub294 <code>docker run<\/code>\uc73c\ub85c \ucda9\ubd84\ud558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\ub7ec Container\ub97c \ud568\uaed8 \uc2e4\ud589\ud558\ub824\uba74 Compose\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>compose.yaml -&gt; Application Container + Database Container + Redis Container -&gt; Docker Network<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Compose\ub97c \uc774\uc6a9\ud55c \uc2e4\ud589 \ud750\ub984\uc740:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>compose.yaml -&gt; docker compose up -&gt; Containers \uc0dd\uc131 -&gt; Network \uc5f0\uacb0 -&gt; Services \uc2e4\ud589<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc885\ub8cc\ud560 \ub54c\ub294:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose down -&gt; Containers \uc885\ub8cc \ubc0f \uc81c\uac70<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Compose \uc804\uccb4 \uad6c\uc870<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>compose.yaml -&gt; Application -&gt; Database -&gt; Redis -&gt; Network -&gt; Volume<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uad6c\uc870\ub294:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client -&gt; Application Container -&gt; Database Container\nClient -&gt; Application Container -&gt; Redis Container<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Port Mapping<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Container \ub0b4\ubd80 Port\uc640 Host Port\ub294 \uc11c\ub85c \ub2e4\ub97c \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Host : 9000 -&gt; Container : 8080<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Docker\uc5d0\uc11c\ub294:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run -p 9000:8080<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud615\ud0dc\ub85c \uc5f0\uacb0\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc804\uccb4 \ud750\ub984\uc740:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client -&gt; Host : 9000 -&gt; Container : 8080 -&gt; Application<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Environment<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Image \uc790\uccb4\ub294 \ucd5c\ub300\ud55c \ub3d9\uc77c\ud558\uac8c \uc720\uc9c0\ud558\uace0 \uc2e4\ud589 \ud658\uacbd\uc5d0 \ub530\ub77c \ub2ec\ub77c\uc9c0\ub294 \uac12\uc740 \uc678\ubd80\uc5d0\uc11c \uc8fc\uc785\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Image -&gt; Container -&gt; Environment Variables -&gt; Application Configuration<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Container -&gt; DB_HOST -&gt; Database\nContainer -&gt; DB_PORT -&gt; Database\nContainer -&gt; API_KEY -&gt; External Service<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud658\uacbd\uc5d0 \ub530\ub77c \ub2e4\ub978 \uc124\uc815\uc744 \uc8fc\uc785\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Same Image -&gt; Development Environment\nSame Image -&gt; Staging Environment\nSame Image -&gt; Production Environment<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker Build<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Image\ub97c \ub9cc\ub4dc\ub294 \uacfc\uc815\uc740:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Source Code -&gt; Dockerfile -&gt; docker build -&gt; Image<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dockerfile \ub0b4\ubd80\uc5d0\uc11c\ub294:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Base Image -&gt; Dependencies -&gt; Application -&gt; Image Layer<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker Run<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Container\ub97c \uc2e4\ud589\ud558\ub294 \uacfc\uc815\uc740:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Image -&gt; docker run -&gt; Container -&gt; Process<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Port\uc640 Environment\ub97c \ud3ec\ud568\ud558\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Image -&gt; docker run -&gt; Port Mapping + Environment + Volume -&gt; Container -&gt; Application<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker \ubc30\ud3ec<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Docker\ub97c \uc2e4\uc81c \uc11c\ubc84\uc5d0 \ubc30\ud3ec\ud558\ub294 \uae30\ubcf8 \ud750\ub984\uc740:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Git -&gt; Dockerfile -&gt; docker build -&gt; Image -&gt; Registry -&gt; Server -&gt; docker pull -&gt; Container<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">CI\/CD\uae4c\uc9c0 \uc5f0\uacb0\ud558\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Git Push -&gt; CI -&gt; Test -&gt; Docker Build -&gt; Image -&gt; Registry -&gt; Deployment -&gt; Container<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker\uc640 Kubernetes<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Docker\uc640 Kubernetes\ub294 \uc5ed\ud560\uc774 \ub2e4\ub974\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Docker -&gt; Image Build -&gt; Container Packaging -&gt; Container Execution<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Kubernetes -&gt; Container Scheduling -&gt; Scaling -&gt; Service Discovery -&gt; Health Check -&gt; Rolling Update<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc804\uccb4\uc801\uc778 \uad00\uacc4\ub294:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Application -&gt; Docker Image -&gt; Container -&gt; Kubernetes -&gt; Multiple Servers<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kubernetes\uc5d0\uc11c\ub294 Docker Engine \uc790\uccb4\uac00 \ud544\uc218\uc778 \uac83\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Kubernetes -&gt; CRI -&gt; Container Runtime<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ud45c\uc801\uc778 Container Runtime\uc73c\ub85c <code>containerd<\/code>, <code>CRI-O<\/code> \ub4f1\uc774 \uc0ac\uc6a9\ub420 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker\uc640 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uad6c\uc870<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \uc11c\ubc84 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c\ub294 \ud558\ub098\uc758 Container\ub9cc \uc874\uc7ac\ud558\uc9c0 \uc54a\uc744 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client -&gt; Application Container -&gt; Database Container\nClient -&gt; Application Container -&gt; Redis Container<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Compose\ub97c \uc0ac\uc6a9\ud558\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>compose.yaml -&gt; Application -&gt; Database -&gt; Redis -&gt; Network -&gt; Volume<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker \uc804\uccb4 \ubc30\ud3ec \ud750\ub984<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">\uac00\uc7a5 \uc911\uc694\ud55c \uc804\uccb4 \ud750\ub984\uc740 \uc774\uac83\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Source Code -&gt; Dockerfile -&gt; docker build -&gt; Image -&gt; Registry -&gt; Server -&gt; docker pull -&gt; Container -&gt; Application<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub370\uc774\ud130\uae4c\uc9c0 \ud3ec\ud568\ud558\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Source Code -&gt; Dockerfile -&gt; Image -&gt; Registry -&gt; Container -&gt; Application -&gt; Volume<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub124\ud2b8\uc6cc\ud06c\uae4c\uc9c0 \ud3ec\ud568\ud558\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client -&gt; Host Port -&gt; Application Container -&gt; Docker Network -&gt; Database Container -&gt; Volume<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker\uc758 \ud575\uc2ec \uad00\uacc4<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>Dockerfile -&gt; Image -&gt; Container<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Image -&gt; Registry -&gt; Server<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Container -&gt; Network -&gt; Container<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Container -&gt; Volume<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Container -&gt; Environment -&gt; Application<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Compose -&gt; Multiple Containers -&gt; Network -&gt; Volume<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker \ud575\uc2ec \uba85\ub839 \ud750\ub984<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>docker build -&gt; Image \uc0dd\uc131<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>docker pull -&gt; Registry\uc5d0\uc11c Image \ub2e4\uc6b4\ub85c\ub4dc<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>docker run -&gt; Image\uc5d0\uc11c Container \uc2e4\ud589<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>docker ps -&gt; Container \ud655\uc778<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>docker logs -&gt; Container \ub85c\uadf8 \ud655\uc778<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>docker exec -&gt; Container \ub0b4\ubd80 \uba85\ub839 \uc2e4\ud589<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>docker stop -&gt; Container \uc911\uc9c0<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>docker rm -&gt; Container \uc0ad\uc81c<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>docker rmi -&gt; Image \uc0ad\uc81c<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Compose\ub294:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose up -&gt; \uc804\uccb4 \uc11c\ube44\uc2a4 \uc2e4\ud589<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose down -&gt; \uc804\uccb4 \uc11c\ube44\uc2a4 \uc885\ub8cc<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose ps -&gt; \uc11c\ube44\uc2a4 \uc0c1\ud0dc \ud655\uc778<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose logs -&gt; \uc11c\ube44\uc2a4 \ub85c\uadf8 \ud655\uc778<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">\ucd5c\uc885 \ud575\uc2ec \ud750\ub984<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Docker\uc758 \uc804\uccb4 \uac1c\ub150\uc744 \ud558\ub098\ub85c \uc555\ucd95\ud558\uba74 \ub2e4\uc74c\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Application -&gt; Dockerfile -&gt; Image -&gt; Registry -&gt; Server -&gt; Container -&gt; Process<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucee8\ud14c\uc774\ub108 \uc8fc\ubcc0\uc758 \uc2e4\ud589 \ud658\uacbd\uae4c\uc9c0 \ud3ec\ud568\ud558\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Image -&gt; Container -&gt; Environment + Network + Volume -&gt; Application<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\ub7ec \uc11c\ube44\uc2a4\ub97c \ubb36\uc73c\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Compose -&gt; Application Container + Database Container + Redis Container -&gt; Network + Volume<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">CI\/CD\uae4c\uc9c0 \uc5f0\uacb0\ud558\uba74:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Git Push -&gt; CI -&gt; Test -&gt; Docker Build -&gt; Image -&gt; Registry -&gt; Deployment -&gt; Container<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uacb0\uad6d Docker\uc5d0\uc11c \uac00\uc7a5 \uc911\uc694\ud55c \ud750\ub984\uc740 \ud558\ub098\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Dockerfile -&gt; Image -&gt; Container<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 \uadf8 \uc8fc\ubcc0\uc5d0:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Image -&gt; Registry\nContainer -&gt; Network\nContainer -&gt; Volume\nContainer -&gt; Environment\nCompose -&gt; Multiple Containers<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac00 \ubd99\ub294\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Docker\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uacfc \uc2e4\ud589 \ud658\uacbd\uc744 Image\ub85c \ud328\ud0a4\uc9d5\ud558\uace0, \uadf8 Image\ub97c Container\ub85c \uc2e4\ud589\ud558\ub294 \uad6c\uc870\ub2e4.<\/strong><br>\uc774\uac83\ub9cc \uc911\uc2ec\uc5d0 \ub193\uc73c\uba74 Dockerfile, Registry, Volume, Network, Compose, CI\/CD\uac00 \uc804\ubd80 \uc5b4\ub514\uc5d0 \uc704\uce58\ud558\ub294\uc9c0 \uc790\uc5f0\uc2a4\ub7fd\uac8c \uc5f0\uacb0\ub41c\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Docker\uc758 \ubaa9\uc801\uc740 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uacfc \uc2e4\ud589\uc5d0 \ud544\uc694\ud55c \ud658\uacbd\uc744 \ud558\ub098\uc758 \ubc30\ud3ec \ub2e8\uc704\ub85c \ubb36\ub294 \uac83\uc774\ub2e4. \uac1c\ubc1c \ud658\uacbd\uacfc \uc11c\ubc84 \ud658\uacbd\uc758 \ucc28\uc774\ub85c \ubc1c\uc0dd\ud558\ub294 \ubb38\uc81c\ub97c \uc904\uc778\ub2e4. Docker \uc804\uccb4 \uad6c\uc870 Docker\uc758 \ud575\uc2ec \uad00\uacc4\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4. \uc774\ubbf8\uc9c0\ub294 \ucee8\ud14c\uc774\ub108\ub97c \uc0dd\uc131\ud558\uae30 \uc704\ud55c \ud15c\ud50c\ub9bf\uc774\uace0, \ucee8\ud14c\uc774\ub108\ub294 \uc774\ubbf8\uc9c0\ub97c \uae30\ubc18\uc73c\ub85c \uc2e4\ud589\ub418\ub294 \uc778\uc2a4\ud134\uc2a4\ub2e4. Docker Engine Docker CLI\uc5d0\uc11c \uba85\ub839\uc744 \uc2e4\ud589\ud558\uba74 Docker Engine\uc5d0 \uc791\uc5c5\uc744 \uc694\uccad\ud55c\ub2e4. Docker \uba85\ub839\uc740 \ud06c\uac8c \ub2e4\uc74c \ud750\ub984\uc73c\ub85c \uc774\ud574\ud558\uba74 \ub41c\ub2e4. Docker [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[49],"tags":[],"class_list":["post-1665","post","type-post","status-publish","format-standard","hentry","category-server"],"_links":{"self":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/1665","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1665"}],"version-history":[{"count":2,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/1665\/revisions"}],"predecessor-version":[{"id":1952,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/1665\/revisions\/1952"}],"wp:attachment":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1665"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1665"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1665"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}