{"id":1808,"date":"2024-12-25T00:16:52","date_gmt":"2024-12-24T15:16:52","guid":{"rendered":"https:\/\/skanto.co.kr\/?p=1808"},"modified":"2024-12-26T10:00:25","modified_gmt":"2024-12-26T01:00:25","slug":"a-story-about-building-container-images","status":"publish","type":"post","link":"https:\/\/skanto.co.kr\/?p=1808","title":{"rendered":"A Story about Building Container Images"},"content":{"rendered":"\n<p>\ucd5c\uadfc \ub4e4\uc5b4 Docker Container\uc5d0 \ub300\ud574 \uae4a\uc740 \uc774\ud574\uac00 \ud544\uc694\ud558\uc5ec \uc774 \ucc38\uc5d0 \uc5b4\ub834\ud48b\uc774 \uc54c\uace0 \uc788\ub358 Container\uc5d0 \ub300\ud574 \uc81c\ub300\ub85c \ud568 \uc54c\uc544\ubcf4\uc790\ub294 \uc694\ub7c9\uc73c\ub85c \uad00\ub828 \uc11c\uc801\uc744 \ub4a4\uc9c0\ub2e4\uac00 \uac00\uc7a5 \ucd5c\uadfc\uc758 \ucc45\uc774\ub77c\uace0 \uc5ec\uaca8\uc9c0\ub294 &#8220;<a href=\"https:\/\/leanpub.com\/dockerdeepdive\">Docker Deep Dive 2024 edition<\/a>&#8221; \uc744 \uace8\ub77c \uc2b5\ub3c5\uc744 \ud588\ub2e4.<\/p>\n\n\n\n<p>\ub300\ub7b5 Docker Container\uc5d0 \ub300\ud55c \ub0b4\uc6a9\uc740 \uc775\ud788 \uc54c\uace0 \uc788\ub358\ud130\ub77c \uac1c\ub150\uc801 \uc774\ud574\ub294 \uc27d\uac8c \uc9c0\ub098\uac14\uc9c0\ub9cc \uc2e4\uc81c \uc774 \uae30\uc220\uc744 \uc774\uc6a9\ud558\uace0 \uc2f6\uc744 \ub54c \ub9c9\ud788\uc9c0 \uc54a\uc744 \uc815\ub3c4\ub85c \ubab8\uc5d0 \uc775\ud600\ubcf4\uc790\ub294 \uc0dd\uac01\uc73c\ub85c \ucc45\uc5d0 \ub098\uc628 \uc0d8\ud50c \ucf54\ub4dc\ub97c \uc774\ub9ac \uc800\ub9ac \ub0b4\uac00 \ud65c\uc6a9\ud574 \ubcf4\uace0 \uc2f6\uc740 \uc2dc\ub098\ub9ac\uc624\ub85c \ubcc0\ud615\ud558\uace0 \uc801\uc6a9\ud558\ub2e4 \ubcf4\ub2c8 \uacc4\ud68d\ud588\ub358 2\uc8fc \ubcf4\ub2e4 \uc2dc\uac04\uc774 \uc880 \ub354 \uac78\ub838\ub2e4. \uc774 \ucc38\uc5d0 \ub2e4\uc2dc \ud55c \ubc88 \ub290\ub07c\uc9c0\ub9cc \uc790\uc804\uac70 \ud0c0\ub294 \ubc29\ubc95\uc744 \uacf5\ubd80\ud558\ub294 \uac83\uacfc \uc790\uc804\uac70\ub97c \ud0c8 \uc904 \uc548\ub2e4\ub294 \uac83\uc5d0\ub294 \ud070 \uac04\uadf9\uc774 \uc788\uc74c\uc744 \ud655\uc778\ud588\ub2e4.<\/p>\n\n\n\n<p>\uc774 \uae00\uc5d0\uc11c Docker Container\uc5d0 \ub300\ud55c \ubc30\uacbd \uc124\uba85\uc740 \uc0dd\ub77d\ud55c\ub2e4. \uc65c\ub098\uba74 \uc774\ub7f0 \uac1c\ub150 \uc124\uba85\uc740 \uc778\ud130\ub137\uc744 \uc870\uae08\ub9cc \ucc3e\uc544\ubcf4\uba74 \ub298\ub824 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4. \uc5ec\uae30\uc11c\ub294 Docker Deep Dive \ucc45\uc744 \ubcf4\uace0 \uc774 \ucc45\uc5d0 \uc18c\uac1c\ub41c \uae30\uc220\uc744 \ub0b4\uac00 \uc0dd\uac01\ud55c \uc2dc\ub098\ub9ac\uc624\uc5d0 \uc5b4\ub5bb\uac8c \uc801\uc6a9 \ud588\ub294\uc9c0 \uadf8\ub9ac\uace0 \uadf8 \uc801\uc6a9 \uacfc\uc815\uc5d0\uc11c \uc54c\uac8c\ub41c Know-How\uc744 \uae30\ub85d\ud558\uae30\ub85c \ud55c\ub2e4.<\/p>\n\n\n\n<p>Container\uc5d0\uc11c \ud575\uc2ec\uc774 \ub418\ub294 \uae30\uc220\ub4e4\uc740 \uc5ec\ub7ff \uc788\uc9c0\ub9cc \uc911\uae09 \uac1c\ubc1c\uc790\ub4e4\uc774 \ub9ce\uc774 \ud65c\uc6a9\ud558\ub294 \ub610\ub294 Container \ud658\uacbd\uc5d0\uc11c \uc790\uc8fc \ubd80\ub52a\ud788\ub294 \uae30\uc220\ub4e4\uc740 \uc544\ub9c8\ub3c4 Volume\uacfc Network\uc77c \uac83\uc774\ub2e4. \uc5ec\uae30\uc11c \ud55c \ubc1c \ub354 \ub098\uc544\uac04\ub2e4\uba74 Container Clustering(Docker Swarm)\uc815\ub3c4\uac00 \ub418\uc9c0 \uc54a\uc744\uae4c \ud55c\ub2e4. Container Clustering\uc740 \ub610 \uc2dc\uc2a4\ud15c \uc6b4\uc601 \uc790\ub3d9\ud654\uc758 \ud575\uc2ec\uc778 Kubernetes \uc640 \ub2ff\uae30 \ub54c\ubb38\uc5d0 \ub2e4\ub978 \uc8fc\uc81c\ub85c \uc774 \uae30\uc220\uc744 \uc598\uae30\ub97c \ud574\uc57c \ud560\uac83 \uac19\uace0 \uc5ec\uae30\uc11c\ub294 Container \uc774\ubbf8\uc9c0\ub97c \ub9cc\ub4e4 \ub54c Volume\uacfc Network \uae30\uc220\uc744 \ud65c\uc6a9\ud558\ub294 \uc2dc\ub098\ub9ac\uc624\ub85c \uc598\uae30\ub97c \ud480\uc5b4\ubcf4\uace0\uc790 \ud55c\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\uc2dc\ub098\ub9ac\uc624<\/h3>\n\n\n\n<p>\uc608\uc804\uc5d0 \uacbd\ub85c\ud0d0\uc0c9 \uc54c\uace0\ub9ac\uc998\uc73c\ub85c <a href=\"https:\/\/skanto.co.kr\/?p=1205\" data-type=\"post\" data-id=\"1205\">Dijkstra<\/a>,  <a href=\"https:\/\/skanto.co.kr\/?p=1256\" data-type=\"post\" data-id=\"1256\">Bidirectoinal Dijkstra<\/a> \uadf8\ub9ac\uace0 <a href=\"https:\/\/skanto.co.kr\/?p=1299\" data-type=\"post\" data-id=\"1299\">Contraction Hierarchy<\/a>\uc5d0 \ub300\ud574 \uc124\uba85\ud55c \uc801\uc774 \uc788\ub2e4. \uc774 \uacfc\uc815\uc5d0\uc11c \uc791\uc131\ud588\ub358 \ucf54\ub4dc\ub4e4\uc744 \ub3d9\uc791 \uac00\ub2a5\ud55c \ud615\ud0dc\uc758 \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub85c \ub9cc\ub4e4\uc5b4 \ubc30\ud3ec\ud558\uba74 \ubcf4\ub2e4 \ub9ce\uc740 \uc0ac\ub78c\ub4e4\uc774 \uc27d\uac8c \uacbd\ud5d8\ud558\uc9c0 \uc54a\uc744\uae4c\ub77c\ub294 \uc0dd\uac01\uc73c\ub85c \uc774\uc5b4\uc84c\ub2e4. \uc65c\ub098\ud558\uba74 \uc774\ub7f0 \ucf54\ub4dc\ub97c \uc2e4\ud589\ud558\ub824\uba74 \uae30\ubcf8\uc801\uc73c\ub85c \ub3c4\ub85c\ub124\ud2b8\uc6cc\ud06c \ub370\uc774\ud130\uac00 \uc788\uc5b4\uc57c \ud558\uc9c0\ub9cc \uc774 \ubd80\ubd84\uc744 \uc81c\uc678\ud558\ub354\ub77c\ub3c4 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 WAS(Tomcat)\uc758 \uc124\uce58\uc640 \uc124\uc815\uc774 \ud544\uc694\ud558\uace0 \uc5ec\uae30\uc5d0 \uc6f9\uc5b4\ud50c\ub9ac\ucf00\uc774\uc158 \ubc30\ud3ec \ubfd0\ub9cc \uc544\ub2c8\ub77c \ud544\uc694\ud55c \ud658\uacbd \uc124\uc815\ub3c4 \ud574\uc57c\ud574\uc11c \uc2dc\uac04\uc774 \uc81c\ubc95 \uc18c\uc694\ub418\ub294 \uc77c\uc774\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n\n\n\n<p>\uc5ec\uae30\uc5d0 CI(Continuous Integration) \uac1c\ub150\uc744 \uc801\uc6a9\ud558\uc5ec Source Repository(Gitlab)\uc5d0\uc11c \uc2e4\uc2dc\uac04\uc73c\ub85c Stable\ud55c \uc18c\uc2a4\ucf54\ub4dc\ub97c \uac00\uc838\uc640 WebApp Binary\ub85c \ube4c\ub4dc\ud558\uace0 \uc774\ub807\uac8c \ub9cc\ub4e4\uc5b4\uc9c4 WebApp\uc744 WAS\uc5d0 \uc62c\ub824 \ucd5c\uc885 \uc2e4\ud589 \uac00\ub2a5\ud55c \uc774\ubbf8\uc9c0\ub85c \ub9cc\ub4e4\uba74 \ud5a5\ud6c4  Cloud\ud658\uacbd\uc5d0\uc11c CI\/CD\ud658\uacbd \uad6c\uc131\uc5d0 \uc788\uc5b4\uc11c\ub3c4 \ud65c\uc6a9\ub3c4\uac00 \ub192\uaca0\ub2e4\ub294 \uc0dd\uac01\uc744 \ud558\uac8c \ub418\uc5c8\ub2e4.<\/p>\n\n\n\n<p>\uc790 \uadf8\ub7fc \ubc30\uacbd\uc124\uba85\uc740 \uc774\uc815\ub3c4\ub85c \ud558\uace0 \uc804\uccb4 \uc2dc\ub098\ub9ac\uc624\uc640 \uad6c\uc131\ud558\uace0\uc790 \ud558\ub294 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158 \uad6c\uc870\uc5d0 \ub300\ud55c \uc598\uae30\ub85c \uc774\uc5b4\uac00\ubcf4\uc790.<\/p>\n\n\n\n<p>\uacbd\ub85c\ud0d0\uc0c9 \uc54c\uace0\ub9ac\uc998\uc758 \uc2e4\ud589 \uacb0\uacfc\ub85c \uc0dd\uc131\ub41c \uacbd\ub85c\uac00 \uc5b4\ub5a4 \ud615\ud0dc\uc778\uc9c0 \uc9c0\ub3c4\uc0c1\uc5d0\uc11c \uc2dc\uac01\uc801\uc73c\ub85c \ud655\uc778\ud560 \uc218 \uc788\ub3c4\ub85d \ud560 \ubfd0\ub9cc \uc544\ub2c8\ub77c \uc54c\uace0\ub9ac\uc998 \uc885\ub958\ub97c \ubc14\uafd4\uac00\uba74\uc5b4 \uadf8 \uacb0\uacfc\uac00 \uc5b4\ub5bb\uac8c \ub2ec\ub77c\uc9c0\ub294\uc9c0 \ud655\uc778\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\ub294 WebApp\uc744 \ub9cc\ub4e4\uace0\uc790 \ud55c\ub2e4.<\/p>\n\n\n\n<p>\ub2f9\uc5f0\ud55c \uc774\uc57c\uae30\uc9c0\ub9cc \uacbd\ub85c\ud0d0\uc0c9 \uc54c\uace0\ub9ac\uc998 \uc2e4\ud589\uc5d0 \ud544\uc694\ud55c \ubaa8\ub378\uc778 \ub3c4\ub85c\ub124\ud2b8\uc6cc\ud06c \uadf8\ub798\ud504(Graph)\ub97c \uad6c\uc131\ud558\ub824\uba74 \ub3c4\ub85c\ub124\ud2b8\uc6cc\ud06c \ub370\uc774\ud130\uac00 \ud544\uc694\ud558\ub2e4. \uc774 \ub370\uc774\ud130\uc758 \ub85c\ub529\uacfc WebApp \ub3d9\uc791\uc5d0 \ud544\uc694\ud55c \ubd80\uac00 \ub370\uc774\ud130\ub97c \uc81c\uacf5\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc124\uce58\uc640 \uad6c\uc131\uc774 \ud544\uc218\uc801\uc774\ub2e4.<\/p>\n\n\n\n<p>\uc774\ub807\uac8c \ubcf4\uba74 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158 \uad6c\uc870\ub294 \uc77c\ubc18\uc801\uc778 Web-WAS-DB\ud615\ud0dc\uc758 3-Tier\uac00 \uc801\ud569\ud558\uba70 \uac01 Tier\uc758 \uc5ed\ud560\uc740 \uc544\ub798\uc640 \uac19\uc774 \uc694\uc57d\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>WEB &#8211; \uc0ac\uc6a9\uc790\uac00 \uc54c\uace0\ub9ac\uc998 \uc885\ub958\ub97c \uc120\ud0dd\ud558\uba70 \uc9c0\ub3c4\ub97c \uc2dc\uac01\ud654\ud558\uace0 \uacbd\ub85c\ud0d0\uc0c9 \uc54c\uace0\ub9ac\uc998\uc758 \uc2e4\ud589 \uacb0\uacfc\ub97c \uc9c0\ub3c4\uc0c1\uc5d0 \ud45c\ud604\ud55c\ub2e4.<\/li>\n\n\n\n<li>WAS &#8211; \uacbd\ub85c\ud0d0\uc0c9 \uc54c\uace0\ub9ac\uc998\uc744 \uc2e4\ud589\ud558\uace0 \uadf8 \uacb0\uacfc\ub97c Client\ub85c \uc804\ub2ec\ud55c\ub2e4. \ubfd0\ub9cc \uc544\ub2c8\ub77c \ub3c4\ub85c\ub124\ud2b8\uc6cc\ud06c \ub370\uc774\ud130\uc758 \uc18d\uc131\uc815\ubcf4\ub97c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \uc77d\uc5b4 Graph Model\uc744 \uad6c\uc131\ud558\uace0 \ud074\ub77c\uc774\uc5b8\ud2b8 UI\uc5d0\uc11c \ud544\uc694\ub85c \ud558\ub294 \ub3c4\ub85c \uc18d\uc131 \ub370\uc774\ud130\ub97c Client\ub85c \uc804\ub2ec\ud558\ub294 \uae30\ub2a5\ub3c4 \ubcd1\ud589\ud55c\ub2e4.<\/li>\n\n\n\n<li>DB &#8211; \ub3c4\ub85c\ub124\ud2b8\uc6cc\ud06c \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\uace0 WAS\uc5d0\uc11c \ud544\uc694\ub85c \ud558\ub294 \ub370\uc774\ud130\ub97c \uc81c\uacf5\ud55c\ub2e4. <\/li>\n<\/ul>\n\n\n\n<p>\uc774\ub7f0 \uad6c\uc870\ub97c Container\ub85c \uad6c\uc131\ud558\ub824\uba74 \uac04\ub2e8\ud558\uac8c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 WAS\ub97c Container\ud654 \ud558\uba74 \ub41c\ub2e4. \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub294 \uc0c1\ub300\uc801\uc73c\ub85c \ub3c5\ub9bd\uc801\uc73c\ub85c \ub3d9\uc791\ud558\ub294 \ud615\ud0dc\uc5ec\uc11c Docker Hub\uc640 \uac19\uc740 Container Registry\uc5d0\uc11c \ubc1b\uc544 \ubc14\ub85c \uc0ac\uc6a9\ud558\uba74 \ub41c\ub2e4. \ud558\uc9c0\ub9cc \uacbd\ub85c\ud0d0\uc0c9\uacfc \uac19\uc740 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc740 Tomcat\uacfc \uac19\uc740 \uae30\uc874\uc758 \ud45c\uc900 WAS Container \uc774\ubbf8\uc9c0 \uc704\uc5d0 \uc6f9\uc571\uc744 \ucd94\uac00\ud558\uace0 \uc774 \ucd94\uac00\ub41c \ubd80\ubd84\uc744 \ud3ec\ud568\ud55c \uc0c8\ub85c\uc6b4 Container\uc774\ubbf8\uc9c0\ub85c \ube4c\ub4dc\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p>\ubfd0\ub9cc \uc544\ub2c8\ub77c Container\ub294 \uc0ad\uc81c\ub418\uba74 \uc2e4\ud589 \ub3d9\uc548 \uc0dd\uc131\ud588\ub358 \ubaa8\ub4e0 \ub370\uc774\ud130\ub4e4\ub3c4 \uac19\uc774 \uc0ac\ub77c\uc9c0\uac8c \ub418\ubbc0\ub85c Container \uc0ad\uc81c \ud6c4\uc5d0\ub3c4 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \ub370\uc774\ud130\uac00 \uc720\uc9c0\ub420 \uc218 \uc788\ub3c4\ub85d Container\uc678\ubd80\uc758 \uc800\uc7a5\uacf5\uac04\uacfc \ub9e4\ud551\ub41c Volume\uc744 \uc774\uc6a9\ud574\uc57c \ud55c\ub2e4. WAS\uc640 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uac04\uc758 \uc5f0\ub3d9\ub3c4 \ud544\uc694\ud558\ubbc0\ub85c \uc774\ub4e4 \uac04\uc758 \ud1b5\uc2e0\uc744 \uc704\ud574 \ub124\ud2b8\uc6cc\ud06c \uad6c\uc131\ub3c4 \uac19\uc774 \uace0\ub824\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p>\uc774\uc81c \uc2dc\ub098\ub9ac\uc624 \uad6c\ud604\uc744 \uc704\ud574 \ub370\uc774\ud130\ubca0\uc774\uc2a4, WAS, \ub124\ud2b8\uc6cc\ud06c \uad6c\uc131, Volume\uc744 \uc124\uc815\ud558\ub294 \uc77c\ub828\uc758 \uacfc\uc815\uc744 \uc124\uba85\ud558\ub3c4\ub85d \ud55c\ub2e4. \ucd5c\uc885\uc801\uc73c\ub85c\ub294 Docker Compose\ub97c \uc774\uc6a9\ud558\uc5ec \uc774\ub4e4 \uac1c\ubcc4 \uacfc\uc815\uc744 \ud558\ub098\ub85c \ubb36\uc5b4 \ucc98\ub9ac\ud558\ub294 \ubc29\ubc95\uc73c\ub85c \uc124\uba85\uc744 \uc774\uc5b4\uac00\ubcf4\ub3c4\ub85d \ud558\uaca0\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Network \uad6c\uc131<\/h3>\n\n\n\n<p>Container\uc758 \ub124\ud2b8\uc6cc\ud06c\ub294 Namespace\ub85c \ubd84\ub9ac\ub418\uc5b4 \uc788\uace0 Sandbox \ud615\ud0dc\ub85c \uad6c\uc131\ub418\uc5b4 Container \ub3c5\ub9bd\uc801\uc778 \ub124\ud2b8\uc6cc\ud06c \uad6c\uc131\uc774 \uac00\ub2a5\ud558\ub2e4. Container\uac00 \uc5b4\ub5a4 \ud658\uacbd\uc5d0\uc11c \uc0ac\uc6a9\ub418\ub290\ub0d0\uc5d0 \ub530\ub77c \uac70\uae30\uc5d0 \uc801\ud569\ud55c \ub124\ud2b8\uc6cc\ud06c\uad6c\uc131\uc744 \uc120\ud0dd\ud560 \uc218 \uc788\uc9c0\ub9cc \uc5ec\uae30\uc11c\ub294 \ud558\ub098\uc758 \ud638\uc2a4\ud2b8 \ub0b4\uc5d0\uc11c Container\uac04\uc758 \ud1b5\uc2e0\uc989, WAS Container\uc640 DB Container\uac04\uc758 \ud1b5\uc2e0\uc774 \ud3b8\ub9ac\ud558\ub3c4\ub85d Bridge \ub124\ud2b8\uc6cc\ud06c Driver\ub97c \ud65c\uc6a9\ud558\ub3c4\ub85d \ud55c\ub2e4.<\/p>\n\n\n\n<p>\ucc38\uace0\ub85c, \ucef4\ud4e8\ud130 \ub124\ud2b8\uc6cc\ud06c\ub294 \uc5ed\uc0ac\uac00 \uc624\ub798\ub418\uace0 \uadf8 \uac04\uc758 \ub2e4\uc591\ud55c \ub178\ud558\uc6b0\ub97c \ucd95\uc801\ud574 \uac00\uba70 \ubc1c\uc804\ud574 \uc628 \uc0c1\ud0dc\ub77c \uac1c\ubc1c\uc790\ub4e4\uc774 \uc0ac\uc6a9\ud558\uae30\uc5d0\ub294 \ub9e4\uc6b0 \ud3b8\ub9ac\ud558\uac8c \ub418\uc5b4 \uc788\uc9c0\ub9cc \uadf8 \ub0b4\ubd80 \uae30\uc220\ub4e4\uc744 \ud558\ub098\uc529 \ud30c\uc545\ud558\uae30\uc5d0\ub294 \uad11\ubc94\uc704\ud558\uace0 \ubcf5\uc7a1\ub3c4\ub3c4 \uc99d\uac00\ud558\uc5ec \uc5ec\uae30\uc11c\ub294 \uac1c\ubcc4 \uae30\uc220\ub4e4\uc5d0 \ub300\ud55c \uae4a\uc774 \uc788\ub294 \uc124\uba85\uc740 \uac74\ub108 \ub6f0\ub3c4\ub85d \ud55c\ub2e4. <\/p>\n\n\n\n<p>Docker\uc5d0\uc11c Default\ub85c \uc81c\uacf5\ud558\ub294 bridge \ub124\ud2b8\uc6cc\ud06c\ub294 &#8220;<strong>bridge<\/strong>&#8220;\ub77c\uace0 \ubd88\ub9ac\uba70 \ud638\uc2a4\ud2b8 \ucee4\ub110\uc5d0 \uc788\ub294 &#8220;docker0&#8221; \uc774\ub984\uc758 &#8220;<em>Linux birdge<\/em>&#8220;\uc640 \ub9e4\ud551\ub41c\ub2e4. \uc774 \ubd80\ubd84\uc744 \uadf8\ub9bc\uc73c\ub85c \ud45c\ud604\ud558\uba74 \uc544\ub798\uc640 \uac19\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"537\" src=\"https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/bridge-network-1024x537.png\" alt=\"\" class=\"wp-image-1826\" srcset=\"https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/bridge-network-1024x537.png 1024w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/bridge-network-300x157.png 300w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/bridge-network-768x403.png 768w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/bridge-network-1536x805.png 1536w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/bridge-network-2048x1073.png 2048w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/bridge-network-515x270.png 515w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\uc774\uc81c Default\ub85c \uc81c\uacf5\ub418\ub294 Bridge\ub124\ud2b8\uc6cc\ud06c\uac00 \uc544\ub2cc Docker \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud558\uc5ec Singe-host Bridge Network\uc744 \uc0dd\uc131\ud574\ubcf4\uc790. \uba85\ub839\uc5b4\ub294 \uac04\ub2e8\ud558\ub2e4. \uc544\ub798\uc640 \uac19\uc774 docker network create \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uba74 \uac04\ub2e8\ud558\uac8c &#8220;localnet&#8221;\uc774\ub77c\ub294\uc774\ub984\uc758 bridge \ub124\ud2b8\uc6cc\ud06c\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\ub2e4. <em>(-d \uc635\uc158\uc740 driver\uc758 \uc885\ub958\ub97c \uc9c0\uc815\ud55c\ub2e4)<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~$ docker network create -d bridge localnet\n9bd8b61bd94c452c87878ae4abb83a56a9a0a535f9d78a979d13c24ce49e4ec9<\/code><\/pre>\n\n\n\n<p>\uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uc5c8\ub294\uc9c0\ub294 \uc544\ub798\uc640 \uac19\uc774 \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~$ docker network ls\nNETWORK ID     NAME             DRIVER    SCOPE\n7bdaed379afc   bridge           bridge    local\n61aafbfc8573   host             host      local\n9bd8b61bd94c   localnet         bridge    local\ne173d1a8fcbb   none             null      local<\/code><\/pre>\n\n\n\n<p>\ubc29\uae08 \uc0dd\uc131\ud55c localnet\uc758 \uc0c1\uc138\uc815\ubcf4\ub97c \ud655\uc778\ud558\ub824\uba74 inspect \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud558\uba74 \ub418\uace0 \uc544\ub798\uc640 \uac19\uc774 \uc5ec\ub7ec\uac00\uc9c0 \uc18d\uc131\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~$ docker network inspect localnet\n&#91;\n    {\n        \"Name\": \"localnet\",\n        \"Id\": \"9bd8b61bd94c452c87878ae4abb83a56a9a0a535f9d78a979d13c24ce49e4ec9\",\n        \"Created\": \"2024-12-22T04:55:59.024670592Z\",\n        \"Scope\": \"local\",\n        \"Driver\": \"bridge\",\n        \"EnableIPv6\": false,\n        \"IPAM\": {\n            \"Driver\": \"default\",\n            \"Options\": {},\n            \"Config\": &#91;\n                {\n                    \"Subnet\": \"172.19.0.0\/16\",\n                    \"Gateway\": \"172.19.0.1\"\n                }\n            ]\n        },\n        \"Internal\": false,\n        \"Attachable\": false,\n        \"Ingress\": false,\n        \"ConfigFrom\": {\n            \"Network\": \"\"\n        },\n        \"ConfigOnly\": false,\n        \"Containers\": {},\n        \"Options\": {},\n        \"Labels\": {}\n    }\n]<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Volume \uc0dd\uc131<\/h3>\n\n\n\n<p>Container\ud658\uacbd \ud558\uc5d0\uc11c\ub294 Volume\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \ud544\uc218\uc801\uc774\ub77c \ud560 \uc218 \uc788\ub294\ub370 \uc5ec\uae30\uc5d0\ub294 \uba87\uac00\uc9c0 \uc774\uc720\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Volume\uc740 Container\uc758 lifecycle\uacfc \ub3c5\ub9bd\uc801\uc73c\ub85c \ub3d9\uc791\ud558\ub294 \uac1d\uccb4\uc774\ub2e4.(Container\uac00 \uc0ad\uc81c\ub418\ub354\ub77c\ub3c4 Volume\uc740 \uc9c0\uc6cc\uc9c0\uc9c0 \uc54a\ub294\ub2e4)<\/li>\n\n\n\n<li>NAS\uc640 \uac19\uc774 \ud2b9\ubcc4\ud55c \uc678\ubd80 \uc800\uc7a5\ub9e4\uccb4\uc5d0 Volume\uc744 \ub9e4\ud551\ud560 \uc218 \uc788\ub2e4.<\/li>\n\n\n\n<li>\uc11c\ub85c \ub2e4\ub978 Host\uc5d0\uc11c \ub3d9\uc791\ud558\ub294 \uc5ec\ub7ec Container\uac00 \ub3d9\uc77c\ud55c \ub370\uc774\ud130\ub97c \uacf5\uc720\ud558\uae30 \uc704\ud574 Volume\uc744 \uc774\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"337\" src=\"https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/volume-1024x337.png\" alt=\"\" class=\"wp-image-1832\" srcset=\"https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/volume-1024x337.png 1024w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/volume-300x99.png 300w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/volume-768x253.png 768w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/volume-1536x505.png 1536w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/volume-2048x674.png 2048w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/volume-604x199.png 604w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Network \uc744 \uc0dd\uc131\ud55c \uac83\uacfc \ub9c8\ucc2c\uac00\uc9c0\ub85c Volume \uc0dd\uc131\ub3c4 Docker volume \uba85\ub839\uc5b4\ub85c \uac04\ub2e8\ud558\uac8c \uc0dd\uc131\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~$ docker volume create myvol\nmyvol<\/code><\/pre>\n\n\n\n<p>\ud2b9\ubcc4\ud55c \uc635\uc158\uc744 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 default\ub85c <strong>local<\/strong> driver \ub97c \uc801\uc6a9\ud55c\ub2e4. \ub9cc\uc57d SAN, NAS\uc640 \uac19\uc774 \ub2e4\ub978 driver\ub97c \uc801\uc6a9\ud558\ub824\uba74 <em>-d <\/em>\uc635\uc158\uc744 \uc774\uc6a9\ud558\uc5ec \uc9c0\uc815\ud558\uba74 \ub41c\ub2e4.<\/p>\n\n\n\n<p>\uc815\uc0c1\uc801\uc73c\ub85c Volume\uc774 \uc0dd\uc131\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\ub824\uba74 \uc544\ub798\uc640 \uac19\uc774 \uc2e4\ud589\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~$ docker volume ls\nDRIVER    VOLUME NAME\nlocal     buildx_buildkit_container0_state\nlocal     myvol<\/code><\/pre>\n\n\n\n<p>Network\uc5d0\uc11c \ud655\uc778\ud588\ub358 \uac83\ucc98\ub7fc \uc0c1\uc138 \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\ub824\uba74 \uc544\ub798\uc640 \uac19\uc774 inspect \uba85\ub839\uc744 \ud65c\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~$ docker volume inspect myvol\n&#91;\n    {\n        \"CreatedAt\": \"2024-12-22T06:46:56Z\",\n        \"Driver\": \"local\",\n        \"Labels\": null,\n        \"Mountpoint\": \"\/var\/lib\/docker\/volumes\/myvol\/_data\",\n        \"Name\": \"myvol\",\n        \"Options\": null,\n        \"Scope\": \"local\"\n    }\n]<\/code><\/pre>\n\n\n\n<p>\uc9c0\uae08\uae4c\uc9c0 \ube44\uad50\uc801 \uac04\ub2e8\ud558\uac8c Network\uacfc Volume\uc744 \uc0dd\uc131\ud588\ub2e4. \uc774\ub807\uac8c \uc0dd\uc131\ud55c Network\uacfc Volume\uc774 \uc5b4\ub5bb\uac8c \ud65c\uc6a9\ub418\ub294\uc9c0 \uad81\uae08\ud560 \uac83\uc774\ub2e4. \uc9c0\uae08\uc740 \ub2e8\uc21c \uc0dd\uc131\ud55c \uac83\uc5d0 \ubd88\uacfc\ud558\uace0 \uc774\ub807\uac8c \uc0dd\uc131\ud55c \ub9ac\uc18c\uc2a4\ub4e4\uc744 \uc2e4\uc81c \ud65c\uc6a9\ud558\ub824\uba74 Container \uc778\uc2a4\ud134\uc2a4\ub97c \uc2e4\ud589\ud574\uc57c \ud55c\ub2e4. \uadf8\ub7fc \uc774\uc81c\ubd80\ud130 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 WAS\ub97c \uac01\uac01 \ucee8\ud14c\uc774\ub108\ub85c \uc2e4\ud589\ud574 \ubcf4\ub3c4\ub85d \ud558\uc790.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">PostGIS Database \ubc0f \ub370\uc774\ud130 \ub85c\ub529<\/h3>\n\n\n\n<p>\uacbd\ub85c\ud0d0\uc0c9 \uc54c\uace0\ub9ac\uc998 \ub3d9\uc791\uc5d0\uc11c \uac00\uc7a5 \uae30\ubcf8\uc774 \ub418\ub294 \ub3c4\ub85c\ub124\ud2b8\uc6cc\ud06c \ub370\uc774\ud130\ub97c \ud65c\uc6a9\ud558\ub824\uba74 PostGIS \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \ud65c\uc6a9\ud558\ub294 \uac83\uc774 \uc774\uc0c1\uc801\uc774\ub2e4. \uc65c\ub0d0\ud558\uba74 \uc624\ud508\uc18c\uc2a4\uc774\uae30\ub3c4 \ud558\uc9c0\ub9cc Spatial \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\uae30\uc5d0 \ud544\uc694\ud55c \ub2e4\uc591\ud55c \ud568\uc218\ub4e4\uc744 \uc9c0\uc6d0\ud558\uae30 \ub54c\ubb38\uc778\ub2e4. \ub300\uac1c Postgre \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc124\uce58\ud558\uace0 PostGIS Extension\uc744 \uc124\uce58\ud558\ub294 \uac83\uc774 \uc77c\ubc18\uc801\uc774\uc9c0\ub9cc \uc774 \uacfc\uc815\uc744 <a href=\"https:\/\/registry.hub.docker.com\/r\/postgis\/postgis\/\">Container \uc774\ubbf8\uc9c0<\/a>\ub85c \ub9cc\ub4e4\uc5b4 \ub193\uc740 \uac83\uc774 \uc788\uae30 \ub54c\ubb38\uc5d0 \uc774 \uc774\ubbf8\uc9c0\ub97c \ud65c\uc6a9\ud558\uba74 \ub9e4\uc6b0 \ud3b8\ub9ac\ud558\ub2e4.<\/p>\n\n\n\n<p>\ub2e4\uc74c\uacfc \uac19\uc774 Docker Registry\ub85c\ubd80\ud130 PostGIS \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc774\ubbf8\uc9c0\ub97c \uac00\uc838\uc628\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~$ docker pull postgis\/postgis:latest\nlatest: Pulling from postgis\/postgis\n69fb10dc82f9: Download complete \n6e960f1d1cb2: Download complete \n76ff61fca8ac: Download complete \ne38f3c7dfafc: Download complete \n4f4fb700ef54: Already exists \n5a4c03fb0645: Download complete \n7c47d8691482: Download complete \n895fbad56208: Download complete \nd09aa25aff9b: Download complete \n94b0cc5cc920: Download complete \n54dee37b05f4: Download complete \n922ff8346899: Download complete \na90f29aea359: Download complete \n20349e765a80: Download complete \nc001797204e2: Download complete \n150ea94b3a83: Download complete \n24d10937fb39: Download complete \n2c3d13839904: Download complete \nDigest: sha256:b57926d4206ce59474e0041e33290ac17f12f4f586c651eb38f2424cc1f69314\nStatus: Downloaded newer image for postgis\/postgis:latest\ndocker.io\/postgis\/postgis:latest<\/code><\/pre>\n\n\n\n<p>Container \uc774\ubbf8\uc9c0\ub97c \uc815\uc0c1\uc801\uc73c\ub85c \uac00\uc838\uc654\ub294\uc9c0 \uc544\ub798\uc640 \uac19\uc774 \uc2e4\ud589\ud574 \ubcf4\uba74 \ud655\uc778\uc774 \uac00\ub2a5\ud558\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~$ docker images\nREPOSITORY        TAG               IMAGE ID       CREATED       SIZE\npostgis\/postgis   latest            b57926d4206c   6 days ago    885MB\nmoby\/buildkit     buildx-stable-1   91b72a6d6963   4 weeks ago   299MB<\/code><\/pre>\n\n\n\n<p>\uc774\uc81c \uac00\uc838\uc628 \ub370\uc774\ud130\ubca0\uc774\uc2a4 Container \uc774\ubbf8\uc9c0\ub97c \uc2e4\ud589\ud560 \ucc28\ub840\uc774\ub2e4. Container \uc774\ubbf8\uc9c0\ub97c \uc2e4\ud589\ud560 \ub54c \uc544\ub798\uc640 \uac19\uc774 \uc55e\uc5d0\uc11c \uc0dd\uc131\ud588\ub358 Volume\uacfc Network\uc744 \uc9c0\uc815\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~$ docker run --name postgis-1 -v myvol:\/var\/lib\/postgresql\/data --network localnet -p 6432:5432 -e POSTGRES_PASSWORD=postgres -d postgis\/postgis\n14b1af28b73b0e64cc0df7e604f35e41c93210b6ede704a98d386ee73eca07b0<\/code><\/pre>\n\n\n\n<p>-v \uc635\uc158\uc744 \uc774\uc6a9\ud558\uc5ec Volume\uc744 \uc9c0\uc815\ud558\uba70 \uc774\ub54c \ucf5c\ub860(:) \uc55e \ubd80\ubd84\uc740 \uc55e\uc11c \uc0dd\uc131\ud55c Volume \uc774\ub984\uc774 \ub418\uace0 \ub4b7 \ubd80\ubd84\uc740 Mount\ub420 PostGIS \ucee8\ud14c\uc774\ub108\uc758 \ub0b4\ubd80 Path\uac00 \ub41c\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c PostgreSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uac00 \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\ub294 Path\ub294 <em>&#8220;\/var\/lib\/postgresql\/data&#8221;<\/em> \uc774\ubbc0\ub85c \uc774 \uc704\uce58\ub97c Volume\uc73c\ub85c \uc9c0\uc815\ud558\uba74 Container\uac00 \uc0ad\uc81c\ub418\ub354\ub77c\ub3c4 \ub2e4\uc2dc \uc2e4\ud589 \ud588\uc744 \ub54c \uae30\uc874\uc5d0 \uc788\ub358 \ub370\uc774\ud130\ub97c \uadf8\ub300\ub85c \uc720\uc9c0\ud560 \uc218 \uc788\ub2e4. \ud655\uc778\uc744 \ud574\ubcf4\uace0\uc790 \ud55c\ub2e4\uba74 \uc544\ub798\uc640 \uac19\uc774 Container\uc5d0 \uc811\uc18d\ud55c \uc218 \ud574\ub2f9 \ub514\ub809\ud130\ub9ac\uc758 \ub0b4\uc6a9\uc744 \ud655\uc778\ud574 \ubcf4\uba74 \ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~$ docker exec -it postgis-1 bash\nroot@14b1af28b73b:\/# cd \/var\/lib\/postgresql\/data\nroot@14b1af28b73b:\/var\/lib\/postgresql\/data# ls\nbase\tpg_commit_ts  pg_hba.conf    pg_logical    pg_notify\tpg_serial     pg_stat\t   pg_subtrans\tpg_twophase  pg_wal   postgresql.auto.conf  postmaster.opts\nglobal\tpg_dynshmem   pg_ident.conf  pg_multixact  pg_replslot\tpg_snapshots  pg_stat_tmp  pg_tblspc\tPG_VERSION   pg_xact  postgresql.conf\t    postmaster.pid<\/code><\/pre>\n\n\n\n<p>\uadf8\ub9ac\uace0 &#8211;network \uc635\uc158\uc744 \uc774\uc6a9\ud558\uc5ec \uc55e\uc11c \uc0dd\uc131\ud588\ub358 Network\uc758 \uc774\ub984<em>(localnet)<\/em>\uc744 \uc9c0\uc815\ud55c\ub2e4. \uadf8\ub9ac\uace0 PostgreSQL\uc758 \uc811\uc18d port\ub294 \uc77c\ubc18\uc801\uc73c\ub85c 5432\uc774\uc9c0\ub9cc \uc5ec\uae30\uc11c\ub294 6432\ub85c \uc9c0\uc815\ud558\uc5ec \uc0ac\uc6a9\ud55c\ub2e4.<em>(-p 6432:5432)<\/em> \uadf8 \uc774\uc678\uc758 \uc635\uc158\ub4e4\uc740 <a href=\"https:\/\/registry.hub.docker.com\/r\/postgis\/postgis\/\">PostGIS\uc758 Docker Registry<\/a>\uc758 PostGIS \uc124\uba85\uc744 \ucc38\uace0\ud558\uae30 \ubc14\ub780\ub2e4.<\/p>\n\n\n\n<p>\uc774\uc81c \uae30\ub3d9\ub41c \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub85c \ub3c4\ub85c\ub124\ud2b8\uc6cc\ud06c \ub370\uc774\ud130\ub97c \ub85c\ub529\ud574 \ubcf4\uc790. \ub85c\ub529\ud560 \ub370\uc774\ud130\ub294 \uae30\uc874\uc5d0 \uc124\uce58\ub41c \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub85c\ubd80\ud130 \ubc31\uc5c5<em>(network_data.backup)<\/em>\uc744 \ubc1b\uc558\ub2e4\uace0 \uac00\uc815\ud558\uc790. \uc774\ub807\uac8c \ubc31\uc5c5 \ubc1b\uc740 \ub370\uc774\ud130\ub97c \ucee8\ud14c\uc774\ub108 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ub85c\ub529\ud558\ub294 \ubc29\ubc95\uc740 \uc544\ub798\uc758 \uba85\ub839\uc5b4\uc640 \uac19\uc774 \ube44\uad50\uc801 \uc27d\uac8c \ucc98\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p>\uc6b0\uc120 Contaienr \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub85c \uc811\uc18d\ud558\uc5ec database\ub97c \uc0dd\uc131\ud55c\ub2e4. \uc774\ub54c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc774\ub984\uc744 <em>&#8220;network&#8221;<\/em>\uc73c\ub85c \uc9c0\uc815\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~\/docker\/march$ psql -h localhost -p 6432 -U postgres\nPassword for user postgres: \npsql (17.2 (Ubuntu 17.2-1.pgdg20.04+1))\nType \"help\" for help.\n\npostgres=# create database network;\nCREATE DATABASE\npostgres=# \\l\n                                                        List of databases\n       Name       |  Owner   | Encoding | Locale Provider |  Collate   |   Ctype    | Locale | ICU Rules |   Access privileges   \n------------------+----------+----------+-----------------+------------+------------+--------+-----------+-----------------------\n network          | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           | \n postgres         | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           | \n template0        | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           | =c\/postgres          +\n                  |          |          |                 |            |            |        |           | postgres=CTc\/postgres\n template1        | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           | =c\/postgres          +\n                  |          |          |                 |            |            |        |           | postgres=CTc\/postgres\n template_postgis | postgres | UTF8     | libc            | en_US.utf8 | en_US.utf8 |        |           | \n(5 rows)\npostgres-# \\q\nskanto@skanto:~\/docker\/march$<\/code><\/pre>\n\n\n\n<p>\ub3c4\ub85c\ub124\ud2b8\uc6cc\ud06c \ub370\uc774\ud130\ub97c \ub85c\ub529\ud560 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc0dd\uc131\ud588\ub2e4\uba74 \uc774\uc81c \ubc31\uc5c5 \ubc1b\uc558\ub358 \ub370\uc774\ud130\ub97c Restore\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~\/docker\/march$ pg_restore --verbose --clean --no-acl --no-owner --host localhost -p 6432 -U postgres --dbname network network_data.backup\npg_restore: connecting to database for restore\nPassword: \npg_restore: dropping INDEX net_turn_p_geom_idx\n... &lt;omitted&gt;\n... &lt;omitted&gt;<\/code><\/pre>\n\n\n\n<p>\uc774\uc81c \ub370\uc774\ud130\uac00 \uc815\uc0c1\uc801\uc73c\ub85c Restore\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud574 network \ub370\uc774\ud130\uc5d0 \uc811\uc18d\ud558\uc5ec \uc0dd\uc131\ub41c table\ub4e4\uc744 \ud655\uc778\ud574 \ubcf4\ub3c4\ub85d \ud558\uc790.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~\/docker\/march$ psql -h localhost -p 6432 -U postgres\nPassword for user postgres: \npsql (17.2 (Ubuntu 17.2-1.pgdg20.04+1))\nType \"help\" for help.\n\npostgres=# \\c network\nYou are now connected to database \"network\" as user \"postgres\".\nnetwork=# \\dt v_20240118.*\n                List of relations\n   Schema   |      Name       | Type  |  Owner   \n------------+-----------------+-------+----------\n v_20240118 | net_cninfo      | table | postgres\n v_20240118 | net_dir         | table | postgres\n v_20240118 | net_fare        | table | postgres\n v_20240118 | net_fare_ev     | table | postgres\n v_20240118 | net_fare_ev_hi  | table | postgres\n v_20240118 | net_fare_hi     | table | postgres\n v_20240118 | net_ferry_info  | table | postgres\n v_20240118 | net_ferry_link  | table | postgres\n v_20240118 | net_guidept_p   | table | postgres\n v_20240118 | net_image       | table | postgres\n v_20240118 | net_lane        | table | postgres\n v_20240118 | net_link_l      | table | postgres\n v_20240118 | net_linkin      | table | postgres\n v_20240118 | net_node_p      | table | postgres\n v_20240118 | net_oil_link    | table | postgres\n v_20240118 | net_safety_l    | table | postgres\n v_20240118 | net_safety_p    | table | postgres\n v_20240118 | net_safety_pair | table | postgres\n v_20240118 | net_scenic_info | table | postgres\n v_20240118 | net_scenic_link | table | postgres\n v_20240118 | net_svcarea     | table | postgres\n v_20240118 | net_td_link     | table | postgres\n v_20240118 | net_td_pass     | table | postgres\n v_20240118 | net_toll        | table | postgres\n v_20240118 | net_tolllink    | table | postgres\n v_20240118 | net_turn_p      | table | postgres\n(26 rows)<\/code><\/pre>\n\n\n\n<p>\uc704\uc758 \ucd9c\ub825 \uacb0\uacfc\uc640 \uac19\uc774 <em>&#8220;network&#8221;<\/em> \ub370\uc774\ud130\ubca0\uc774\uc2a4 <em>&#8220;v_20240118&#8221;<\/em> \uc2a4\ud0a4\ub9c8\uc5d0 \ud14c\uc774\ube14\ub4e4\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uc5c8\uc74c\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p>\uc774\ub807\uac8c \ube44\uad50\uc801 \uac04\ub2e8\ud55c \ubc29\ubc95\uc73c\ub85c PostGIS \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uae30\ub3d9\ud558\uace0 \uc55e\uc5d0\uc11c \uc0dd\uc131\ud588\ub358 Volume\uacfc Network\uc744 \uc9c0\uc815\ud558\uc600\ub2e4. \uc774\uc81c \uc0dd\uc131\ud588\ub358 Network\uc774 \uc5b4\ub5bb\uac8c \ub3d9\uc791\ud558\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud574 WAS Container\uc774\ubbf8\uc9c0\ub97c \uac00\uc838\uc640 \uc2e4\ud589\ud574 \ubcf4\ub3c4\ub85d \ud558\uc790.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tomcat Container \uc2e4\ud589<\/h3>\n\n\n\n<p>\uba3c\uc800 \uc544\ub798\uc640 \uac19\uc774 Docker Registry\ub85c\ubd80\ud130 Tomcat Image\ub97c \uac00\uc838\uc628\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~\/docker\/march$ docker pull tomcat:latest\nlatest: Pulling from library\/tomcat\nDigest: sha256:935ff51abecc8dc793cb19c229ac7a988c8899e5fcba5e69ae96530fa76c4d56\nStatus: Downloaded newer image for tomcat:latest\ndocker.io\/library\/tomcat:latest<\/code><\/pre>\n\n\n\n<p>\uc774\uc81c \uc55e\uc11c \uc0dd\uc131\ud588\ub358 Network\uc744 \uc774\uc6a9\ud558\uc5ec Tomcat \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud574 \ubcf4\uc790.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~\/docker\/march$ docker run --name tomcat --network localnet -d -p 8080:8080 tomcat\nc593239c8da20b867f93ea56088c6f1a67677525355c0e5f2d9db37e44272519<\/code><\/pre>\n\n\n\n<p>\uc2e4\ud589\ud55c Tomcat\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uae30\ub3d9\ub418\uc5c8\ub294\uc9c0\ub294 \uc544\ub798\uc640 \uac19\uc774 \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~\/docker\/march$ docker ps -a\nCONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS                    NAMES\nc593239c8da2   tomcat                          \"catalina.sh run\"        36 seconds ago   Up 35 seconds   0.0.0.0:8080-&gt;8080\/tcp   tomcat\n14b1af28b73b   postgis\/postgis                 \"docker-entrypoint.s\u2026\"   2 hours ago      Up 2 hours      0.0.0.0:6432-&gt;5432\/tcp   postgis-1\n1963f757e8fc   moby\/buildkit:buildx-stable-1   \"buildkitd --allow-i\u2026\"   3 weeks ago      Up 3 days                                buildx_buildkit_container0<\/code><\/pre>\n\n\n\n<p>\uadf8\ub9ac\uace0 \uc6f9 \ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uc5b4 <em>http:\/\/localhost:8080<\/em> \uc73c\ub85c \uc811\uc18d\ud558\uba74 \uc544\ub798 \ud654\uba74\uacfc \uac19\uc774 \ucd9c\ub825\ub428\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4. \ucc38\uace0\ub85c, 404\uc624\ub958 \ud398\uc774\uc9c0\uac00 \ucd9c\ub825\ub418\uc9c0\ub9cc Tomcat \uc11c\ubc84\uc5d0\ub294 \uc2e4\ud589\ub418\ub294 WebApp\uc774 \uc5c6\ub294 \uc0c1\ud0dc\uc5ec\uc11c \uc624\ub958\ud398\uc774\uc9c0\uac00 \ucd9c\ub825\ub418\ub294 \uac83\uc774\ubbc0\ub85c \uc815\uc0c1 \ub3d9\uc791\uc774\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"492\" height=\"158\" src=\"https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/image.png\" alt=\"\" class=\"wp-image-1835\" srcset=\"https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/image.png 492w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/image-300x96.png 300w\" sizes=\"auto, (max-width: 492px) 100vw, 492px\" \/><\/figure>\n<\/div>\n\n\n<p>\uc774\uc81c Tomcat Container\uc5d0 \uc811\uc18d\ud558\uc5ec PostGIS Container\ub85c \ub124\ud2b8\uc6cc\ud06c \uc811\uc18d\uc774 \uac00\ub2a5\ud55c\uc9c0 \ud655\uc778\ud574 \ubcf4\uc790. \uc5ec\uae30\uc11c\ub294 ping \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud558\uc5ec \uc11c\ub85c \uc5f0\uacb0\uc774 \ub418\ub294\uc9c0 \ud655\uc778\ud574 \ubcf4\ub3c4\ub85d \ud55c\ub2e4.<\/p>\n\n\n\n<p>\uc2e4\ud589 \uc911\uc778 Tomcat Container\uc5d0 \uc811\uc18d\ud558\uc5ec ping\uc744 \uc2e4\ud589\ud55c\ub2e4. \uc774\ub54c PostGIS\uc758 IP\uc8fc\uc18c\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uace0 Container\uc758 \uc774\ub984\uc744 \uc774\uc6a9\ud558\uc5ec \uc811\uc18d\ud55c\ub2e4. \ucc38\uace0\ub85c, Container Bridge Network\uc740 \uc790\uccb4\uc801\uc73c\ub85c Name Service\ub97c \uc720\uc9c0\ud558\uace0 \uc788\uc5b4 \ucee8\ud14c\uc774\ub108\uc758 \uc774\ub984\ub9cc\uc73c\ub85c\ub3c4 \ud574\ub2f9 \ucee8\ud14c\uc774\ub108\ub85c \uc27d\uac8c \uc811\uc18d\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~\/docker\/march$ docker exec -it tomcat bash\nroot@c593239c8da2:\/usr\/local\/tomcat# ping postgis-1\nbash: ping: command not found<\/code><\/pre>\n\n\n\n<p>\ud558\uc9c0\ub9cc, \uc704\uc5d0\uc11c\uc640 \uac19\uc774 ping \uba85\ub839\uc5b4\ub97c \ucc3e\uc744 \uc218 \uc5c6\ub2e4\ub294 \uc624\ub958\uac00 \ucd9c\ub825\ub420 \uac83\uc774\ub2e4. \uadf8\ub7fc apt-get update\ub97c \uc774\uc6a9\ud558\uc5ec package\ub97c \uc5c5\ub370\uc774\ud2b8 \ud55c \ub2e4\uc74c \uc544\ub798\uc640 \uac19\uc774 ping utility\ub97c \uc124\uce58\ud574 \uc900\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>root@c593239c8da2:\/usr\/local\/tomcat# apt-get update\nGet:1 http:\/\/archive.ubuntu.com\/ubuntu noble InRelease &#91;256 kB]                                            \nGet:2 http:\/\/security.ubuntu.com\/ubuntu noble-security InRelease &#91;126 kB]\n... &lt;omitted&gt;\n... &lt;omitted&gt;\n\nroot@c593239c8da2:\/usr\/local\/tomcat# apt-get install -y iputils-ping\nReading package lists... Done\nBuilding dependency tree... Done\nReading state information... Done\nThe following additional packages will be installed:\n  libcap2-bin libpam-cap\nThe following NEW packages will be installed:\n  iputils-ping libcap2-bin libpam-cap\n... &lt;omitted&gt;\n... &lt;omitted&gt;<\/code><\/pre>\n\n\n\n<p>\uc774\uc81c \ub2e4\uc2dc ping \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud558\uc5ec PostGIS \ucee8\ud14c\uc774\ub108\uc640 \ud1b5\uc2e0\uc774 \uac00\ub2a5\ud55c\uc9c0 \ud655\uc778\ud574 \ubcf4\uba74 \uc815\uc0c1 \ub3d9\uc791\ub428\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc744 \uac83\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>root@c593239c8da2:\/usr\/local\/tomcat# ping postgis-1\nPING postgis-1 (172.19.0.2) 56(84) bytes of data.\n64 bytes from postgis-1.localnet (172.19.0.2): icmp_seq=1 ttl=64 time=0.367 ms\n64 bytes from postgis-1.localnet (172.19.0.2): icmp_seq=2 ttl=64 time=0.105 ms\n64 bytes from postgis-1.localnet (172.19.0.2): icmp_seq=3 ttl=64 time=0.101 ms\n64 bytes from postgis-1.localnet (172.19.0.2): icmp_seq=4 ttl=64 time=0.103 ms\n64 bytes from postgis-1.localnet (172.19.0.2): icmp_seq=5 ttl=64 time=0.105 ms\n...<\/code><\/pre>\n\n\n\n<p>\uc774\uc81c \uc2dc\ub098\ub9ac\uc624 \uad6c\ud604\uc744 \uc704\ud55c \uc11c\ubc84(WAS, DB) \uc778\ud504\ub77c \uad6c\uc131\uc740 \uc644\ub8cc\ub418\uc5c8\uc73c\ubbc0\ub85c \ub2e4\uc74c\uc73c\ub85c WebApp\uc744 \ud3ec\ud568\ud558\ub294 WAS \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \uc81c\uc791\ud574 \ubcf4\ub3c4\ub85d \ud558\uc790.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">WebApp Container \uc774\ubbf8\uc9c0 \uc81c\uc791<\/h3>\n\n\n\n<p>\uc55e\uc5d0\uc11c Docker Registry\uc5d0\uc11c \ubc1b\uc740 Tomcat \uc774\ubbf8\uc9c0 \uc704\uc5d0 \uacbd\ub85c\ud0d0\uc0c9 \uc2e4\ud589\uc744 \uc704\ud55c RESTful API Endpoint\uc640 \uadf8 \uacb0\uacfc\ub97c \uc2dc\uac01\ud654\ud558\ub294 WebApp\uc744 \ube4c\ub4dc\ud558\uace0 \uc774\ub97c Container\uc774\ubbf8\uc9c0\ub85c Build\ud55c\ub2e4.<\/p>\n\n\n\n<p>WebApp\uc740 Gitlab\uc5d0 \uc788\ub294 \uc18c\uc2a4\ucf54\ub4dc\ub97c Clone\ud574\uc11c Gradle\uc744 \uc774\uc6a9\ud558\uc5ec \uc2e4\uc2dc\uac04\uc73c\ub85c \ube4c\ub4dc\ud55c\ub2e4. Gitlab \ud504\ub85c\uc81d\ud2b8\ub294 \uc544\ub798\uc640 \uac19\uc740 \uad6c\uc870\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"297\" height=\"574\" src=\"https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/image-1.png\" alt=\"\" class=\"wp-image-1841\" srcset=\"https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/image-1.png 297w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/image-1-155x300.png 155w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/image-1-140x270.png 140w\" sizes=\"auto, (max-width: 297px) 100vw, 297px\" \/><\/figure>\n\n\n\n<p>\ucc38\uace0\ub85c, \uac01 \ud504\ub85c\uc81d\ud2b8\ub294 \uc544\ub798\uc640 \uac19\uc774 \uad6c\uc131\ub41c\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>march \ud504\ub85c\uc81d\ud2b8<\/strong><br>\uacbd\ub85c\ud0d0\uc0c9 \uc54c\uace0\ub9ac\uc998(Dijkstra, Bi-Directional Dijkstra, Contraction Hierarchy)\uc744 \uad6c\ud604\ud558\uba70 Core Library \uc131\uaca9\uc758 \ud504\ub85c\uc81d\ud2b8\uc774\ub2e4. \uc774 \ud504\ub85c\uc81d\ud2b8\ub294 Jar\ud30c\uc77c\ub85c \ube4c\ub4dc\ub418\uba70 model, route \ud504\ub85c\uc81d\ud2b8\uc758 \uacf5\ud1b5 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub85c \ud65c\uc6a9\ub41c\ub2e4.<\/li>\n\n\n\n<li><strong>model \ud504\ub85c\uc81d\ud2b8<\/strong><br>WebApp\ud504\ub85c\uc81d\ud2b8\ub85c \ub370\uc774\ud130 \ubaa8\ub378\uc744 \uad6c\uc131\ud55c\ub2e4. \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub85c\ubd80\ud130 \ub3c4\ub85c\ub124\ud2b8\uc6cc\ud06c \ub370\uc774\ud130\ub97c \uc77d\uc740 \ub2e4\uc74c \uba54\ubaa8\ub9ac\uc0c1\uc5d0 \ub3c4\ub85c\ub124\ud2b8\uc6cc\ud06c \uadf8\ub798\ud504 \ubaa8\ub378\uc744 \uc0dd\uc131\ud55c\ub2e4.<\/li>\n\n\n\n<li><strong>route \ud504\ub85c\uc81d\ud2b8<\/strong><br>WebApp\ud504\ub85c\uc81d\ud2b8\ub85c \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc694\uccad\ud55c \uacbd\ub85c\ud0d0\uc0c9 \uc694\uccad\uc744 \ubc1b\uc544 \uacbd\ub85c\ud0d0\uc0c9\uc744 \uc218\ud589\ud558\uace0 \uadf8 \uacb0\uacfc\ub97c \uc804\ub2ec\ud55c\ub2e4. \ub610\ud55c \uc6f9\uc571 UI\ub3c4 \uc774 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uc11c\ube44\uc2a4 \ub41c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p>\uac01 WebApp \ud504\ub85c\uc81d\ud2b8\ubcc4 Context Parameter \uc124\uc815 \ubc0f Tomcat \uc11c\ubc84 \ud658\uacbd \uc124\uc815\uc740 \ub610 \ub2e4\ub978 \uc8fc\uc81c\uc5ec\uc11c \uc5ec\uae30\uc11c\ub294 \uc0dd\ub7b5\ud558\ub3c4\ub85d \ud55c\ub2e4. \uad00\uc2ec\uc774 \uc788\ub2e4\uba74 \uac01 Gitlab\uc758 \ud504\ub85c\uc81d\ud2b8\ubcc4 Tomcat context \uc124\uc815\ud30c\uc77c(model.xml, ROOT.xml)\uc744 \ucc38\uace0\ud558\uae30 \ubc14\ub780\ub2e4.<\/p>\n\n\n\n<p>\ucd5c\uc885 Tomcat \uc774\ubbf8\uc9c0\ub85c \ube4c\ub4dc\ud558\uae30 \uc704\ud574 Gradle \uc124\uce58, \uc18c\uc18c\ucf54\ub4dc Clone, JAR\ud30c\uc77c \ube4c\ub4dc, WAR\ud30c\uc77c \ube4c\ub4dc, Tomcat \uc11c\ubc84\ub85c Deploy \uacfc\uc815\uc744 \uac70\uccd0\uc57c \ud558\ubbc0\ub85c <a href=\"https:\/\/docs.docker.com\/build\/building\/multi-stage\/\">Multi-Stage Build\ubc29\uc2dd<\/a>\uc73c\ub85c \uc9c4\ud589\ud55c\ub2e4.<\/p>\n\n\n\n<p>\uba3c\uc800 Gradle Container \uc774\ubbf8\uc9c0\ub97c \uac00\uc838\uc628 \ub2e4\uc74c Gitlab Repository\ub85c\ubd80\ud130 \uc18c\uc2a4\ucf54\ub4dc\ub97c Clone\ud558\uace0 Gradle\uc744 \uc774\uc6a9\ud558\uc5ec  \uac01 \ud504\ub85c\uc81d\ud2b8\ubcc4 WAR\ud30c\uc77c\uc744 \ube4c\ub4dc\ud55c\ub2e4.<\/p>\n\n\n\n<p>\uc774\ud6c4 Tomcat Container \uc774\ubbf8\uc9c0\ub97c \uac00\uc838\uc624\uace0 \uc774 \uc774\ubbf8\uc9c0\uc5d0 \uc55e\uc11c \ube4c\ub4dc\ud55c WAR\ud30c\uc77c\uc744 Deploy\ud558\uace0 \ucd5c\uc885\uc801\uc73c\ub85c WAR\ud30c\uc77c\uc744 \ud3ec\ud568\ud558\ub294 Tomcat Container \uc774\ubbf8\uc9c0\ub85c \ube4c\ub4dc\ud55c\ub2e4.<\/p>\n\n\n\n<p>\uc774\ub7f0 \uc77c\ub828\uc758 \uacfc\uc815\uc744 Dockerfile \uc5d0 \uae30\uc220\ud560 \uc218 \uc788\uc73c\uba70\ub85c \uc544\ub798\uc640 \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FROM gradle:jdk18-alpine AS build\n# Current workding dir: \/home\/gradle\nRUN apk add --update git\nRUN git clone https:\/\/10132999:PASSWORD@gitlab.dspace.kt.co.kr\/GISRPMM\/march.git \nWORKDIR \/home\/gradle\/march\nRUN gradle war \n\n# Base image\nFROM tomcat:latest AS server \n\n# Current workding dir: \/usr\/local\/tomcat\n# Copy jars to tomcat lib directory(march-core-1.0.0.jar, postgresql-42.7.2.jar)\nCOPY --from=build \/home\/gradle\/march\/march\/build\/libs\/*.jar lib \nCOPY --from=build \/home\/gradle\/march\/march\/lib\/*.jar lib \n\n# Copy environment configurations including classpath\n#COPY .\/setenv.sh bin\nCOPY --from=build \/home\/gradle\/march\/setenv.sh bin \n\n# Copy Web Applicatoin(ROOT)(ROOT.war, model.war)\n#COPY .\/*.war webapps\nCOPY --from=build \/home\/gradle\/march\/model\/build\/libs\/model.war webapps\nCOPY --from=build \/home\/gradle\/march\/route\/build\/libs\/ROOT.war webapps\n\n# Configure Web Application Contexts(ROOT.xml, model.xml)\nRUN mkdir -p conf\/Catalina\/localhost\nCOPY --from=build \/home\/gradle\/march\/route\/ROOT.xml conf\/Catalina\/localhost\nCOPY --from=build \/home\/gradle\/march\/model\/model.xml conf\/Catalina\/localhost<\/code><\/pre>\n\n\n\n<p>Dockerfile\uc774 \uc788\ub294 \ub514\ub809\ud130\ub9ac\uc5d0\uc11c docker build \uba85\ub839\uc5b4\ub97c \uc218\ud589\ud558\uba74 \uc544\ub798\uc640 \uac19\uc774 Container \uc774\ubbf8\uc9c0\uac00 \uc815\uc0c1\uc801\uc73c\ub85c Build\ub418\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\ub2e4. \uc774\ub54c tag\ub294 <em>march:latest<\/em>\ub85c \uc9c0\uc815\ud588\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~\/docker\/march$ docker build -t march:latest .\n&#91;+] Building 95.9s (21\/21) FINISHED                                                                                                                                                           docker:desktop-linux\n =&gt; &#91;internal] load build definition from Dockerfile                                                                                                                                                          0.0s\n =&gt; =&gt; transferring dockerfile: 1.53kB                                                                                                                                                                        0.0s\n =&gt; &#91;internal] load metadata for docker.io\/library\/tomcat:latest                                                                                                                                              3.4s\n =&gt; &#91;internal] load metadata for docker.io\/library\/gradle:jdk18-alpine                                                                                                                                        3.7s\n =&gt; &#91;auth] library\/gradle:pull token for registry-1.docker.io                                                                                                                                                 0.0s\n =&gt; &#91;auth] library\/tomcat:pull token for registry-1.docker.io                                                                                                                                                 0.0s\n =&gt; &#91;internal] load .dockerignore                                                                                                                                                                             0.0s\n =&gt; =&gt; transferring context: 2B                                                                                                                                                                               0.0s\n =&gt; &#91;server 1\/9] FROM docker.io\/library\/tomcat:latest@sha256:935ff51abecc8dc793cb19c229ac7a988c8899e5fcba5e69ae96530fa76c4d56                                                                                 0.3s\n =&gt; =&gt; resolve docker.io\/library\/tomcat:latest@sha256:935ff51abecc8dc793cb19c229ac7a988c8899e5fcba5e69ae96530fa76c4d56                                                                                        0.0s\n\n... &lt;omitted&gt;\n \n =&gt; &#91;server 2\/9] COPY --from=build \/home\/gradle\/march\/march\/build\/libs\/*.jar lib                                                                                                                              0.0s \n =&gt; &#91;server 3\/9] COPY --from=build \/home\/gradle\/march\/march\/lib\/*.jar lib                                                                                                                                     0.0s \n =&gt; &#91;server 4\/9] COPY --from=build \/home\/gradle\/march\/setenv.sh bin                                                                                                                                           0.0s \n =&gt; &#91;server 5\/9] COPY --from=build \/home\/gradle\/march\/model\/build\/libs\/model.war webapps                                                                                                                      0.0s \n =&gt; &#91;server 6\/9] COPY --from=build \/home\/gradle\/march\/route\/build\/libs\/ROOT.war webapps                                                                                                                       0.0s \n =&gt; &#91;server 7\/9] RUN mkdir -p conf\/Catalina\/localhost                                                                                                                                                         0.2s \n =&gt; &#91;server 8\/9] COPY --from=build \/home\/gradle\/march\/route\/ROOT.xml conf\/Catalina\/localhost                                                                                                                  0.0s\n =&gt; &#91;server 9\/9] COPY --from=build \/home\/gradle\/march\/model\/model.xml conf\/Catalina\/localhost                                                                                                                 0.0s\n =&gt; exporting to image                                                                                                                                                                                        0.6s\n =&gt; =&gt; exporting layers                                                                                                                                                                                       0.3s\n =&gt; =&gt; exporting manifest sha256:e826e99b9f52f3bbbd13c3c96620265d934ff66c757e3a48f2a4fa67a2db7e8a                                                                                                             0.0s\n =&gt; =&gt; exporting config sha256:fe2b53751c3d83289ab7c89b667a4553c7b0c97b621525874c30f7e2cf6272e9                                                                                                               0.0s\n =&gt; =&gt; exporting attestation manifest sha256:97beb23724e581e04b889450e30ae54439cebdc422958832c6aa542b6300bc6d                                                                                                 0.0s\n =&gt; =&gt; exporting manifest list sha256:f0ec7957f95b0585dd3f6187446c820048302eed7729acbe518e816351b7ad07                                                                                                        0.0s\n =&gt; =&gt; naming to moby-dangling@sha256:f0ec7957f95b0585dd3f6187446c820048302eed7729acbe518e816351b7ad07                                                                                                        0.0s\n =&gt; =&gt; unpacking to moby-dangling@sha256:f0ec7957f95b0585dd3f6187446c820048302eed7729acbe518e816351b7ad07 <\/code><\/pre>\n\n\n\n<p>\uc0dd\uc131\ub41c Container \uc774\ubbf8\uc9c0\ub294 \uc544\ub798\uc640 \uac19\uc774 \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~\/docker\/march$ docker images\nREPOSITORY        TAG               IMAGE ID       CREATED       SIZE\nmarch             latest            6541378e7005   2 minutes ago   715MB\npostgis\/postgis   latest            b57926d4206c   7 days ago    885MB\ntomcat            latest            935ff51abecc   13 days ago   710MB\nmoby\/buildkit     buildx-stable-1   91b72a6d6963   4 weeks ago   299MB<\/code><\/pre>\n\n\n\n<p>\ucc38\uace0\ub85c, \ucd08\uae30 Tomcat \uc774\ubbf8\uc9c0 \ubcf4\ub2e4 \uc0c8\ub85c \uc0dd\uc131\ud55c Tomcat \uc774\ubbf8\uc9c0(march)\uac00 5MB \ub354 \ucee4\uc9c4 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4. \ub610\ud55c \uc774\ubbf8\uc9c0\uac00 \uc0dd\uc131\ub41c \uacfc\uc815\uc744 \ud655\uc778\ud558\ub824\uba74 \uc544\ub798\uc640 \uac19\uc774 history\uba85\ub839\uc744 \ud65c\uc6a9\ud558\uba74 \ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~\/docker\/march$ docker history march\nIMAGE          CREATED         CREATED BY                                      SIZE      COMMENT\n6541378e7005   8 minutes ago   COPY \/home\/gradle\/march\/model\/model.xml conf\u2026   32.8kB    buildkit.dockerfile.v0\n&lt;missing&gt;      8 minutes ago   COPY \/home\/gradle\/march\/route\/ROOT.xml conf\/\u2026   32.8kB    buildkit.dockerfile.v0\n&lt;missing&gt;      8 minutes ago   RUN \/bin\/sh -c mkdir -p conf\/Catalina\/localh\u2026   28.7kB    buildkit.dockerfile.v0\n&lt;missing&gt;      8 minutes ago   COPY \/home\/gradle\/march\/route\/build\/libs\/ROO\u2026   233kB     buildkit.dockerfile.v0\n&lt;missing&gt;      8 minutes ago   COPY \/home\/gradle\/march\/model\/build\/libs\/mod\u2026   1.24MB    buildkit.dockerfile.v0\n&lt;missing&gt;      8 minutes ago   COPY \/home\/gradle\/march\/setenv.sh bin # buil\u2026   24.6kB    buildkit.dockerfile.v0\n&lt;missing&gt;      8 minutes ago   COPY \/home\/gradle\/march\/march\/lib\/*.jar lib \u2026   1.11MB    buildkit.dockerfile.v0\n&lt;missing&gt;      8 minutes ago   COPY \/home\/gradle\/march\/march\/build\/libs\/*.j\u2026   127kB     buildkit.dockerfile.v0\n&lt;missing&gt;      13 days ago     CMD &#91;\"catalina.sh\" \"run\"]                       0B        buildkit.dockerfile.v0\n\n... &lt;omitted&gt;\n\n&lt;missing&gt;      2 months ago    \/bin\/sh -c #(nop) ADD file:bcebbf0fddcba5b86\u2026   87.6MB    \n&lt;missing&gt;      2 months ago    \/bin\/sh -c #(nop)  LABEL org.opencontainers.\u2026   0B        \n&lt;missing&gt;      2 months ago    \/bin\/sh -c #(nop)  LABEL org.opencontainers.\u2026   0B        \n&lt;missing&gt;      2 months ago    \/bin\/sh -c #(nop)  ARG LAUNCHPAD_BUILD_ARCH     0B        \n&lt;missing&gt;      2 months ago    \/bin\/sh -c #(nop)  ARG RELEASE                  0B<\/code><\/pre>\n\n\n\n<p>\uc774\ub807\uac8c \ud558\uba74 \uacbd\ub85c\ud0d0\uc0c9 \uc2dc\uac01\ud654 \uc2dc\ub098\ub9ac\uc624 \ub3d9\uc791\uc5d0 \ud544\uc694\ud55c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 WebApp\uc774 \ucd94\uac00\ub41c Tomcat \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0 \ube4c\ub4dc\uac00 \uc644\uc131\ub41c\ub2e4. Bridge Driver\ub97c \uc774\uc6a9\ud55c Network \uc0dd\uc131\uc73c\ub85c Single Host\ub0b4\uc5d0\uc11c\uc758 Container\uac04 \ud1b5\uc2e0\uc744 \uac00\ub2a5\ud558\ub3c4\ub85d \ud558\uace0 Volume\uc744 \uc0dd\uc131\ud558\uc5ec \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \uc0dd\uc131\ud55c \ub370\uc774\ud130\ub97c Container \uc678\ubd80 \uc800\uc7a5\uacf5\uac04\uc5d0 Mount\ud788\uace0 \uc800\uc7a5\ud568\uc73c\ub85c\uc368 Container\uc0ad\uc81c \ud6c4 \ub2e4\uc2dc \uc0dd\uc131\ud558\ub354\ub77c\ub3c4 \uc774\uc804\uc5d0 \ub370\uc774\ud130\ub97c \ubcf5\uad6c\ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc744 \ud655\uc778\ud574 \ubcf4\uc558\ub2e4.<\/p>\n\n\n\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c \ud55c\uac00\uc9c0 \ub367\ubd99\uc774\uba74, Container \uae30\uc220 \ud65c\uc6a9 \uc911 \ub9c8\uc8fc\ud560 \uac00\ub2a5\uc131\uc774 \ub192\uc740 \ubd80\ubd84\uc73c\ub85c \ub85c\uceec \uc2dc\uc2a4\ud15c\uc5d0 \uc788\ub294 \ud30c\uc77c\uc744 \uc0dd\uc131\ud55c Volume\uc5d0 \ubcf5\uc0ac\ud558\ub294 \uac83\uc744 \uc0dd\uac01\ud574 \ubcfc \uc218 \uc788\ub2e4. \uacbd\ub85c\ud0d0\uc0c9 \uc54c\uace0\ub9ac\uc998\uc740 \ub3c4\ub85c\ub124\ud2b8\uc6cc\ud06c \ub370\uc774\ud130\ub97c \uadf8\ub798\ud504 \ubaa8\ub378\uc744 \uba54\ubaa8\ub9ac\uc0c1\uc5d0  \ub9cc\ub4e4\uace0 \uc774\ub97c \uae30\ubc18\uc73c\ub85c \uacbd\ub85c\ud0d0\uc0c9\uc744 \ud55c\ub2e4. \ub530\ub77c\uc11c \ub3c4\ub85c\ub124\ud2b8\uc6cc\ud06c \ub370\uc774\ud130\uac00 \ud06c\uba74 \ud074\uc218\ub85d \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \ub370\uc774\ud130\ub97c \uc77d\uc5b4 \uadf8\ub798\ud504\ubaa8\ub378\uc744 \uad6c\uc131\ud558\ub370 \uc2dc\uac04\uc774 \ub9ce\uc774 \uc18c\uc694\ub41c\ub2e4. \uadf8\ub798\uc11c \ud55c \ubc88 \ub9cc\ub4e4\uc5b4\uc9c4 \uadf8\ub798\ud504 \ubaa8\ub378\uc744 \ud30c\uc77c\ub85c \uc800\uc7a5\ud55c \ub2e4\uc74c \ud30c\uc77c\uc5d0\uc11c \ubc14\ub85c \uc77d\uc5b4 \ubaa8\ub378\uc744 \ubcf5\uc6d0\ud558\uba74 \ub9e4 \ubc88 \ubaa8\ub378\uc744 \uc0c8\ub85c \uad6c\ucd95\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub418\uace0 \ub85c\ub529 \uc2dc\uac04\uc744 \ub9ce\uc774 \ub2e8\ucd95\uc2dc\ud0ac \uc218 \uc788\ub2e4. \uc774\ubbf8 \uc0dd\uc131\ud574 \ub454 \uadf8\ub798\ud504\ubaa8\ub378 \ub370\uc774\ud130\uac00 \uc788\ub2e4\uba74 \uc774\ub97c \ucee8\ud14c\uc774\ub108 \ub0b4\ubd80\uc5d0\uc11c \ud65c\uc6a9 \ud560 \uc218 \uc788\ub3c4\ub85d Volume\uc744 \ud558\ub098 \ub9cc\ub4e4\uace0 \uc774 Volume\uc5d0 \ub370\uc774\ud130\ub97c \ubcf5\uc0ac\ud558\ub294 \uacfc\uc815\uc744 \uc218\ud589\ud574 \ubcf8\ub2e4.<\/p>\n\n\n\n<p>\uba3c\uc800 \ub370\uc774\ud130 \uc800\uc7a5\uc744 \uc704\ud55c Volume \uac1d\uccb4\ub97c \uc544\ub798\uc640 \uac19\uc774 \uc0dd\uc131\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~\/docker\/march$ docker volume create mydata\nmydata<\/code><\/pre>\n\n\n\n<p>\ub2e4\uc74c\uc73c\ub85c Ubuntu Container \uc774\ubbf8\uc9c0\ub97c \ubc1b\uc740 \ub2e4\uc74c interactive mode<em>(-it)<\/em>\ub85c \uc2e4\ud589\ud55c\ub2e4. \uc774\ub54c \uc55e\uc11c \uc0dd\uc131\ud55c Volume \uac1d\uccb4<em>(mydata)<\/em>\ub97c Container\ub0b4\ubd80\uc758 <em>\/data<\/em> \ub514\ub809\ud130\ub9ac\ub85c \ub9c8\uc6b4\ud2b8 \ud55c\ub2e4.<em>(-v mydata:\/data)<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~\/docker\/march$ docker run --name ubuntu -it -v mydata:\/data ubuntu\nUnable to find image 'ubuntu:latest' locally\nlatest: Pulling from library\/ubuntu\nDigest: sha256:80dd3c3b9c6cecb9f1667e9290b3bc61b78c2678c02cbdae5f0fea92cc6734ab\nStatus: Downloaded newer image for ubuntu:latest\nroot@87532cf8447d:\/#<\/code><\/pre>\n\n\n\n<p>\uc774\uc81c Host\uc5d0\uc11c \ub2e4\ub978 \ud130\ubbf8\ub110\uc744 \ud558\ub098 \uc5f4\uc5b4 \ub85c\uceec\uc758 \ud30c\uc77c\uc744 Ubuntu Container\uc758 \/data \ub514\ub809\ud130\ub9ac\ub85c \ubcf5\uc0ac\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kanto@skanto:~\/docker\/march$ docker cp .\/graph.dat ubuntu:\/data\nSuccessfully copied 1.01GB to ubuntu:\/data<\/code><\/pre>\n\n\n\n<p><em>cp<\/em> \uba85\ub839\uc744 \ud65c\uc6a9\ud558\uba74 \ub85c\uceec\uc5d0 \uc788\ub294 \ud30c\uc77c\uc744 \uba85\uc2dc\ud55c Volume\uc73c\ub85c \ubcf5\uc0ac\ud560 \uc218 \uc788\uc73c\uba70 \uc544\ub798\uc640 \uac19\uc774 Ubuntu Container\uc758 \ucf58\uc194\uc5d0\uc11c \uc9c0\uc815\ub41c Volume\uc5d0(\/data\ub85c \ub9c8\uc6b4\ub4dc\ub428) \ud30c\uc77c\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \ubcf5\uc0ac \ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud560 \uc218 \uc788\ub2e4. \ub610\ud55c ubuntu Container\ub97c \uc0ad\uc81c\ud558\uace0 \ub2e4\uc2dc \uc778\uc2a4\ud134\uc2a4\ub97c \uc2e4\ud589\ud574\ub3c4 \ud30c\uc77c\uc774 \uacc4\uc18d \uc720\uc9c0\ub428\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>root@87532cf8447d:\/# cd \/data\nroot@87532cf8447d:\/data# ls -l\ntotal 988760\n-rw-rw-r-- 1 ubuntu ubuntu 1012482493 Aug 16 00:54 graph.dat<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Docker Compose \ub97c \ud65c\uc6a9\ud55c Multi Container Build<\/h3>\n\n\n\n<p>\uc9c0\uae08\uae4c\uc9c0\ub294 \uac01\uac01\uc758 Container\ub97c \uac1c\ubcc4\uc801\uc73c\ub85c \uc2e4\ud589\ud558\uace0 \ube4c\ub4dc\ud588\ub2e4. \uc774\uc81c \uac1c\ubcc4\uc801\uc744 \uc218\ud589\ud55c \ube4c\ub4dc\/\uc2e4\ud589 \uc791\uc5c5\uc744 \ud558\ub098\uc758 \uc2a4\ud06c\ub9bd\ud2b8 \ud30c\uc77c\ub85c \uc815\uc758\ud560 \uc218 \uc788\ub2e4. Docker Compose\ub97c \uc774\uc6a9\ud558\uba74 \uc5ec\ub7ec\uac1c\uc758 \ucee8\ud14c\uc774\ub108 \uc0dd\uc131 \ubc0f \ube4c\ub4dc \uc791\uc5c5\uc744 \ud558\ub098\uc758 \uc21c\ucc28\uc801 Task\ub85c \uc815\uc758\ud560 \uc218 \uc788\ub2e4. \uc27d\uac8c \uc0dd\uac01\ud558\uba74 Gradle \ud30c\uc77c\uc744 \uc774\uc6a9\ud558\uc5ec \uc5ec\ub7ec \uac1c\uc758 Task\ub97c \ub9cc\ub4e4\uace0 \uac01\uac01 \uc21c\ucc28\uc801\uc73c\ub85c \uc2e4\ud589\ud558\ub294 \uac1c\ub150\uacfc \ube44\uc2b7\ud558\ub2e4\uace0 \ubcf4\uba74 \ub41c\ub2e4.<\/p>\n\n\n\n<p>Compose \ud30c\uc77c\uc740 \ud06c\uac8c <strong>services, networks, volumes<\/strong> \uad6c\uc131\ub418\uba70 networks\uc640 volumes\ub294 \uc55e\uc5d0\uc11c \uc0b4\ud3b4\ubcf8 \uac83\uacfc \ub3d9\uc77c\ud55c \uac1c\ub150\uc73c\ub85c \uc0dd\uac01\ud558\uba74 \ub41c\ub2e4. \uadf8\ub9ac\uace0 services\ub294 Microservice \ub97c \uc0dd\uc131\ud558\ub294 \uac1c\ub150\uc73c\ub85c \uac1c\ubcc4 \uc11c\ube44\uc2a4 \ucee8\ud14c\uc774\ub108\ub97c \ube4c\ub4dc, \uc2e4\ud589\ud558\ub294 \uc5ed\ud560\uc744 \ud55c\ub2e4. \uac1c\ubcc4 \ucf54\ub4dc Block\uacfc \ud65c\uc6a9 \ubc29\ubc95\uc740 <a href=\"https:\/\/docs.docker.com\/compose\/gettingstarted\/\">\uad00\ub828 \uc790\ub8cc<\/a>\ub97c \ucc38\uace0\ud558\uae30 \ubc14\ub780\ub2e4.<\/p>\n\n\n\n<p>\uad73\uc774 \uc774\uc640 \uad00\ub828\ub41c \uba54\ud0c0\ud3ec\ub97c \ucc3e\ub294 \ub2e4\uba74 \uc9d1\uc744 \uc9d3\ub294 \uac83\uacfc \ube44\uc720\ud560 \uc218 \uc788\uc744 \uac83\uc774\ub2e4. \uc9d1 \uc9d3\uae30 \uc804\uc5d0 \ud130\ub97c \ub2e5\uace0 \uc778\ud504\ub77c \uc2dc\uc124\uc744 \uba3c\uc800 \uac16\ucd94\uc5b4\uc57c \ud55c\ub2e4. \uc989 \uc218\ub3c4(Volume)\uc744 \uae54\uace0 \ud1b5\uc2e0\uc120(Network)\uc744 \uba3c\uc800 \ub04c\uc5b4\uc640\uc57c \ud55c\ub2e4. \uadf8 \ub2e4\uc74c \uc9d1\uc744 \uc9d3\ub294\ub370 \uc774 \uc9d1\uc744 Container\ub85c \uc0dd\uac01\ud558\uba74 \ubb34\ub9ac\uac00 \uc5c6\uc744 \uac83\uc774\ub2e4. <\/p>\n\n\n\n<p>\uc9c0\uae08\uae4c\uc9c0 \uc124\uba85\ud55c \ub0b4\uc6a9\uc744 \ud558\ub098\uc758 Compose\ud30c\uc77c(compose.yaml)\ub85c \ub9cc\ub4e4\uba74 \uc544\ub798\uc640 \uac19\uc774 \uc815\uc758\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>networks:\n  localnet:\n    driver: bridge\nvolumes:\n  postgis-data:\n  network-data:\n  \nservices:\n  tomcat:\n    build: .\n    deploy:\n      replicas: 1\n    ports:\n      - target: 8080\n        published: 8080\n    networks:\n      - localnet\n    volumes:\n      - type: volume\n        source: network-data\n        target: \/usr\/local\/tomcat\/network-data\n  postgis:\n    image: postgis\/postgis:latest\n    deploy:\n      replicas: 1\n    ports:\n      - target: 5432\n        published: 6432\n    environment:\n      POSTGRES_USER: postgres\n      POSTGRES_PASSWORD: postgres\n    networks:\n      localnet:\n    volumes:\n      - type: volume\n        source: postgis-data\n        target: \/var\/lib\/postgresql\/data<\/code><\/pre>\n\n\n\n<p>\uc790 \uc774\ub807\uac8c \uc791\uc131\ub41c compose.yaml \ud30c\uc77c\uc744 docker compose up \uba85\ub839\uc5b4\ub85c \uc2e4\ud589\ud558\uba74 \ud55c \ubc88\uc5d0 \ubaa8\ub4e0 \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \ube4c\ub4dc\ud558\uace0 \uc2e4\ud589\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~\/docker\/march$ docker compose up &amp;\n&#91;6] 168513\n&#91;+] Running 19\/19ocker\/march$ \n \u2714 postgis Pulled                                                     28.8s \n   \u2714 3253e6899ccd Download complete                                    1.3s \n   \u2714 69fb10dc82f9 Download complete                                   10.1s \n   \u2714 76ff61fca8ac Download complete                                    1.2s \n   \u2714 e38f3c7dfafc Download complete                                    1.3s \n   \u2714 895fbad56208 Download complete                                    2.2s \n   \u2714 5a4c03fb0645 Download complete                                    1.2s \n   \u2714 fa54e3793199 Download complete                                   20.4s \n   \u2714 922ff8346899 Download complete                                    1.3s \n   \u2714 54dee37b05f4 Download complete                                    1.3s \n   \u2714 2c3d13839904 Download complete                                    1.3s \n   \u2714 4f4fb700ef54 Download complete                                    1.2s \n   \u2714 150ea94b3a83 Download complete                                    1.2s \n   \u2714 20349e765a80 Download complete                                    4.1s \n   \u2714 c001797204e2 Download complete                                    1.3s \n   \u2714 24d10937fb39 Download complete                                    2.2s \n   \u2714 d09aa25aff9b Download complete                                    1.2s \n   \u2714 a90f29aea359 Download complete                                   21.8s \n   \u2714 658061ad5816 Download complete                                    1.3s \n&#91;+] Building 8.5s (23\/23) FINISHED               docker-container:container\n =&gt; &#91;tomcat internal] load build definition from Dockerfile            0.0s\n =&gt; =&gt; transferring dockerfile: 1.53kB                                 0.0s\n =&gt; &#91;tomcat internal] load metadata for docker.io\/library\/tomcat:late  2.1s\n =&gt; &#91;tomcat internal] load metadata for docker.io\/library\/gradle:jdk1  2.2s\n =&gt; &#91;tomcat auth] library\/tomcat:pull token for registry-1.docker.io   0.0s\n =&gt; &#91;tomcat auth] library\/gradle:pull token for registry-1.docker.io   0.0s\n =&gt; &#91;tomcat internal] load .dockerignore                               0.0s\n =&gt; =&gt; transferring context: 2B                                        0.0s\n =&gt; &#91;tomcat server 1\/9] FROM docker.io\/library\/tomcat:latest@sha256:9  0.0s\n =&gt; =&gt; resolve docker.io\/library\/tomcat:latest@sha256:935ff51abecc8dc  0.0s\n =&gt; &#91;tomcat build 1\/5] FROM docker.io\/library\/gradle:jdk18-alpine@sha  0.0s\n =&gt; =&gt; resolve docker.io\/library\/gradle:jdk18-alpine@sha256:4d3a06b38  0.0s\n =&gt; &#91;tomcat build 2\/5] RUN apk add --update git                        0.0s\n =&gt; &#91;tomcat build 3\/5] RUN git clone https:\/\/10132999:PASSWORD@gitl  110.1s\n =&gt; &#91;tomcat build 4\/5] WORKDIR \/home\/gradle\/march                      0.0s\n =&gt; &#91;tomcat build 5\/5] RUN gradle war                                 10.0s\n =&gt; &#91;tomcat server 2\/9] COPY --from=build \/home\/gradle\/march\/march\/bu  0.0s\n =&gt; &#91;tomcat server 3\/9] COPY --from=build \/home\/gradle\/march\/march\/li  0.0s\n =&gt; &#91;tomcat server 4\/9] COPY --from=build \/home\/gradle\/march\/seten.sh  0.0s\n =&gt; &#91;tomcat server 5\/9] COPY --from=build \/home\/gradle\/march\/model\/bu  0.0s\n =&gt; &#91;tomcat server 6\/9] COPY --from=build \/home\/gradle\/march\/route\/bu  0.0s\n =&gt; &#91;tomcat server 7\/9] RUN mkdir -p conf\/Catalina\/localhost           0.1s\n =&gt; &#91;tomcat server 8\/9] COPY --from=build \/home\/gradle\/march\/route\/RO  0.0s\n =&gt; &#91;tomcat server 9\/9] COPY --from=build \/home\/gradle\/march\/model\/mo  0.0s\n =&gt; &#91;tomcat] exporting to oci image format                             6.2s\n =&gt; =&gt; exporting layers                                                0.0s\n =&gt; =&gt; exporting manifest sha256:fa33cca566f87d14995d5e6521121f67ee0a  0.0s\n =&gt; =&gt; exporting config sha256:6273f4ebe6db3e0cea22d10997dbbcb1c2f5f6  0.0s\n =&gt; =&gt; sending tarball                                                 6.2s\n =&gt; &#91;tomcat] importing to docker                                       0.0s\n =&gt; &#91;tomcat] resolving provenance for metadata file                    0.0s\n&#91;+] Running 3\/3\n \u2714 Network march_localnet     Created                                  0.0s \n \u2714 Container march-tomcat-1   Created                                  1.1s \n \u2714 Container march-postgis-1  Created                                  1.1s<\/code><\/pre>\n\n\n\n<p>\uc774\uc81c \ub2e4\uc74c\uc758 \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud558\uc5ec network, volume\uacfc container\ub4e4\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc0dd\uc131\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud574 \ubcf4\uc790.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~\/docker\/march$ docker images\nREPOSITORY        TAG               IMAGE ID       CREATED             SIZE\nmarch-tomcat      latest            73b290831ea0   About an hour ago   715MB\npostgis\/postgis   latest            361a43880e74   13 hours ago        885MB\nmoby\/buildkit     buildx-stable-1   91b72a6d6963   4 weeks ago         299MB\nskanto@skanto:~\/docker\/march$ docker network ls\nNETWORK ID     NAME             DRIVER    SCOPE\n7bdaed379afc   bridge           bridge    local\n61aafbfc8573   host             host      local\n4aa14067a7b4   march_localnet   bridge    local\ne173d1a8fcbb   none             null      local\nskanto@skanto:~\/docker\/march$ docker volume ls\nDRIVER    VOLUME NAME\nlocal     buildx_buildkit_container0_state\nlocal     march_network-data\nlocal     march_postgis-data\nskanto@skanto:~\/docker\/march$ docker ps -a\nCONTAINER ID   IMAGE                           COMMAND                  CREATED              STATUS      PORTS     NAMES\nf8ab6bd06476   postgis\/postgis:latest          \"docker-entrypoint.s\u2026\"   About a minute ago   Created               march-postgis-1\naaa8f08905e9   march-tomcat                    \"catalina.sh run\"        About a minute ago   Created               march-tomcat-1\n1963f757e8fc   moby\/buildkit:buildx-stable-1   \"buildkitd --allow-i\u2026\"   3 weeks ago          Up 4 days             buildx_buildkit_container0<\/code><\/pre>\n\n\n\n<p>\ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc0dd\uc131\ub41c \uac01\uac01\uc758 container\ub97c \uc544\ub798\uc640 \uac19\uc774 \uc2e4\ud589\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~\/docker\/march$ docker restart march-postgis-1 \nmarch-postgis-1\nskanto@skanto:~\/docker\/march$ docker restart march-tomcat-1 \nmarch-tomcat-1<\/code><\/pre>\n\n\n\n<p>WebApp \ub85c\ub529\uc774 \uc644\ub8cc\ub420 \ub54c\uae4c\uc9c0 \uc2dc\uac04\uc774 \uac78\ub9b4 \uc218 \uc788\uc73c\ub2c8 \uc9c4\ud589\ub418\ub294 \uc0c1\ud0dc\ub97c \ub85c\uadf8\ub85c \ud655\uc778\ud574 \ubcf4\uace0 \uc2f6\ub2e4\uba74 \uc544\ub798\uc640 \uac19\uc774 <em>docker log<\/em> \uba85\ub839\uc5b4\ub97c \uc774\uc6a9\ud558\uc5ec \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>skanto@skanto:~\/docker\/march$ docker logs -f march-tomcat-1 \n25-Dec-2024 02:16:10.019 INFO &#91;main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat\/11.0.2\n... &lt;omitted&gt;\n... &lt;omitted&gt;\nNow loading nodes .... done: 3,017,915\nNow loading links ....... done: 6,434,167\nNow loading connections ............ done: 11,304,641\nGraph loading DONE... elpased: 00:00:43\nCalculates transient time of every links...\nGraph is bound to ServletContext(\/model): march.model.graph\n\nNow loads RTree from the loaded Graph model...\nRTree loading DONE!\nRTree is bound to ServletContext(\/model): march.model.rtree\n\nNetwork link information is loading...\n\tLinks loaded: 1,000,000\n\tLinks loaded: 2,000,000\n\tLinks loaded: 3,000,000\nLink loading DONE: 3,698,757\nLinks are bound to ServletContext(\/model): march.model.links\n... &lt;omitted&gt;\n... &lt;omitted&gt;\n25-Dec-2024 02:17:18.377 INFO &#91;main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler &#91;\"http-nio-8080\"]\n25-Dec-2024 02:17:18.385 INFO &#91;main] org.apache.catalina.startup.Catalina.start Server startup in &#91;68113] milliseconds<\/code><\/pre>\n\n\n\n<p>\ub85c\ub529\uc774 \uc644\ub8cc\ub418\uc5c8\ub2e4\uba74 \uc6f9\ube0c\ub77c\uc6b0\uc800\ub97c \uc5f4\uace0 http:\/\/localhost:8080\ub85c \uc811\uc18d\ud55c\ub2e4.  \uc55e\uc5d0\uc11c Tomcat Container\ub9cc \uc2e4\ud589\ud588\uc744 \ub54c 404\uc624\ub958\uac00 \ucd9c\ub825\ub410\uc9c0\ub9cc \uc774\uc81c\ub294 \uc544\ub798\uc758 \ud654\uba74\uacfc \uac19\uc774 \uacbd\ub85c\ud0d0\uc0c9 \uacb0\uacfc\ub97c \uc2dc\uac01\ud654\ud558\ub294 WebApp\uc774 \uc2e4\ud589\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"714\" src=\"https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/image-2-1024x714.png\" alt=\"\" class=\"wp-image-1855\" srcset=\"https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/image-2-1024x714.png 1024w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/image-2-300x209.png 300w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/image-2-768x536.png 768w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/image-2-387x270.png 387w, https:\/\/skanto.co.kr\/wp-content\/uploads\/2024\/12\/image-2.png 1032w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\ub9c8\uce58\uba70&#8230;<\/h3>\n\n\n\n<p>\uc6f9 \uac1c\ubc1c\uc758 \uac00\uc7a5 \ud754\ud55c Web-WAS-DB \uad6c\uc870\uc5d0\uc11c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640  WebApp\uc744 \uc2e4\ud589\ud558\ub294 WAS\ub97c \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub85c \ube4c\ub4dc\ud558\uace0 \uc2e4\ud589\ud574 \ubcf4\uc558\ub2e4. \uadf8 \uacfc\uc815\uc5d0\uc11c \uc778\ud504\ub77c \uc131\uaca9\uc5d0 \ud574\ub2f9\ud558\ub294 Network\uacfc Volume\uc744 \ud65c\uc6a9\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c\ub3c4 \uc0b4\ud3b4\ubcf4\uc558\ub2e4. \ucee8\ud14c\uc774\ub108\uc758 \uc7a5\uc810\uc73c\ub85c \uaf3d\uc790\uba74 Microservice\ub97c \uc27d\uac8c \uad6c\ucd95\ud560 \uc218 \uc788\uace0 \ud5a5\ud6c4 \uc720\uc9c0\ubcf4\uc218, \ud14c\uc2a4\ud2b8, \ubc30\ud3ec\uac00 \uc6a9\uc774\ud558\ub2e4\ub294 \uac83\uc774\ub2e4. \ub098\uc544\uac00 Cloud \ud658\uacbd\uc744 \uc900\ube44\ud558\ub294 \uacbd\uc6b0\ub77c\uba74 \ucee8\ud14c\uc774\ub108 \uae30\uc220\uc740 \ud544\uc218 \uc694\uc18c\uae30\uc220\uc774\ub77c \ud560 \uc218 \uc788\uc744 \uac83\uc774\ub2e4.<\/p>\n\n\n\n<p>\uc774 \uae00\uc5d0\uc11c \uc0b4\ud3b4\ubd24\ub4ef\uc774 GitHub, Gitlab\uacfc \uac19\uc740 Source Repository\uc5d0\uc11c Stable\ud55c \uc18c\uc2a4\ub97c \uc2e4\uc2dc\uac04\uc73c\ub85c \uac00\uc838\uc640 Binary \ub85c \ube4c\ub4dc\ud558\uace0 \ucd5c\uc885 \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub85c \uc81c\uc791\ud558\uc600\ub2e4. \uc774\ub807\uac8c \uc81c\uc791\ud55c \ucee8\ud14c\uc774\ub108\ub294 \ud558\ub098\uc758 Microservice\ub85c \uac04\ud3b8\ud558\uac8c \uc2e4\ud589\ud560 \uc218 \uc788\ub2e4\ub294 \uac83\ub3c4 \ud655\uc778\ud558\uc600\ub2e4. \uc880 \ub354 \ub098\uc544\uac00 \ube4c\ub4dc\ud55c \ucee8\ud14c\uc774\ub108\ub97c Registry\ub85c \ub4f1\ub85d\ud558\uba74 CI \ubfd0\ub9cc \uc544\ub2c8\ub77c CD(Continuous Deploy)\uae4c\uc9c0\ub3c4 \uc6d0\ud65c\ud558\uac8c \ucc98\ub9ac\ud560 \uc218 \uc788\uc744 \uac83\uc774\ub2e4.<\/p>\n\n\n\n<p>\uc9c0\uae08\uae4c\uc9c0 \ud074\ub77c\uc6b0\ub4dc \ud658\uacbd\uc5d0\uc11c \uac00\uc7a5 \ud575\uc2ec\uc774 \ub418\ub294 Container \uae30\uc220\uc758 \ud65c\uc6a9\ubc29\ubc95\uc744 \uc2dc\ub098\ub9ac\uc624\ub97c \uae30\ubc18\uc73c\ub85c \uc0b4\ud3b4 \ubcf4\uc558\ub2e4. \ub192\uc740 \uad00\uc810\uc5d0\uc11c \ucee8\ud14c\uc774\ub108 \uae30\uc220\uc744 \ud65c\uc6a9, \uc774\ud574\ud558\ub294\ub370 \ub3c4\uc6c0\uc774 \ub418\uc5c8\ub2e4\uba74 \uc774\ub7f0 \uac1c\ub150\uc744 \uba38\ub9ac\uc5d0 \ub123\uace0 \ucd94\uac00\uc801\uc778 \uc138\ubd80\uae30\uc220\uc744 \uc811\ud574 \ub098\uac00\uba74 \uae38\uc744 \ud5e4\uba54\uc9c0 \uc54a\uace0 \uc6d0\ud558\ub294 \ubaa9\ud45c\uc5d0 \ub3c4\ub2ec\ud560 \uac83\uc73c\ub85c \uae30\ub300\ud55c\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ucd5c\uadfc \ub4e4\uc5b4 Docker Container\uc5d0 \ub300\ud574 \uae4a\uc740 \uc774\ud574\uac00 \ud544\uc694\ud558\uc5ec \uc774 \ucc38\uc5d0 \uc5b4\ub834\ud48b\uc774 \uc54c\uace0 \uc788\ub358 Container\uc5d0 \ub300\ud574 \uc81c\ub300\ub85c \ud568 \uc54c\uc544\ubcf4\uc790\ub294 \uc694\ub7c9\uc73c\ub85c \uad00\ub828 \uc11c\uc801\uc744 \ub4a4\uc9c0\ub2e4\uac00 \uac00\uc7a5 \ucd5c\uadfc\uc758 \ucc45\uc774\ub77c\uace0 \uc5ec\uaca8\uc9c0\ub294 &#8220;Docker Deep Dive 2024 edition&#8221; \uc744 \uace8\ub77c \uc2b5\ub3c5\uc744 \ud588\ub2e4. \ub300\ub7b5 Docker Container\uc5d0 \ub300\ud55c \ub0b4\uc6a9\uc740 \uc775\ud788 \uc54c\uace0 \uc788\ub358\ud130\ub77c \uac1c\ub150\uc801 \uc774\ud574\ub294 \uc27d\uac8c \uc9c0\ub098\uac14\uc9c0\ub9cc \uc2e4\uc81c \uc774 \uae30\uc220\uc744 \uc774\uc6a9\ud558\uace0 \uc2f6\uc744 \ub54c \ub9c9\ud788\uc9c0 \uc54a\uc744 \uc815\ub3c4\ub85c \ubab8\uc5d0 \uc775\ud600\ubcf4\uc790\ub294 \uc0dd\uac01\uc73c\ub85c \ucc45\uc5d0 \ub098\uc628 \uc0d8\ud50c \ucf54\ub4dc\ub97c \uc774\ub9ac \uc800\ub9ac \ub0b4\uac00 \ud65c\uc6a9\ud574 \ubcf4\uace0 \uc2f6\uc740 \uc2dc\ub098\ub9ac\uc624\ub85c \ubcc0\ud615\ud558\uace0 \uc801\uc6a9\ud558\ub2e4 \ubcf4\ub2c8 \uacc4\ud68d\ud588\ub358 2\uc8fc \ubcf4\ub2e4 \uc2dc\uac04\uc774 \uc880 \ub354 \uac78\ub838\ub2e4&#8230;.<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/skanto.co.kr\/?p=1808\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[14,7],"tags":[176,170],"class_list":["post-1808","post","type-post","status-publish","format-standard","hentry","category-sw-development","category-7","tag-container","tag-docker"],"_links":{"self":[{"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1808"}],"version-history":[{"count":57,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1808\/revisions"}],"predecessor-version":[{"id":1880,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1808\/revisions\/1880"}],"wp:attachment":[{"href":"https:\/\/skanto.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1808"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1808"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/skanto.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}