Explanation

Docker ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘ํ•  ๋•Œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์Šคํฌ๋ฆฝํŠธ๋‚˜ ํŒŒ์ผ์„ ์ด๋ฏธ์ง€ ์„ค์ •์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ณดํ†ต ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ธฐ๋ณธ ์„ค์ •์„ ๊ฐ€์ ธ์˜ค์ง€๋งŒ, ํ•„์š”ํ•˜๋‹ค๋ฉด ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ์šฉ์€ ์ปจํ…Œ์ด๋„ˆ์˜ ํ”„๋กœ๊ทธ๋žจ์ด ์ •ํ™•ํžˆ ๋‹น์‹ ์ด ์›ํ•˜๋Š” ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ธฐ๋ณธ ํฌํŠธ์—์„œ ๋ฆฌ์Šค๋‹ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ๊ณ  ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ์Šคํ„ด์Šค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹น์‹ ์€ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ์™€ ์ด๋ฏธ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ๊ฐ€ ์ถฉ๋Œํ•˜์ง€ ์•Š๋„๋ก ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ ์„ค์ •์„ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋” ํ”„๋กœ๊ทธ๋žจ์ด ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ๋” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•„์š”๋กœ ํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ๊ทธ๋žจ์ด ์ ์ ˆํžˆ ์ž‘๋™ํ•˜๋„๋ก ํŠน์ •ํ•œ ์„ค์ •์„ ์ฃผ๊ธฐ ์œ„ํ•ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹น์‹ ์€ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋Š˜๋ฆฌ๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker run ๋ช…๋ น์–ด๋Š” ๊ธฐ๋ณธ ์„ค์ •๊ฐ’์„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋ช…๋ น์–ด๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๋ช…๋ น์–ด๋Š” ์ปจํ…Œ์ธ๋„ˆ์˜ ํ–‰๋™์„ ์ปค์Šคํ…€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ด๊ฒƒ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Overriding the network ports

๊ฐ€๋” ๋‹น์‹ ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐœ๋ฐœ ๋ชฉ์ ๊ณผ ํ…Œ์ŠคํŒ… ๋ชฉ์ ์„ ์œ„ํ•ด ๋ถ„๋ฆฌํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ํฌํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์ถฉ๋Œ์„ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. docker run ๋ช…๋ น์–ด์—์„œ -p ใ…‡์˜ต์…˜์„ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ๋ฅผ ํ˜ธ์ŠคํŠธ ํฌํŠธ๋กœ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๊ฒƒ์€ ์–ด๋– ํ•œ ์ถฉ๋Œ ์—†์ด ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

$ docker run -d -p HOST_PORT:CONTAINER_POER postgres

Setting environment variabels

์ด ์˜ต์…˜์€ ํ™˜๊ฒฝ๋ณ€์ˆ˜ foo๋ฅผ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜ bar์˜ ๊ฐ’์œผ๋กœ ์„ธํŒ…ํ•ฉ๋‹ˆ๋‹ค.

$ docker run -e foo=bar postgres env

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถœ๋ ฅ์ด ๋‚˜์˜ต๋‹ˆ๋‹ค:

HOSTNAME=2042fe6ebe4
foo=bar

Tip

.env ํŒŒ์ผ์€ ์ˆ˜๋งŽ์€ -e ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ ๋ณต์žกํ•œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ผ ์—†์ด ์ปจํ…Œ์ด๋„ˆ์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋Š” ์œ ์šฉํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. .env ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด, docker run ใ…๋ช…๋ น์–ด์— --env-file ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ docker run --env-file .env postgres env

Restricting the container to consume the resources

--memory ํ”Œ๋ž˜๊ทธ์™€ --cpus ํ”Œ๋ž˜๊ทธ๋ฅผ docker run ๋ช…๋ น์–ด์— ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” CPU์™€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์—์„œ ๊ณผ๋„ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋น„ํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด Python API ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ทธ ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค:

$ docker run -e POSTGRES_PASSWORD=secret --memory="512m" --cpus="0.5" postgres

์ด ๋ช…๋ น์–ด๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ 512MB์˜ ๋ฉ”๋ชจ๋ฆฌ์™€ CPU์˜ ์ ˆ๋ฐ˜์˜ ์ฝ”์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

Monitor

docker stats ๋ช…๋ น์–ด๋กœ ์ปจํ…Œ์ด๋„ˆ์˜ ์‹ค์‹œ๊ฐ„ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ—ˆ์šฉ๋œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ ์ ˆํ•œ์ง€ ๋˜๋Š” ์ˆ˜์ •์ด ํ•„์š”ํ•œ์ง€ ์ดํ•ดํ•˜๋Š”๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

docker run ๋ช…๋ น์–ด์— ์ ์ ˆํ•œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์„œ, ๋‹น์‹ ์€ ์ปจํ…Œ์ด๋„ˆํ™” ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋™์ž‘์„ ํŠน์ •ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Try it out

์ด๋ฒˆ ํ•ธ์ฆˆ์˜จ ๊ฐ€์ด๋“œ์—์„œ, ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ณธ๊ฐ’์„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•˜๊ธฐ ์œ„ํ•ด docker run ๋ช…๋ น์–ด๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. Docker Desktop์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

Run multiple instances of the Postgres database

  1. ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ Postgres ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜์„ธ์š”:
$ docker run -d -e POSTGRES_PASSWORD=secret -p 5432:5432 postgres

์ด๊ฒƒ์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ Postgres ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‹คํ–‰ ํ•  ๊ฒƒ์ด๊ณ , ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ 5432์™€ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์˜ ํฌํŠธ 5432๋ฅผ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋‹ค๋ฅธ ํฌํŠธ๋กœ ๋งคํ•‘๋œ ๋‘ ๋ฒˆ์งธ Postgres ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
$ docker run -d -e POSTGRES_PASSWORD=secret -p 5433:5432 postgres

์ด๊ฒƒ์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋‹ค๋ฅธ Postgres ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•  ๊ฒƒ์ด๊ณ , ์ปจํ…Œ์ด๋„ˆ์˜ ๊ธฐ๋ณธ postgres ํฌํŠธ์ธ 5432๋ฒˆ ํฌํŠธ์—์„œ ์‹คํ–‰๋˜์ง€๋งŒ, ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์˜ 5433๋ฒˆ ํฌํŠธ์™€ ๋งคํ•‘๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ด๋ฏธ ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์™€ ์ถฉ๋Œ์„ ์ผ์œผํ‚ค์ง€ ์•Š๋„๋ก ํ˜ธ์ŠคํŠธ ํฌํŠธ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. Docker Desktop Dashboard์˜ Containers์—์„œ ๋‘ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰์ค‘์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. A screenshot of the Docker Desktop Dashboard showing the running instances of Postgres containers

์•„์ง ์ž‘์„ฑ์ค‘์ธ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.