Explanation
์ด ๊ฐ์ด๋๋ฅผ ์ฌ๊ธฐ๊น์ง ๋ฐ๋ผ์์ผ๋ฉด, ์ปจํ ์ด๋๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ ์ปดํฌ๋ํธ๋ฅผ ์ํ ๊ณ ๋ฆฝ๋ ํ๋ก์ธ์ค๋ฅผ ์ ๊ณตํ๋จ๋ ๊ฒ์ ์ดํด ํ ๊ฒ์ ๋๋ค. React ํ๋ก ํธ์๋, Python API, Postgres ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ์ ์ปดํฌ๋ํธ๋ค์ ๊ฐ์์ ์๋๋ฐ์ค ํ๊ฒฝ์์ ์คํ๋๊ณ , ํธ์คํธ ๋จธ์ ์์ ์์ ํ ๊ณ ๋ฆฝ๋ฉ๋๋ค. ์ด ๊ณ ๋ฆฝ์ ๋ณด์๊ณผ ์์กด์ฑ ๊ด๋ฆฌ์ ๋ฐ์ด๋์ง๋ง, ์ด๊ฒ์ ๋น์ ์ด ์ง์ ์ ์ผ๋ก ์ ๊ทผํ ์ ์์ ๋ํ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋น์ ์ ๋ธ๋ผ์ฐ์ ์ ์น ์ฑ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ํฌํธ ๊ฐ๋ฐฉ์ด ์กด์ฌํ๋ ์ด์ ์ ๋๋ค.
Publishing ports
ํฌํธ๋ฅผ ๊ฐ๋ฐฉํ๋ ๊ท์น์ ์ ์ํ๋ ๊ฒ์ผ๋ก ๋คํธ์ํน ๊ณ ๋ฆฝ์ ๋ซ๊ณ ๋ค์ด๊ฐ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋น์ ์ ํธ์คํธ์ 8080 ํฌํธ์์ ์์ฒญ์ด ์ปจํ
์ด๋์ 80 ํฌํธ์ ํฌ์๋ฉ ๋์ด์ผ ํ๋ค๋ ๊ฒ์ ์ค์ ํ ์ ์์ต๋๋ค. docker run ๋ช
๋ น์ด์ -p ๋๋ --publish ํ๋๊ทธ๋ฅผ ์ถ๊ฐํจ์ผ๋ก์ ํฌํธ๋ฅผ ์ด ์ ์์ต๋๋ค. ๋ฌธ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
$ docker run -d -p HOST_PORT:CONTAINER_PORT nginx
HOST_PORT: ํธ์คํธ ๋จธ์ ์์ ํธ๋ํฝ์ ๋ฐ๊ณ ์ถ์ ํฌํธ ๋๋ฒCONTAINER_PORT: ์ฐ๊ฒฐ์ ์ํด ๋ฆฌ์ค๋ ์ค์ธ ์ปจํ ์ด๋์ ํฌํธ ๋ฒํธ
์๋ฅผ ๋ค์ด, ์ปจํ
์ด๋์ 80๋ฒ ํฌํธ๋ฅผ ํธ์คํธ์ 8080๋ฒ ํฌํธ์ ์ฐ๊ฒฐํ๊ณ ์ถ๋ค๋ฉด:
$ docker run -d -p 8080:80 nginx
์ด์ , ํธ์คํธ ๋จธ์ ์ 8080๋ฒ ํฌํธ๋ก ๋ค์ด์ค๋ ๋ชจ๋ ํธ๋ํฝ์ ์ปจํ
์ด๋์ 80๋ฒ ํฌํธ๋ก ํฌ์๋ฉ ๋ ๊ฒ์
๋๋ค.
Important
ํฌํธ๊ฐ ๊ฐ๋ฐฉ๋์์ ๋, ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์๊ฒ ๊ฐ๋ฐฉ๋ฉ๋๋ค. ์ด๊ฒ์ ๊ธฐ๊ธฐ์ ์ ๊ทผํ๋ ๋ชจ๋ ํธ๋ํฝ์ด ๋ฐฐํฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ ์ฃผ์ํ์ธ์. ๋ฐฐํฌ๋ ํฌํธ์ ๋ํด ์ฌ๊ธฐ์ ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ป์ผ์ธ์
Publishing to ephemeral ports
๋๋๋ก, ์ด๋ค ํธ์คํธ ํฌํธ๊ฐ ์ฌ์ฉ๋๋์ง ์ ๊ฒฝ์ฐ์ง ์๊ณ ๊ฐ๋จํ ํฌํธ๋ฅผ ๊ฐ๋ฐฉํ๊ณ ์ถ์ ์ ์์ต๋๋ค. ์ด๋ด ๊ฒฝ์ฐ, Docker๊ฐ ํฌํธ๋ฅผ ๊ฒฐ์ ํ๊ฒ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด, ๊ฐ๋จํ HOST_PORT ์ค์ ์ ์๋ตํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์๋ ๋ช
๋ น์ด๋ ํธ์คํธ์ ์ผ์์ ์ธ ํฌํธ๋ก ์ปจํ
์ด๋์ 80๋ฒ ํฌํธ๋ฅผ ๊ฐ๋ฐฉํ ๊ฒ์
๋๋ค:
$ docker run -p 80 nginx
์ผ๋จ ์ปจํ
์ด๋๊ฐ ์คํ๋๋ฉด, docker ps ๋ช
๋ น์ด๋ก ์ด๋ค ํฌํธ๊ฐ ์ ํ๋์๋์ง ๋ณผ ์ ์์ต๋๋ค:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a527355c9c53 nginx "/docker-entrypoint.โฆ" 4 seconds ago Up 3 seconds 0.0.0.0:54772->80/tcp romantic_williamson
์ด ์์์์, ์ฑ์ ํธ์คํธ์ 54772๋ฒ ํฌํธ์ ๋
ธ์ถ๋์์ต๋๋ค.
Publishing all ports
์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ๋, EXPOSE ๋ช
๋ น์ด๋ ํจํค์ง ๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ํน์ ํ ํฌํธ์์ ์ฌ์ฉ๋ ๊ฒ์ ๋ํ๋
๋๋ค. ์ด ํฌํธ๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐฐํฌ๋์ง ์์ต๋๋ค.
-P ๋๋ --publissh-all ํ๋๊ทธ์ ํจ๊ป, ๋
ธ์ถ๋ ๋ชจ๋ ํฌํธ๋ฅผ ์ผ์์ ์ธ ํฌํธ๋ก ์๋์ผ๋ก ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๊ฐ๋ฐ ๋๋ ํ
์คํ
ํ๊ฒฝ์์ ํฌํธ ์ถฉ๋์ ์๋ฐฉํ๊ธฐ์ ๊ฝค ์ ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์๋ ๋ช ๋ น์ด๋ ์ด๋ฏธ์ง์ ์ํด ์ค์ ๋ ๋ชจ๋ ๋ ธ์ถ๋ ํฌํธ๋ฅผ ๋ฐฐํฌํ ๊ฒ์ ๋๋ค:
$ docker run -P nginx
Try it out
์ด๋ฒ ํธ์ฆ์จ ๊ฐ์ด๋์์, ๋น์ ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๊ธฐ ์ํด CLI์ Docker Compose๋ฅผ ์ฌ์ฉํด ์ปจํ ์ด๋ ํฌํธ๋ฅผ ๋ฐฐํฌํ๋ ๋ฒ์ ๋ฐฐ์ธ ๊ฒ์ ๋๋ค.
Use the Docker CLI
์ด๋ฒ ๋จ๊ณ์์, ๋น์ ์ ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ Docker CLI๋ฅผ ์ฌ์ฉํด ์ปจํ ์ด๋์ ํฌํธ๋ฅผ ๋ฐฐํฌํ ๊ฒ์ ๋๋ค.
- Docker Desktop์ ๋ค์ด๋ก๋ํ๊ณ ์ค์นํ์ธ์.
- ํฐ๋ฏธ๋์์, ์๋ก์ด ์ปจํ ์ด๋๋ฅผ ์คํํ๊ธฐ ์ํด ๋ค์์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ธ์:
$ docker run -d -p 8080:80 docker/welcome-to-docker
์ฒ์ ๋์ค๋ 8080์ ํธ์คํธ์ ํฌํธ์
๋๋ค. ์ด๊ฒ์ ์ปจํ
์ด๋ ๋ด๋ถ์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ผ๋ก์ ์ ๊ทผ์ ์ฌ์ฉ๋ ๋น์ ์ ๋ก์ปฌ ๋จธ์ ์ ํฌํธ์
๋๋ค. ๋๋ฒ์งธ 80์ ์ปจํ
์ด๋์ ํฌํธ์
๋๋ค. ์ด๊ฒ์ ์ปจํ
์ด๋ ๋ด๋ถ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ธ๋ถ์์ ๋ค์ด์ค๋ ์ฐ๊ฒฐ์ ๋ฃ๋ ํฌํธ์
๋๋ค. ๋ฐ๋ผ์, ์ด ๋ช
๋ น์ด๋ ํธ์คํธ์ 8080 ํฌํธ์ ์ปจํ
์ด๋์ 80๋ฒ ํฌํธ๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.
- Docker Desktop DashboardDML Containers ํญ์ผ๋ก ๋ค์ด๊ฐ ๋ฐฐํฌ๋ ํฌํธ๋ฅผ ํ์ธํฉ๋๋ค.

- ์ปจํ ์ด๋์ Port(s) ์ปฌ๋ผ์ ๋งํฌ๋ฅผ ํด๋ฆญํ๊ฑฐ๋ ๋ธ๋ผ์ฐ์ ์ http://localhost:8080 ์ผ๋ก ์ ์ํด์ ์น ์ฌ์ดํธ๋ฅผ ์ด์ด๋ด ๋๋ค.

Use Docker Compose
์ด ์์๋ Docker Compose๋ก ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ ํ ๊ฒ์ ๋๋ค:
- ์๋ก์ด ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ๊ณ , ๊ทธ ๋๋ ํ ๋ฆฌ์์
compose.yamlํ์ผ์ ์์ฑํด ๋ค์ ๋ด์ฉ์ ์์ฑํฉ๋๋ค:
services:
app:
image: docker/welcome-to-docker
ports:
- 8080:80
ports ์ค์ ์ ํฌํธ ์ ์๋ฅผ ์ํด ์กฐ๊ธ ๋ค๋ฅธ ํํ์ ๋ฌธ๋ฒ์ ๊ฐ์ง๋๋ค. ์ด ๊ฒฝ์ฐ, docker run ๋ช
๋ น์ด์์ ์ฌ์ฉํ HOST_PORT:CONTAINER_PORT์ ๊ฐ์ต๋๋ค.
- ํฐ๋ฏธ๋์ ์ด๊ณ ์ ๋จ๊ณ์์ ์์ฑํ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.
docker compose up๋ช ๋ น์ด๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํฉ๋๋ค.- ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ http://localhost:8080 ์ ๋ฐฉ๋ฌธํฉ๋๋ค.
Additional resources
์ด ์ฃผ์ ์ ๋ํด ๋ ์๊ณ ์ถ๋ค๋ฉด, ๋ค์ ์๋ฃ๋ฅผ ํ์ธํด๋ณด์ธ์:
Next steps
์ด์ ๋น์ ์ ์ด๋ป๊ฒ ํฌํธ๋ฅผ ๋ฐฐํฌํ๊ณ ๋
ธ์ถ์ํค๋์ง ์ดํดํ์ผ๋, ๋น์ ์ docker run ๋ช
๋ น์ด๋ก ์ปจํ
์ด๋ ๊ธฐ๋ณธ ์ฌํญ์ ์ค๋ฒ๋ผ์ด๋ฉ ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ์ค๋น๊ฐ ๋์์ต๋๋ค.