๐พ Docker ์คํ ๋ฆฌ์ง ์ฌ์ฉ๋ฒ ์ ๋ฆฌ
๐พ ๋์ปค ์คํ ๋ฆฌ์ง
PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปจํ ์ด๋ ์คํ ๋ฐ ๋ฐ์ดํฐ ์์์ฑ ํ ์คํธ:
# PostgreSQL ์ด๋ฏธ์ง ๋ค์ด๋ก๋
docker image pull postgres
# PostgreSQL ์ปจํ
์ด๋ ์คํ
docker container run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
# ์ปจํ
์ด๋์ ์ ์
docker container exec -it {CONTAINER ID} /bin/bash
# PostgreSQL์ ์ ์
$ psql -U postgres
# ์ฌ์ฉ์ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
postgres=# CREATE USER user01 PASSWORD '1234' SUPERUSER;
postgres=# CREATE DATABASE test01 OWNER user01;
postgres=# \c test01 user01
# ํ
์ด๋ธ ์์ฑ
test01=# CREATE TABLE table01(
id INTEGER PRIMARY KEY,
name VARCHAR(20)
);
test01=# \dt
List of relations
Schema | Name | Type | Owner
--------+---------+-------+--------
public | table01 | table | user01
# ๋ฐ์ดํฐ ์ฝ์
test01=# INSERT INTO table01 (id, name)
VALUES(1, 'sajacaros');
test01=# \q
$ exit
# ์ปจํ
์ด๋ ์ฌ์์ ํ ๋ฐ์ดํฐ ํ์ธ
docker container stop {CONTAINER ID}
docker container start {CONTAINER ID}
docker container exec -it {CONTAINER ID} /bin/bash
$ psql -U postgres
postgres=# \c test01 user01
test01=# \dt
List of relations
Schema | Name | Type | Owner
--------+---------+-------+--------
public | table01 | table | user01
test01=# SELECT * FROM table01;
id | name
----+-----------
1 | sajacaros
test01=# \q
$ exit
# ์ปจํ
์ด๋ ์ญ์ ํ ์ฌ์์ฑํ๋ฉด ๋ฐ์ดํฐ ์์ค
docker container stop {CONTAINER ID}
docker container rm {CONTAINER ID}
docker container run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
docker container exec -it {CONTAINER ID} /bin/bash
$ psql -U postgres
postgres=# \c test01 user01
connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: role "user01" does not exist
Previous connection kept
test01=# \q
$ exit
docker container stop {CONTAINER ID}
docker container rm {CONTAINER ID}
Volume๊ณผ Bind Mount ๐๏ธ
Docker ์ปจํ ์ด๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ฐ์ฑ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ์ปจํ ์ด๋๊ฐ ์ญ์ ๋๋ฉด ๋ด๋ถ ๋ฐ์ดํฐ๋ ํจ๊ป ์ฌ๋ผ์ง๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Docker๋ ๋ ๊ฐ์ง ์ฃผ์ ๋ฐ์ดํฐ ์์์ฑ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค.
Volume
Docker Volume์ Docker์ ์ํด ์์ ํ ๊ด๋ฆฌ๋๋ ๋ฐ์ดํฐ ์ ์ฅ์์ ๋๋ค.
์ฃผ์ ํน์ง:
- Docker ์์ง์ด ๊ด๋ฆฌํ๋ ํธ์คํธ ํ์ผ์์คํ
์ ํน์ ์์ญ(๋ณดํต
/var/lib/docker/volumes/
)์ ์ ์ฅ - Docker CLI ๋ช ๋ น์ด๋ก ์์ฑ ๋ฐ ๊ด๋ฆฌ ๊ฐ๋ฅ
- ๋ค๋ฅธ ์ปจํ ์ด๋ ๊ฐ ์์ ํ๊ฒ ๊ณต์ ๊ฐ๋ฅ
- ๋ณผ๋ฅจ ๋๋ผ์ด๋ฒ๋ฅผ ํตํด ์๊ฒฉ ํธ์คํธ๋ ํด๋ผ์ฐ๋ ์ ๊ณต์์ ๋ฐ์ดํฐ ์ ์ฅ ๊ฐ๋ฅ
- ์ฌ์ ์ ์ปจํ ์ธ ๋ก ๋ณผ๋ฅจ ์ด๊ธฐํ ๊ฐ๋ฅ
์ฌ์ฉ ์์:
# ๋ณผ๋ฅจ ์์ฑ
docker volume create my-data
# ๋ณผ๋ฅจ์ ์ฌ์ฉํ์ฌ ์ปจํ
์ด๋ ์คํ
docker run -v my-data:/app/data nginx
์ฅ์ :
- Docker์ ์ํด ๊ด๋ฆฌ๋์ด ๋ฐฑ์ , ๋ณต์, ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ฌ์
- ์ฌ๋ฌ ์ปจํ ์ด๋ ๊ฐ ๋ฐ์ดํฐ ๊ณต์ ์ ์ด์์
- ํธ์คํธ OS์ ๋ ๋ฆฝ์ ์ธ ๋ฐฑ์ ๊ฐ๋ฅ
- ์ฑ๋ฅ์ด ์ต์ ํ๋จ
# ๋ณผ๋ฅจ ๋ชฉ๋ก ํ์ธ
docker volume ls
# ์ ๋ณผ๋ฅจ ์์ฑ
docker volume create myvolume01
# ๋ณผ๋ฅจ์ ๋ง์ดํธํ์ฌ PostgreSQL ์ปจํ
์ด๋ ์คํ
docker container run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword --mount type=volume,source=myvolume01,target=/var/lib/postgresql/data -d postgres
# ๋ณผ๋ฅจ ์์ธ ์ ๋ณด ํ์ธ
docker volume inspect myvolume01
[
{
"CreatedAt": "2025-05-10T23:48:48Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/myvolume01/_data",
"Name": "myvolume01",
"Options": null,
"Scope": "local"
}
]
Bind Mount
Bind Mount๋ ํธ์คํธ ์์คํ ์ ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ปจํ ์ด๋์ ํ์ผ ์์คํ ์ ๋ง์ดํธํ๋ ๋ฐฉ์์ ๋๋ค.
์ฃผ์ ํน์ง:
- ํธ์คํธ ๋จธ์ ์ ์ด๋ ์์น๋ ์ปจํ ์ด๋์ ์ง์ ๋ง์ดํธ ๊ฐ๋ฅ
- ํธ์คํธ์ ์ปจํ ์ด๋ ๊ฐ ๋์ผํ ํ์ผ์ ์ ๊ทผ ๊ฐ๋ฅ
- ์ปจํ ์ด๋๊ฐ ํธ์คํธ ํ์ผ ์์คํ ์ ๋ณ๊ฒฝํ ์ ์์
- ํธ์คํธ ๋จธ์ ์ ํ์ผ ์์คํ ๊ตฌ์กฐ์ OS์ ์์กด์
์ฌ์ฉ ์์:
# ํธ์คํธ์ ํน์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ปจํ
์ด๋์ ๋ง์ดํธ
docker run -v /host/path:/container/path nginx
์ฅ์ :
- ๊ฐ๋ฐ ์ค ์์ค ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ฆ์ ์ปจํ ์ด๋์ ๋ฐ์ ๊ฐ๋ฅ
- ํธ์คํธ ํ์ผ ์์คํ ์ ํน์ ๋๊ตฌ๋ ๊ตฌ์ฑ ํ์ผ์ ์ปจํ ์ด๋์ ๊ณต์ ๊ฐ๋ฅ
- ์ค์ ๋ณ๊ฒฝ ์ ๋น ๋ฅธ ๊ฐ๋ฐ/ํ ์คํธ ์ฌ์ดํด ์ ๊ณต
# Bind Mount๋ฅผ ์ฌ์ฉํ PostgreSQL ์ปจํ
์ด๋ ์คํ
docker container run --name some-postgres2 -e POSTGRES_PASSWORD=mysecretpassword --mount type=bind,source=/home/sajacaros/work/ch04,target=/work -d postgres
์ฃผ์ ์ฐจ์ด์ ๋น๊ต โ๏ธ
ํน์ฑ | Volume | Bind Mount |
---|---|---|
๊ด๋ฆฌ ์ฃผ์ฒด | Docker ์์ง | ์ฌ์ฉ์(ํธ์คํธ ํ์ผ์์คํ ) |
์ ์ฅ ์์น | /var/lib/docker/volumes/ ๋๋ ํ๋ฌ๊ทธ์ธ | ํธ์คํธ์ ์ด๋ ์์น๋ ๊ฐ๋ฅ |
๋ด์ฉ ๋ณ๊ฒฝ | ์ฃผ๋ก ์ปจํ ์ด๋์์๋ง ๋ณ๊ฒฝ | ํธ์คํธ์ ์ปจํ ์ด๋ ๋ชจ๋ ๋ณ๊ฒฝ ๊ฐ๋ฅ |
๋ฐฑ์ ์ฉ์ด์ฑ | ๋์ | ๋ณดํต (ํธ์คํธ ํ์ผ์์คํ ์ข ์) |
์ด์์ฑ | ๋์ | ๋ฎ์ (ํธ์คํธ ๊ฒฝ๋ก์ ์์กด) |
์ฉ๋ | ๋ฐ์ดํฐ ์์์ฑ, ์ปจํ ์ด๋ ๊ฐ ๊ณต์ | ๊ฐ๋ฐํ๊ฒฝ, ์ค์ ํ์ผ, ์์ค์ฝ๋ ๋ณ๊ฒฝ ๊ฐ์ง |
์ฌ์ฉ ๊ถ์ฅ ์ฌ๋ก ๐ก
- Volume ์ฌ์ฉ ๊ถ์ฅ:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ์
- ์ปจํ ์ด๋ ๊ฐ ๋ฐ์ดํฐ ๊ณต์
- ๋ฐฑ์ ๋ฐ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ค์ํ ๋ฐ์ดํฐ
- ๋์ปค ์ค์ ์๋น์ค์์ ๋ฐ์ดํฐ ์์์ฑ ํ์์
- Bind Mount ์ฌ์ฉ ๊ถ์ฅ:
- ๊ฐ๋ฐ ํ๊ฒฝ์์ ์์ค ์ฝ๋ ๊ณต์
- ์ค์ ํ์ผ ๊ณต์
- ํธ์คํธ์ ์ปจํ ์ด๋ ๊ฐ ํ์ผ ๋น ๋ฅธ ์ ์ก ํ์์
- ํธ์คํธ์ ํน์ ๋๊ตฌ๋ ๊ธฐ๋ฅ์ ์ปจํ ์ด๋์์ ์ด์ฉํ๊ณ ์ถ์ ๋