{"id":212,"date":"2026-05-13T11:55:20","date_gmt":"2026-05-13T03:55:20","guid":{"rendered":"https:\/\/junai.ai\/blog\/linux-docker-intro-26\/"},"modified":"2026-05-13T11:55:20","modified_gmt":"2026-05-13T03:55:20","slug":"linux-docker-intro-26","status":"publish","type":"post","link":"https:\/\/junai.ai\/blog\/linux-docker-intro-26\/","title":{"rendered":"\uc6b0\ubd84\ud22c \ub3c4\ucee4 \uc785\ubb38 \u2014 \ucee8\ud14c\uc774\ub108\u00b7\ubcfc\ub968\u00b7compose (26\ud3b8)"},"content":{"rendered":"\n<!-- WordPress REST API \ubc1c\ud589\uc6a9 HTML (\uc790\ub3d9 \uc0dd\uc131) -->\n<!-- WP-FEATURED-MEDIA-ID: 207 -->\n<div style=\"max-width:800px;margin:0 auto;\">\n<style>\n:root{\n  --color-primary:#1e40af;--color-accent:#3b82f6;--color-bg:#fafafa;--color-bg-card:#ffffff;\n  --color-text:#1e293b;--color-text-muted:#64748b;--hero-start:#0f172a;--hero-end:#1e40af;\n  --font-body:-apple-system,BlinkMacSystemFont,'Apple SD Gothic Neo','Noto Sans KR',sans-serif;\n  --size-body:17px;--line-height:1.75;--h1-size:32px;--h2-size:27px;--h3-size:20px;\n}\n*{margin:0;padding:0;box-sizing:border-box;}\n.wrap{max-width:760px;margin:0 auto;padding:0 20px;}\n.hero{background:linear-gradient(135deg,var(--hero-start) 0%,var(--hero-end) 100%);color:#fff;padding:64px 0 56px;text-align:center;}\n.hero .eyebrow{display:inline-block;font-size:13px;letter-spacing:1px;text-transform:uppercase;color:#93c5fd;font-weight:700;margin-bottom:16px;}\n.hero h1{font-size:var(--h1-size);line-height:1.32;letter-spacing:-0.3px;font-weight:800;margin-bottom:18px;}\n.hero p.sub{font-size:18px;color:#cbd5e1;max-width:620px;margin:0 auto;}\n.hero .meta{margin-top:22px;font-size:14px;color:#94a3b8;}\n.hero-img{display:block;width:100%;height:auto;}\narticle{padding:48px 0 24px;}\narticle h2{font-size:var(--h2-size);line-height:1.35;letter-spacing:-0.3px;font-weight:800;margin:48px 0 18px;padding-left:14px;border-left:5px solid var(--color-primary);}\narticle h2:first-of-type{margin-top:8px;}\narticle h3{font-size:var(--h3-size);font-weight:700;margin:28px 0 10px;color:#0f172a;}\narticle p{margin:0 0 18px;}\narticle ul,article ol{margin:0 0 18px 4px;padding-left:22px;}\narticle li{margin-bottom:9px;}\narticle strong{color:#0f172a;font-weight:700;}\narticle a{color:var(--color-primary);text-decoration:underline;text-underline-offset:2px;}\narticle code{background:#0f172a;color:#e2e8f0;padding:2px 7px;border-radius:5px;font-size:0.9em;font-family:'SF Mono',Menlo,Consolas,monospace;}\n.intro p:first-child{font-size:19px;color:#334155;}\n.notice{background:#eef2ff;border:1px solid #c7d2fe;border-radius:10px;padding:14px 18px;margin:0 0 30px;font-size:15px;color:#3730a3;}\n.notice b{color:#312e81;}\n.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:22px 0;}\ntable{width:100%;border-collapse:collapse;font-size:15px;background:var(--color-bg-card);}\nth,td{padding:11px 12px;text-align:left;border-bottom:1px solid #e2e8f0;vertical-align:top;}\nth{background:#f1f5f9;font-weight:700;color:#0f172a;}\ntd:first-child,th:first-child{font-weight:700;}\n@media (max-width:560px){\n  .tablewrap table,.tablewrap thead,.tablewrap tbody,.tablewrap tr,.tablewrap th,.tablewrap td{display:block;width:auto;}\n  .tablewrap thead{display:none;}\n  .tablewrap tr{margin:0 0 14px;border:1px solid #e2e8f0;border-radius:10px;overflow:hidden;}\n  .tablewrap td{border:none;border-bottom:1px solid #f1f5f9;padding:9px 14px;}\n  .tablewrap td:first-child{background:#f1f5f9;font-weight:800;font-size:15.5px;}\n  .tablewrap td:last-child{border-bottom:none;}\n  .tablewrap td[data-label]::before{content:attr(data-label) \" \u2014 \";font-weight:700;color:var(--color-primary);}\n}\n.databox{background:#eff6ff;border-left:4px solid var(--color-accent);border-radius:0 8px 8px 0;padding:16px 18px;margin:20px 0;font-size:15.5px;}\n.databox b{color:var(--color-primary);}\n.warnbox{background:linear-gradient(135deg,#fffbeb 0%,#fef3c7 100%);border-radius:10px;padding:16px 18px;margin:22px 0;font-size:15.5px;color:#78350f;}\n.cmd{background:#0f172a;color:#e2e8f0;border-radius:10px;padding:14px 16px;margin:14px 0;font-family:'SF Mono',Menlo,Consolas,monospace;font-size:14px;line-height:1.8;overflow-x:auto;-webkit-overflow-scrolling:touch;white-space:pre-wrap;}\n.cmd .c{color:#7dd3fc;}\n.cmd .o{color:#94a3b8;}\n.cmd .t{color:#fbbf24;}\n.cmd .k{color:#c084fc;}\n.cmd .r{color:#f87171;}\n.roadmap{background:var(--color-bg-card);border:1px solid #e2e8f0;border-radius:12px;padding:18px 20px;margin:24px 0;font-size:15px;}\n.roadmap h3{margin:0 0 10px;font-size:17px;color:#0f172a;}\n.roadmap ol{margin:0 0 0 4px;padding-left:20px;}\n.roadmap li{margin-bottom:5px;color:#475569;}\n.cta{background:#0f172a;color:#e2e8f0;border-radius:14px;padding:26px 24px;margin:40px 0 8px;text-align:center;}\n.cta h3{color:#fff;margin:0 0 8px;font-size:19px;}\n.cta p{margin:0 0 4px;font-size:15px;color:#cbd5e1;}\n.cta a{color:#93c5fd;}\nfooter{padding:30px 0 50px;text-align:center;color:var(--color-text-muted);font-size:13.5px;}\n@media (max-width:480px){:root{--h1-size:23px;--h2-size:20px;--size-body:16px;}.hero{padding:48px 0 40px;}article{padding:34px 0 16px;}.cmd{font-size:12.5px;}}\n<\/style>\n<header class=\"hero\">\n  <div class=\"wrap\">\n    <span class=\"eyebrow\">\uc6b0\ubd84\ud22c \u00b7 \ub9ac\ub205\uc2a4 \uc785\ubb38 \u2014 26\ud3b8 (\uace0\uae09 \u00b7 \uc644\uacb0)<\/span>\n    <h1>\uc6b0\ubd84\ud22c \ub3c4\ucee4(Docker) \uc785\ubb38 \u2014 \uc774\ubbf8\uc9c0\u00b7\ucee8\ud14c\uc774\ub108\u00b7\ubcfc\ub968\u00b7compose<\/h1>\n    <p class=\"sub\">&#8220;\ub0b4 \ucef4\ud4e8\ud130\uc5d0\uc120 \ub418\ub294\ub370&#8221;\ub97c \ub05d\ub0b4\ub294 \ub3c4\uad6c. \uc571\uacfc \ud658\uacbd\uc744 \ud1b5\uc9f8\ub85c \ub2f4\uc544 \uc5b4\ub514\uc11c\ub4e0 \ub611\uac19\uc774 \u2014 26\ud3b8 \uc785\ubb38 \uc2dc\ub9ac\uc988\uc758 \ub9c8\uc9c0\ub9c9 \ud3b8\uc785\ub2c8\ub2e4.<\/p>\n    <p class=\"meta\">2026\ub144 5\uc6d4 13\uc77c \u00b7 \uc57d 8\ubd84 \u00b7 26\ud3b8 \uc785\ubb38 \uc2dc\ub9ac\uc988 26\ud3b8 (\uc644\uacb0)<\/p>\n  <\/div>\n<\/header>\n\n<img decoding=\"async\" class=\"hero-img\" src=\"https:\/\/junai.ai\/blog\/wp-content\/uploads\/2026\/05\/hero-33.jpg\" alt=\"docker run\u00b7ps\u00b7logs\u00b7\ubcfc\ub968 \ub9c8\uc6b4\ud2b8 \uba85\ub839\uacfc docker-compose.yml \ub85c \uc6f9+DB \ub97c \ud55c \ubc88\uc5d0 \ub744\uc6b0\ub294 \ud130\ubbf8\ub110 \ud654\uba74 \uc77c\ub7ec\uc2a4\ud2b8 \u2014 \uc6b0\ubd84\ud22c \ub3c4\ucee4 \uc785\ubb38\uc744 \uc0c1\uc9d5\">\n\n<div class=\"wrap\">\n<article>\n\n  <div class=\"intro\">\n    <p>19\ud3b8\uc5d0\uc11c systemd \ub85c &#8220;\uc571\uc744 \ud56d\uc0c1 \ub5a0 \uc788\uac8c&#8221; \ub9cc\ub4e4\uc5c8\uace0, 22~25\ud3b8\uc5d0\uc11c \uc2a4\ud06c\ub9bd\ud2b8\u00b7\ub85c\uadf8\u00b7\ubcf4\uc548\uc744 \ub2e4\ub918\uc8e0. \uc774\uc81c \ub9c8\uc9c0\ub9c9 \ud55c \uc870\uac01 \u2014 <strong>\ub3c4\ucee4(Docker)<\/strong>. &#8220;\ub0b4 \ucef4\ud4e8\ud130\uc5d0\uc120 \ub418\ub294\ub370 \uc11c\ubc84\uc5d0\uc120 \uc548 \ub3fc&#8221; \uc758 \uc6d0\uc778\uc740 \ubcf4\ud1b5 \ud658\uacbd \ucc28\uc774(\ud30c\uc774\uc36c \ubc84\uc804, \ub77c\uc774\ube0c\ub7ec\ub9ac, \uc124\uc815)\uc778\ub370, \ub3c4\ucee4\ub294 <strong>\uc571 + \uadf8 \ud658\uacbd\uc744 \ud1b5\uc9f8\ub85c \ud55c \ub369\uc5b4\ub9ac\ub85c \ubb36\uc5b4<\/strong> \uc5b4\ub514\uc11c\ub4e0 \ub611\uac19\uc774 \ub3cc\uac8c \ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ucee8\ud14c\uc774\ub108\ub07c\ub9ac \uaca9\ub9ac\ub418\ub2c8 \ud55c \uc571\uc774 \ub2e4\ub978 \uc571\uc744 \ub9dd\uce58\uc9c0\ub3c4 \uc54a\uace0\uc694.<\/p>\n    <div class=\"notice\"><b>\uba3c\uc800:<\/b> 19\ud3b8(systemd)\u00b722\ud3b8(\uc2a4\ud06c\ub9bd\ud2b8)\u00b724\ud3b8(\ub85c\uadf8)\u00b725\ud3b8(\ubcf4\uc548)\uc744 \ubd24\ub2e4\uba74 \uc774\uc5b4\uc9d1\ub2c8\ub2e4. \uc774 \ud3b8\uc774 <strong>26\ud3b8 \uc785\ubb38 \uc2dc\ub9ac\uc988\uc758 \ub9c8\uc9c0\ub9c9<\/strong>\uc774\uc5d0\uc694. \uc21c\uc11c \u2014 <strong>\u2460 \uc124\uce58\u00b7\uccab \ucee8\ud14c\uc774\ub108 \u2192 \u2461 \ucee8\ud14c\uc774\ub108 \ub2e4\ub8e8\uae30(run\u00b7ps\u00b7logs\u00b7exec) \u2192 \u2462 \ubcfc\ub968\u00b7\ub124\ud2b8\uc6cc\ud06c \u2192 \u2463 docker compose \ub9db + \uc2dc\ub9ac\uc988 \uc644\uacb0<\/strong>. \uc2e4\uc2b5\uc740 <code>nginx<\/code> \uac19\uc740 \uacf5\uc2dd \uc774\ubbf8\uc9c0\ub85c \uc548\uc804\ud558\uac8c.<\/div>\n  <\/div>\n\n  <h2>\ub3c4\ucee4\uac00 \ubb54\ub370 \u2014 \uc124\uce58\ud558\uace0 \uccab \ucee8\ud14c\uc774\ub108<\/h2>\n  <p>\ud575\uc2ec \uac1c\ub150 \ub458: <strong>\uc774\ubbf8\uc9c0<\/strong> = &#8220;\uc571 + \ud658\uacbd&#8221;\uc774 \ud1b5\uc9f8\ub85c \ub4e0 \uc77d\uae30 \uc804\uc6a9 \ud15c\ud50c\ub9bf(\uc608: <code>nginx<\/code>, <code>python:3.12<\/code>, <code>postgres<\/code>). <strong>\ucee8\ud14c\uc774\ub108<\/strong> = \uadf8 \uc774\ubbf8\uc9c0\ub97c \uc2e4\ud589\ud55c \uc778\uc2a4\ud134\uc2a4(\uac19\uc740 \uc774\ubbf8\uc9c0\ub85c \uc5ec\ub7ec \uac1c \ub744\uc6b8 \uc218 \uc788\uc74c). \ube44\uc720\ud558\uba74 \uc774\ubbf8\uc9c0\ub294 &#8220;\uc124\uce58 \ub514\uc2a4\ud06c&#8221;, \ucee8\ud14c\uc774\ub108\ub294 &#8220;\uadf8\uac78 \uae54\uc544 \ub3cc\ub9ac\ub294 \uc2e4\ud589 \uc911\uc778 \uba38\uc2e0&#8221; \u2014 \ub2e8 \uac00\ubccd\uace0 \ube60\ub985\ub2c8\ub2e4(\uac00\uc0c1\uba38\uc2e0\ubcf4\ub2e4 \ud6e8\uc52c).<\/p>\n  <div class=\"cmd\"><span class=\"o\">$<\/span> sudo apt install docker.io          <span class=\"o\"># \uc6b0\ubd84\ud22c \ud328\ud0a4\uc9c0 (\ub610\ub294 docker.com \uacf5\uc2dd \uc2a4\ud06c\ub9bd\ud2b8)<\/span>\n<span class=\"o\">$<\/span> docker &#8211;version                     <span class=\"o\"># \uc124\uce58 \ud655\uc778<\/span>\n<span class=\"o\">$<\/span> sudo docker run hello-world           <span class=\"o\"># \uccab \ucee8\ud14c\uc774\ub108 \u2014 \uc798 \ub418\uba74 \ud658\uc601 \uba54\uc2dc\uc9c0<\/span>\n\n<span class=\"o\"># \ub9e4\ubc88 sudo \uce58\uae30 \uc2eb\uc73c\uba74 (\ub2e8 \ubcf4\uc548\uc0c1 \uc8fc\uc758 \u2014 docker \uadf8\ub8f9\uc740 \uc0ac\uc2e4\uc0c1 root \uad8c\ud55c, 25\ud3b8 \ucd5c\uc18c \uad8c\ud55c \uc815\uc2e0 \uae30\uc5b5):<\/span>\n<span class=\"o\">$<\/span> sudo usermod -aG docker $USER         <span class=\"o\"># \uadf8 \ud6c4 \ub85c\uadf8\uc544\uc6c3\u2192\ub85c\uadf8\uc778 (\ub610\ub294 newgrp docker)<\/span><\/div>\n  <p>\uc774\ubbf8\uc9c0\ub97c \ubc1b\uc544\uc624\uace0, \ucee8\ud14c\uc774\ub108\ub97c \ub744\uc6cc\ubd05\ub2c8\ub2e4. <code>docker run -d -p 8080:80 --name web nginx<\/code> \u2014 <code>-d<\/code>(\ubc31\uadf8\ub77c\uc6b4\ub4dc), <code>-p \ud638\uc2a4\ud2b8:\ucee8\ud14c\uc774\ub108<\/code>(\ud3ec\ud2b8 \ub9e4\ud551 \u2014 \ud638\uc2a4\ud2b8\uc758 8080 \uc73c\ub85c \ub4e4\uc5b4\uc624\uba74 \ucee8\ud14c\uc774\ub108\uc758 80 \uc73c\ub85c), <code>--name<\/code>(\uc774\ub984):<\/p>\n  <div class=\"cmd\"><span class=\"o\">$<\/span> docker pull nginx                    <span class=\"o\"># \uc774\ubbf8\uc9c0 \ubc1b\uc544\uc624\uae30 (run \ud560 \ub54c \uc5c6\uc73c\uba74 \uc790\ub3d9\uc73c\ub85c \ubc1b\uc74c)<\/span>\n<span class=\"o\">$<\/span> docker run -d -p 8080:80 &#8211;name web nginx\n<span class=\"o\">$<\/span> docker images                        <span class=\"o\"># \ubc1b\uc544\ub454 \uc774\ubbf8\uc9c0 \ubaa9\ub85d<\/span>\n<span class=\"o\">$<\/span> docker ps                            <span class=\"o\"># \uc2e4\ud589 \uc911\uc778 \ucee8\ud14c\uc774\ub108 (ps -a \uba74 \uba48\ucd98 \uac83\uae4c\uc9c0)<\/span>\n<span class=\"o\"># \u2192 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c http:\/\/localhost:8080 \uc73c\ub85c nginx \uac00 \ubcf4\uc784<\/span><\/div>\n\n  <h2>\ucee8\ud14c\uc774\ub108 \ub2e4\ub8e8\uae30 \u2014 run\u00b7logs\u00b7exec\u00b7stop\u00b7rm<\/h2>\n  <div class=\"cmd\"><span class=\"o\">$<\/span> docker logs web                      <span class=\"o\"># \ucee8\ud14c\uc774\ub108 \ub85c\uadf8 (24\ud3b8\uc758 \ub85c\uadf8 \ubcf4\uae30 \u2014 docker logs -f \uba74 \uc2e4\uc2dc\uac04)<\/span>\n<span class=\"o\">$<\/span> docker exec -it web bash             <span class=\"o\"># \ucee8\ud14c\uc774\ub108 &#8220;\uc548\uc73c\ub85c&#8221; \ub4e4\uc5b4\uac00 \uc178 \uc5f4\uae30 (exit \ub85c \ub098\uc634)<\/span>\n<span class=\"o\">$<\/span> docker stop web                      <span class=\"o\"># \uba48\ucd94\uae30 (start \ub85c \ub2e4\uc2dc)<\/span>\n<span class=\"o\">$<\/span> docker rm web                        <span class=\"o\"># \ucee8\ud14c\uc774\ub108 \uc0ad\uc81c (\uba48\ucd98 \uc0c1\ud0dc\uc5d0\uc11c \u2014 rm -f \uba74 \uac15\uc81c)<\/span>\n<span class=\"o\">$<\/span> docker rmi nginx                     <span class=\"o\"># \uc774\ubbf8\uc9c0 \uc0ad\uc81c<\/span>\n<span class=\"o\">$<\/span> docker run &#8211;rm -it python:3.12 python   <span class=\"o\"># &#8211;rm: \ub05d\ub098\uba74 \uc790\ub3d9 \uc0ad\uc81c \u2014 \uc7a0\uae50 \ud30c\uc774\uc36c \uc368\ubcf4\uace0 \ubc84\ub9ac\uae30<\/span>\n<span class=\"o\">$<\/span> docker system prune                  <span class=\"o\"># \uc548 \uc4f0\ub294 \ucee8\ud14c\uc774\ub108\u00b7\uc774\ubbf8\uc9c0\u00b7\uce90\uc2dc \uccad\uc18c (\ub514\uc2a4\ud06c \ud655\ubcf4 \u2014 15\ud3b8)<\/span><\/div>\n  <div class=\"databox\"><b>systemd vs Docker (19\ud3b8\uacfc \ube44\uad50):<\/b> systemd \ub294 &#8220;\uc774 \uc11c\ubc84\uc5d0 \uc124\uce58\ub41c \ud504\ub85c\uadf8\ub7a8\uc744 \ub5a0 \uc788\uac8c&#8221; \uad00\ub9ac\ud55c\ub2e4\uba74, Docker \ub294 &#8220;\uc774 \uc571\uc744 \ud658\uacbd\uae4c\uc9c0 \ud1b5\uc9f8\ub85c \ucea1\uc290\uc5d0 \ub2f4\uc544&#8221; \ub744\uc6c1\ub2c8\ub2e4. \ub458 \ub2e4 &#8220;\uc7ac\uc2dc\uc791\u00b7\uc790\ub3d9 \uc2dc\uc791&#8221;\uc744 \ud558\uc9c0\ub9cc \u2014 \ud658\uacbd \ucda9\ub3cc\uc774 \uc7a6\uac70\ub098 \uc5ec\ub7ec \ubc84\uc804\uc744 \uac19\uc774 \ub3cc\ub824\uc57c \ud558\uba74 Docker, \uc2dc\uc2a4\ud15c \uc790\uccb4\uc758 \ub370\ubaac(SSH\u00b7cron \ub4f1)\uc774\uba74 systemd. \uadf8\ub9ac\uace0 Docker \ucee8\ud14c\uc774\ub108\ub97c \ubd80\ud305 \uc2dc \uc790\ub3d9 \uc2dc\uc791\ud558\ub824\uba74 <code>docker run --restart unless-stopped ...<\/code> (\ub610\ub294 compose \uc758 <code>restart:<\/code>).<\/div>\n\n  <h2>\ubcfc\ub968\uacfc \ub124\ud2b8\uc6cc\ud06c \u2014 \ub370\uc774\ud130 \uc548 \ub0a0\uc544\uac00\uac8c, \ucee8\ud14c\uc774\ub108\ub07c\ub9ac \ud1b5\uc2e0<\/h2>\n  <p><strong>\ubcfc\ub968 \u2014 \ucee8\ud14c\uc774\ub108\ub97c \uc9c0\uc6cc\ub3c4 \ub370\uc774\ud130\ub294 \ub0a8\uac8c.<\/strong> \ucee8\ud14c\uc774\ub108 \uc548\uc5d0 \uc4f4 \ub370\uc774\ud130\ub294 \ucee8\ud14c\uc774\ub108\ub97c <code>rm<\/code> \ud558\uba74 \uac19\uc774 \uc0ac\ub77c\uc9d1\ub2c8\ub2e4. DB\u00b7\uc5c5\ub85c\ub4dc \ud30c\uc77c\ucc98\ub7fc \uc601\uad6c \ub370\uc774\ud130\ub294 <strong>\ubcfc\ub968<\/strong>(\ub3c4\ucee4\uac00 \uad00\ub9ac)\uc774\ub098 <strong>\ud638\uc2a4\ud2b8 \ud3f4\ub354 \ub9c8\uc6b4\ud2b8<\/strong>\uc5d0 \ub46c\uc57c \ud574\uc694:<\/p>\n  <div class=\"cmd\"><span class=\"o\"># \ud638\uc2a4\ud2b8 \ud3f4\ub354\ub97c \ucee8\ud14c\uc774\ub108\uc5d0 \uc5f0\uacb0 (-v \ud638\uc2a4\ud2b8\uacbd\ub85c:\ucee8\ud14c\uc774\ub108\uacbd\ub85c)<\/span>\n<span class=\"o\">$<\/span> docker run -d -p 8080:80 -v <span class=\"t\">\/home\/me\/site:\/usr\/share\/nginx\/html<\/span> nginx\n\n<span class=\"o\"># \ub3c4\ucee4 \uad00\ub9ac \ubcfc\ub968 (DB \uc5d0 \uad8c\uc7a5 \u2014 \uad8c\ud55c\u00b7\uc774\uc2dd\uc131 \uae54\ub054)<\/span>\n<span class=\"o\">$<\/span> docker volume create pgdata\n<span class=\"o\">$<\/span> docker run -d &#8211;name db -e POSTGRES_PASSWORD=secret -v <span class=\"t\">pgdata:\/var\/lib\/postgresql\/data<\/span> postgres\n<span class=\"o\">$<\/span> docker volume ls                     <span class=\"o\"># \ubcfc\ub968 \ubaa9\ub85d (rm \uc73c\ub85c \uc0ad\uc81c \u2014 \ub370\uc774\ud130\ub3c4 \uac19\uc774 \uc0ac\ub77c\uc9c0\ub2c8 \uc8fc\uc758)<\/span><\/div>\n  <p><strong>\ub124\ud2b8\uc6cc\ud06c (\ub9db\ub9cc).<\/strong> \ucee8\ud14c\uc774\ub108\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \uaca9\ub9ac\ub3fc \uc788\uc9c0\ub9cc, \uac19\uc740 \uc0ac\uc6a9\uc790 \ub124\ud2b8\uc6cc\ud06c\uc5d0 \ub450\uba74 <strong>\ucee8\ud14c\uc774\ub108 \uc774\ub984\uc73c\ub85c \uc11c\ub85c \ud1b5\uc2e0<\/strong>\ud569\ub2c8\ub2e4(\uc6f9 \ucee8\ud14c\uc774\ub108\uac00 <code>db<\/code> \ub77c\ub294 \ud638\uc2a4\ud2b8\uba85\uc73c\ub85c DB \ucee8\ud14c\uc774\ub108\uc5d0 \uc811\uc18d). <code>docker network create mynet<\/code> \u2192 <code>docker run --network mynet ...<\/code>.<\/p>\n  <div class=\"warnbox\"><strong>\u26a0\ufe0f Docker \uc640 \ubc29\ud654\ubcbd(17\ud3b8):<\/strong> Docker \ub294 <code>-p<\/code> \ub85c \ud3ec\ud2b8\ub97c \uc5f4 \ub54c \uc790\uccb4\uc801\uc73c\ub85c iptables \uaddc\uce59\uc744 \ucd94\uac00\ud558\ub294\ub370, \uc774\uac8c <strong><code>ufw<\/code> \ub97c \uc6b0\ud68c<\/strong>\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4 \u2014 <code>ufw deny<\/code> \ud574\ub480\ub294\ub370\ub3c4 <code>-p 0.0.0.0:5432:5432<\/code> \ub85c \ub744\uc6b4 DB \uac00 \uc678\ubd80\uc5d0 \ub178\ucd9c\ub418\ub294 \uc2dd. \uc548\uc804\ud558\uac8c: DB \uac19\uc740 \uac74 <code>-p 127.0.0.1:5432:5432<\/code> \ucc98\ub7fc <strong>\ub85c\uceec\uc5d0\ub9cc \ubc14\uc778\ub529<\/strong>\ud558\uac70\ub098, \ucee8\ud14c\uc774\ub108\ub07c\ub9ac\ub9cc \ud1b5\uc2e0\ud558\uac8c \ud558\uace0 \uc678\ubd80 \ud3ec\ud2b8\ub294 \uaf2d \ud544\uc694\ud55c \uac83(\uc6f9\uc758 80\/443)\ub9cc \uc5ec\uc138\uc694. (\uac80\uc0c9\uc5b4: &#8220;ufw docker&#8221; \u2014 \ud574\uacb0 \uc124\uc815\uc774 \uc788\uc2b5\ub2c8\ub2e4.)<\/div>\n\n  <h2>docker compose \ub9db \u2014 \uadf8\ub9ac\uace0 26\ud3b8 \uc2dc\ub9ac\uc988 \uc644\uacb0<\/h2>\n  <p>\uc6f9 + DB \ucc98\ub7fc \uc5ec\ub7ec \ucee8\ud14c\uc774\ub108\ub97c \ub9e4\ubc88 \uae34 <code>docker run<\/code> \uc73c\ub85c \ub744\uc6b0\uae34 \ubc88\uac70\ub86d\uc8e0. <strong>docker compose<\/strong> \ub294 \uadf8\uac78 <code>docker-compose.yml<\/code> \ud55c \ud30c\uc77c\uc5d0 \uc801\uc5b4\ub450\uace0 \ud55c \uba85\ub839\uc73c\ub85c \ub744\uc6c1\ub2c8\ub2e4(22\ud3b8\uc758 &#8220;\uc120\uc5b8\uc801 \uc2a4\ud06c\ub9bd\ud2b8&#8221;\uc640 \ube44\uc2b7\ud55c \ub290\ub08c):<\/p>\n  <div class=\"cmd\"><span class=\"o\"># docker-compose.yml<\/span>\n<span class=\"k\">services:<\/span>\n  <span class=\"k\">web:<\/span>\n    <span class=\"k\">image:<\/span> nginx\n    <span class=\"k\">ports:<\/span> [<span class=\"t\">&#8220;8080:80&#8221;<\/span>]\n    <span class=\"k\">restart:<\/span> unless-stopped       <span class=\"o\"># \ubd80\ud305 \uc2dc \uc790\ub3d9 \uc2dc\uc791<\/span>\n  <span class=\"k\">db:<\/span>\n    <span class=\"k\">image:<\/span> postgres\n    <span class=\"k\">environment:<\/span> { POSTGRES_PASSWORD: secret }\n    <span class=\"k\">volumes:<\/span> [<span class=\"t\">&#8220;pgdata:\/var\/lib\/postgresql\/data&#8221;<\/span>]\n<span class=\"k\">volumes:<\/span>\n  pgdata:<\/div>\n  <div class=\"cmd\"><span class=\"o\">$<\/span> docker compose up -d                 <span class=\"o\"># \uc815\uc758\ub41c \ucee8\ud14c\uc774\ub108 \uc804\ubd80 \ud55c \ubc88\uc5d0 (compose.yml \uc774 \uc788\ub294 \ud3f4\ub354\uc5d0\uc11c)<\/span>\n<span class=\"o\">$<\/span> docker compose ps                    <span class=\"o\"># \uc0c1\ud0dc \ubcf4\uae30<\/span>\n<span class=\"o\">$<\/span> docker compose logs -f web           <span class=\"o\"># \ud55c \uc11c\ube44\uc2a4 \ub85c\uadf8<\/span>\n<span class=\"o\">$<\/span> docker compose down                  <span class=\"o\"># \uc804\ubd80 \ub0b4\ub9ac\uae30 (-v \uba74 \ubcfc\ub968\uae4c\uc9c0 \u2014 \ub370\uc774\ud130 \uc8fc\uc758)<\/span><\/div>\n  <p>(\ucc38\uace0: \uc774 \ube14\ub85c\uadf8\ub3c4 WordPress \ub97c Docker compose \ub85c \ub3cc\ub9bd\ub2c8\ub2e4 \u2014 \ud55c \ud30c\uc77c\uc5d0 \uc6cc\ub4dc\ud504\ub808\uc2a4 + DB \ucee8\ud14c\uc774\ub108\ub97c \uc801\uc5b4\ub450\uace0 <code>up -d<\/code> \ud558\ub098\ub85c. \ud658\uacbd \ucda9\ub3cc \uc5c6\uc774, \ub2e4\ub978 \uc11c\ubc84\ub85c \uc62e\uae38 \ub54c\ub3c4 \uadf8 \ud30c\uc77c\ub9cc \ub4e4\uace0 \uac00\uba74 \ub05d.)<\/p>\n  <div class=\"roadmap\">\n    <h3>26\ud3b8 \uc785\ubb38 \uc2dc\ub9ac\uc988 \u2014 \uc644\uc8fc!<\/h3>\n    <ol>\n      <li>1~5\ud3b8 \uc785\ubb38(\ub9ac\ub205\uc2a4\ub780\u00b7\uc124\uce58\u00b7\uccab \uc124\uc815\u00b7\ud130\ubbf8\ub110\u00b7\ub514\ub809\ud1a0\ub9ac \uad6c\uc870) \u2714<\/li>\n      <li>6~12\ud3b8 \uae30\ucd08(\ud30c\uc77c\u00b7\ud14d\uc2a4\ud2b8\u00b7nano\u00b7\uad8c\ud55c\u00b7\uc0ac\uc6a9\uc790\u00b7apt\u00b7\ud30c\uc774\ud504) \u2714<\/li>\n      <li>13~20\ud3b8 \uc911\uae09(vim\u00b7\ud504\ub85c\uc138\uc2a4\u00b7\ub514\uc2a4\ud06c\u00b7\ub124\ud2b8\uc6cc\ud06c\u00b7ufw\u00b7SSH\u00b7systemd\u00b7cron) \u2714<\/li>\n      <li>21~26\ud3b8 \uace0\uae09(\uc178 \uc2a4\ud06c\ub9bd\ud2b8\u00b7\uc548\uc804\ud55c \uc2a4\ud06c\ub9bd\ud2b8\u00b7grep\/sed\/awk\u00b7\ub85c\uadf8\/\ubaa8\ub2c8\ud130\ub9c1\u00b7\uc11c\ubc84 \ubcf4\uc548\u00b7<strong>\ub3c4\ucee4<\/strong>) \u2714<\/li>\n    <\/ol>\n  <\/div>\n  <p>\uc5ec\uae30\uae4c\uc9c0\uac00 &#8220;\ub9ac\ub205\uc2a4\ub97c \ubb34\uc11c\uc6cc\ud558\uc9c0 \uc54a\uace0 \ub2e4\ub8e8\ub294&#8221; \ub370 \ud544\uc694\ud55c \uae30\ubcf8\uae30\uc785\ub2c8\ub2e4. \ub2e4\uc74c \ub2e8\uacc4\ub85c \uac00\uace0 \uc2f6\ub2e4\uba74 \u2014 \ub354 \uae4a\uc740 \ucee8\ud14c\uc774\ub108(\uc5ec\ub7ec \uc11c\ubc84\u00b7\ucfe0\ubc84\ub124\ud2f0\uc2a4), \uc778\ud504\ub77c \uc790\ub3d9\ud654(Ansible\u00b7Terraform), \uc2a4\ud1a0\ub9ac\uc9c0(LVM\u00b7RAID), \ubcf8\uaca9\uc801\uc778 \ubcf4\uc548(\uce68\uc785 \ud0d0\uc9c0\u00b7\uac10\uc0ac) \uac19\uc740 \uae38\uc774 \uc788\uc5b4\uc694. \ud558\uc9c0\ub9cc \uadf8\uac74 \ub2e4\ub978 \uc2dc\ub9ac\uc988\uc758 \ubaab\uc774\uace0 \u2014 26\ud3b8 \uc644\uc8fc, \ucd95\ud558\ud569\ub2c8\ub2e4. \uc774\uc81c \uac80\uc740 \ud654\uba74\uc774 \uc548 \ubb34\uc12d\uc8e0?<\/p>\n\n  <p style=\"font-size:15px;color:#64748b;\">\ucc38\uace0: \ubcf8 \uae00\uc740 \uc6b0\ubd84\ud22c(<code>docker.io<\/code> \ud328\ud0a4\uc9c0 \/ Docker Engine) \uae30\uc900\uc774\uba70 2026\ub144 5\uc6d4 13\uc77c\uc5d0 \uc791\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud074\ub77c\uc6b0\ub4dc\u00b7\uae30\uc5c5 \ud658\uacbd\uc740 \ubcf4\uc548 \uc815\ucc45(rootless docker, \uc774\ubbf8\uc9c0 \uc2a4\uce94 \ub4f1)\uc774 \ucd94\uac00\ub420 \uc218 \uc788\uace0, <code>docker compose<\/code> \ub294 v2(\ud50c\ub7ec\uadf8\uc778) \uae30\uc900\uc785\ub2c8\ub2e4.<\/p>\n\n  <div class=\"cta\">\n    <h3>\uc6b0\ubd84\ud22c\u00b7\ub9ac\ub205\uc2a4 \uc785\ubb38 \uc2dc\ub9ac\uc988 \u2014 \uc644\uacb0<\/h3>\n    <p>26\ud3b8\uc73c\ub85c \uc785\ubb38 \uc2dc\ub9ac\uc988\uac00 \ub05d\ub0ac\uc2b5\ub2c8\ub2e4. 1\ud3b8(\ub9ac\ub205\uc2a4\ub780?)\ubd80\ud130 \ub2e4\uc2dc \ubcf4\uac70\ub098, \ub2e4\uc74c \ub2e8\uacc4 \ucf58\ud150\uce20\ub97c \uae30\ub2e4\ub9ac\uace0 \uc2f6\ub2e4\uba74 \u2014 <a href=\"https:\/\/junai.ai\/blog\" target=\"_blank\" rel=\"noopener\">junai.ai\/blog<\/a> \uc758 &#8220;Ubuntu \ub9ac\ub205\uc2a4 \ubc30\uc6b0\uae30&#8221; \uce74\ud14c\uace0\ub9ac\uc5d0 26\ud3b8\uc774 \ub2e4 \ubaa8\uc5ec \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n  <\/div>\n\n<\/article>\n<\/div>\n\n<footer>\n  <div class=\"wrap\">\u00a9 2026 JUNAI \u00b7 \uc6b0\ubd84\ud22c\u00b7\ub9ac\ub205\uc2a4 \uc785\ubb38 \uc2dc\ub9ac\uc988 26\ud3b8 (\uc644\uacb0) \u00b7 \ubcf8 \uae00\uc740 2026\ub144 5\uc6d4 13\uc77c \uae30\uc900\uc73c\ub85c \uc791\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/div>\n<\/footer>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\uc6b0\ubd84\ud22c Docker \uc785\ubb38 \u2014 \uc774\ubbf8\uc9c0\u00b7\ucee8\ud14c\uc774\ub108, docker run\u00b7logs\u00b7exec, \ubcfc\ub968\uc73c\ub85c \ub370\uc774\ud130 \ubcf4\uc874, compose \ub9db. 26\ud3b8 \uc785\ubb38 \uc2dc\ub9ac\uc988 \uc644\uacb0\ud3b8.<\/p>\n","protected":false},"author":1,"featured_media":207,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[],"class_list":["post-212","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ubuntu-linux"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/posts\/212","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/comments?post=212"}],"version-history":[{"count":0,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/posts\/212\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/media\/207"}],"wp:attachment":[{"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/media?parent=212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/categories?post=212"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/junai.ai\/blog\/wp-json\/wp\/v2\/tags?post=212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}