๐ณ ๐ณ ๐ณ ๐ณ ๐ณ
์ฐธ๊ณ - ์ํํ ์ฝ๋ฉ์ฌ์ : ๊ฐ์ฅ ์ฝ๊ฒ ๋ฐฐ์ฐ๋ ๋์ปค - YouTube
๐ณ ๋ชฉํ ๐ณ
๋์ปค, ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์๋ค.
๊ฐ๋ + ์ค์ต์ ๋จ์๊ฒ ์ค๋ช ํ ์ ์๋ค.
ํ์ต ๋ชฉํ ๋๋~
๋ด์ผ ๋์๋ฆฌ์์ ๋์ปค ์ปดํฌ์ฆ๋ฅผ ๋ฐํํด์ผ ํ๋ค.
ใ ใ ใ ใ . ^^.
๐ณ ์์ํ๊ธฐ ์ ์.. ๐ณ
๋์ ์ดํด๋๋ฅผ ์ ๊ฒํด๋ณด์!
๊ทธ๋์ ๋์๋ฆฌ์์ ๋ญ ํด๋ดค๋..
๋ญ๊ฐ .. ์ด๊ฒ์ ๊ฒ ๊น์๋ค!
๋์ปค ๊น๊ธฐ
๋์ปค ์ด๋ฏธ์ง๋ก mysql ๋ค์ด
+ ๊ฐ๋จํ ๋ฌธ๋ฒ
ํ๋ก + ์คํํฌ
spark ML
์นดํ์นด
-> ๊ทธ๋ฆฌ๊ณ ์ปดํฌ์ฆ..
๊ทธ๋ฆฌ๊ณ ์ดํด๊ฐ ๋ถ์กฑํ ๊ฒ ๊ฐ์์
๋ฐ์ดํฐ ์์ง๋์ด๋ง ์ธํ๋ผ๋ ๊ณต๋ถ๋ฅผ ํด ๋ณด์๋ค.
๐ณ ๊ทธ๋ฆฌ๊ณ ์์ฝ! ๐ณ
์์ฝ์ ๋์ปค ์ค์ต ๊ตฌ์กฐ๋
๋ก์ปฌ ํ๊ฒฝ์ ์น์ docker๋ก ํ๊ฒฝ ๊ตฌ์ฑ์ ํ๋ค!
๐ณ docker image - node.js ใด๐ณ๐ณ frontend - dockerfile1 ใด๐ณ๐ณ backend - dockerfile2 ใด๐ณ๐ณ database - dockerfile3 ๐ณ๐ณ๐ณ docker-compose - .yml |
๐ณ ๋ชฉ์ฐจ ๐ณ
๐ณ step 1 ๐ณ
docker image
๐ณ step 2 ๐ณ
dockerfile
- i) frontend
- ii) backend
- iii) database
๐ณ step 3 ๐ณ
docker compose
๐ณ step 1. docker image ๐ณ
(1)
์ค์ต์ ์ํ ํด๋ ์์ฑ
์ค์ต ํ๊ฒฝ : IDE์์ terminal ์คํํ ํ + WSL์ ๋ค์ด๊ฐ,,
* ์ฃผ์ *
์๋์ฐ๋ Users > [์ฌ์ฉ์ ์ด๋ฆ] ๋ด๋ถ์ ํด๋ ์์ฑํ์ฌ์ผ ํจ
(2)
์ค์ต์ ์ํ git ๋ค์ด
git clone https://github.com/tomatozoo/docker-compose-without-dockerfile.git
* ์์ฝ์ ์ค์ต ๋ฆฌํฌ์งํ ๋ฆฌ์์ dockerfile๊ณผ docker-compose.yml ํ์ผ์ ์ญ์ ํ ๊ฒ์ *
(์๋์) ์ค์ต ํด๋๋ ๋ฐฉ๋ช ๋ก์ ๋ฑ๋กํ๋ ๊ฐ๋จํ ์นํ์ด์ง์ธ๋ฐ
๐ณ docker-practice -> application ใด๐ณfrontend -> service 1 ใด .css ใด .js ใด .html ใด dockerfile ใด๐ณbackend -> service 2 ใด .py ใด dockerfile ใด๐ณdatabase -> service 3 ใด .sql ใด dockerfile ๐ณ docker-compose.yml |
๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
(์ฌ๊ธฐ ์ฌ๋ฆฐ git ๋ฆฌํฌ์งํ ๋ฆฌ์๋ ์์ :))
๋์ปค์์ ์ ์ฒด ๋ฆฌํฌ์งํ ๋ฆฌ๋ 'application'์ด๋ผ๊ณ ํ๊ณ
๋ด๋ถ๋ฅผ ๊ตฌ์ฑํ๋ frontend, backend, database, search engine ๋ฑ์ 'service'๋ผ๊ณ ํ๋ค.
(3)
์ด ์ค์ต์์๋ ๋ก์ปฌ ํ๊ฒฝ์ node.js๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ณ
๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ค์ด ๋ฐ๋๋ค.
$ docker run -it node
...
node image๊ฐ ์ด๋ฏธ ์์ผ๋ฉด, ๋ก์ปฌ ํ๊ฒฝ์์ ์ค์นํ๊ณ
์์ผ๋ฉด docker hub์์ ์ฐพ์์ ๋ค์ด ๋ฐ๋ ๋ช ๋ น์ด๋ผ๊ณ ํ๋ค.
Welcome to Node.js v16.8.0.
Type ".help" for more information.
>
์ง ~
์ค์นํ์ง ์์์ง๋ง, ์ด๋ ๊ฒ node.js์ด ๋ํ๋๊ฒ ๋๋ค.
์ ์ฌ์ดํธ์ ๋ค์ด๊ฐ๋ฉด,
๊ฐ๋ฐ์ ํ์ํ ํ๊ฒฝ์ ์ด๋ฏธ์ง ํํ๋ก ๋ค์ด ๋ฐ์ ์ ์๋ค.
์ด๋
๋์ปค์ ์ด๋ฏธ์ง๋, ๋ฆฌ๋ ์ค์ ์ปดํจํฐ์ ํน์ ์ํ๋ฅผ ๋ฐ์ ํด๋์ ๊ฒ์ ์๋ฏธํ๋ค.
node ์ด๋ฏธ์ง๋ ๋ฆฌ๋ ์ค์ node.js๊ฐ ์ค์น๋ ๊ฒ์ ๊ทธ๋๋ก ๊ณ ์ ํ ๊ฒ์ด๊ณ
์ผ๋จ ๋ก์ปฌ์์ ์ฐพ์๋ณด๊ณ ,
์์ผ๋ฉด docker hub์์ ์ฐพ์์ ๋ค์ด์ ๋ฐ๋๋ค.
๋์ปค ์ด๋ฏธ์ง๊ฐ ์ค๊ณ๋๋ผ๋ฉด
์ปจํ ์ด๋๋ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ฐํ์ผ๋ก ๋ง๋ ๊ฑด๋ฌผ์ด๋ค.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
node latest 1016313cda78 2 days ago 907MB
docker images๋ฅผ ํตํด node image๊ฐ ์๊ฒผ์์ ํ์ธํ ์ ์๋ค.
tomato@DESKTOP-IP2MBOJ:/mnt/c/Users/82109/Source/Repos/practice-docker$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e1b735810b4c node "docker-entrypoint.s…" 7 minutes ago Up 7 minutes relaxed_yonath
docker ps
๋ก ์ํ ํ์ธ
์ปจํ ์ด๋ฌ ์ด๋ฆ์ด relaxed_yonath๋ผ์
docker exec -it [์ปจํ ์ด๋ ์ด๋ฆ] bash๋ก
๋ฆฌ๋ ์ค CLI์ ์ ์ํด์ค๋ค.
$ docker exec -it relaxed_yonath bash
root@e1b735810b4c:/#
์ปจํ ์ด๋๋ฅผ ํตํด ๊ฐ์์ ํ๊ฒฝ์ ์ ์ํ ๊ฒ์ด๋ค.
์๊น ๋งํ๋ฏ์ด,
๋์ปค๋ ๋ฆฌ๋ ์ค ๊ฐ์ํ๊ฒฝ์ ํํ๋ก ๋์๊ฐ๋ค.
ls๋ฅผ ํตํด ๊ธฐ๋ณธ ๋๋ ํ ๋ฆฌ ํ์ธ ๊ฐ๋ฅํจ
๐ณ step2. docker file ๐ณ
์ ํด์ง ๋์ปค ์ด๋ฏธ์ง๋ฅผ hub์์ ๋ค์ด ๋ฐ๊ณ ,
์ปจํ ์ด๋๋ก ๋ง๋ค์ด ํฐ๋ฏธ๋๋ก ๋ช ๋ นํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์๋ค.
-> ๊ทธ๋์ Dockerfile์ ์ด์ฉํ๋ค.
ํ์์ ๋ง๊ฒ
๊ณต์ ์ด๋ฏธ์ง๋ฅผ ํ๋ํด์
๋ฑ ๋ง๋ ์ด๋ฏธ์ง๋ก ๋ง๋ค์ด๋ด๊ฒ ๋๋ค.
์๋ฅผ ๋ค๋ฉด, node.js์ http-server๋ฅผ ํฉ์น๋ ์(?)
์ด ์ค์ต ํด๋์๋ frontend, backend, database ํ์ ํด๋์ ๋ชจ๋
dockerfile์ด ์์๋๋ฐ.. ์ญ์ ํ๋ค ^^
dockerfile์ ๊ธฐ๋ณธ์ ์ธ ๋ช ๋ น์ด๋ฅผ ๊ณต๋ถํ๊ณ
์ง์ frontend, backend, database์ dockerfile์ ์์ฑํด๋ณด์!
(0)
๐ณ dockerfile ๋ช ๋ น์ด ์์๋ณด๊ธฐ ๐ณ
FROM - ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ ์ฅ ex) FROM node:12.18.4 FROM ์ด๋ฏธ์ง๋ช :๋ฒ์ ์ ๋ณด RUN - ์ด๋ฏธ์ง ์์ฑ ๊ณผ์ ์์ ๋ช ๋ น์ด ์คํ ex) RUN npm install -g http-server * npm : python์ pip๊ฒฉ. Node Package Manager WORKDIR - ๊ธฐ๋ณธ ๋๋ ํ ๋ฆฌ ์ค์ (๊ฐ์ ๋๋ ํ ๋ฆฌ์์ ๊ณ์ ์์ ํ๊ธฐ ์ํด ์ฌ์ฉ) ex) WORKDIR /home/node/app ๋ช ๋ น์ด ์คํํ ๋๋ ํ ๋ฆฌ ์ค์ (ํ์์น) CMD - ๋์ปค ์ปจํ ์ด๋๊ฐ ์คํ๋์์ ๋ ์คํ๋๋ ๋ช ๋ น์ด ์ ์ ex) CMD ["http-server", "-p", "8080", "./public"] $ docker run --name frontend_container -v $(pwd):/home/node/app -p 8080:8080 frontend_image ?? ENV - ์ด๋ฏธ์ง ํ๊ฒฝ๋ณ์ ์ง์ . -e ์ต์ ์ ํตํด ๊ธฐ์กด ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์์. ex) ENV MYSQL_USER mysql_user ENV MYSQL_PASSWORD mysql_password Environment variables in Compose | Docker Documentation ์ฐธ๊ณ COPY - ํ์ผ, ๋๋ ํ ๋ฆฌ๋ฅผ ์ด๋ฏธ์ง๋ก ๋ณต์ฌ ๋์ปคํ๊ฒฝ์์ ์ปจํ ์ด๋ ์์ฑ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ํด๋๋ก ๋ฏธ๋ฆฌ ์์ฑ๋ ์คํฌ๋ฆฝํธ๋ค์ ๋ณต์ฌ์ํจ๋ค. ex) COPY ./scripts/ /docker-entrypoint-initdb.d/ MAINTAINER - ๊ด๋ฆฌ์ ์ ๋ณด(์ด๋ฆ, ์ด๋ฉ์ผ ๋ฑ) ADD - ... COPY์ ์ ์ฌํจ EXPOSE - ๋์ปค ์ปจํ ์ด๋๊ฐ ์คํ๋์์ ๋ ๊ธฐ๋ค๋ฆฌ๋ ํฌํธ(Listen) ์ง์ |
์ฐธ๊ณ - [Docker] ๊ฐ๋ ์ ๋ฆฌ ๋ฐ ์ฌ์ฉ๋ฐฉ๋ฒ๊น์ง. (cultivo-hy.github.io)
: dockerfile reference
์ฐธ๊ณ - Get started with Docker Compose | Docker Documentation
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
- Build an image starting with the Python 3.7 image.
- Set the working directory to /code.
- Set environment variables used by the flask command.
- Install gcc and other dependencies
- Copy requirements.txt and install the Python dependencies.
- Add metadata to the image to describe that the container is listening on port 5000
- Copy the current directory . in the project to the workdir . in the image.
- Set the default command for the container to flask run.
(1)
๐ณ frontend ๐ณ
dockerfile ์ดํด๋ณด๊ธฐ
FROM node:12.18.4
# ์ด๋ฏธ์ง ์์ฑ ๊ณผ์ ์์ ์คํํ ๋ช
๋ น์ด
RUN npm install -g http-server
# ์ด๋ฏธ์ง ๋ด์์ ๋ช
๋ น์ด๋ฅผ ์คํํ (ํ ์์น๋ก ์ก์) ๋๋ ํ ๋ฆฌ ์ค์
WORKDIR /home/node/app
# ์ปจํ
์ด๋ ์คํ์ ์คํํ ๋ช
๋ น์ด
CMD ["http-server", "-p", "8080", "./public"]
# ์ด๋ฏธ์ง ์์ฑ ๋ช
๋ น์ด (ํ ํ์ผ๊ณผ ๊ฐ์ ๋๋ ํ ๋ฆฌ์์)
# docker build -t {์ด๋ฏธ์ง๋ช
} .
# ์ปจํ
์ด๋ ์์ฑ & ์คํ ๋ช
๋ น์ด
# docker run --name {์ปจํ
์ด๋๋ช
} -v $(pwd):/home/node/app -p 8080:8080 {์ด๋ฏธ์ง๋ช
}
์ด ๋์ปคํ์ผ์ ๋์ปค ์ด๋ฏธ์ง๋ก ์์ฑํ๋ค.
$ docker build -t frontend_image .
..
tomato@DESKTOP-IP2MBOJ:/mnt/c/Users/82109/Source/Repos/practice-docker/frontend$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
frontend_image latest 91c8ec3097f3 19 seconds ago 922MB
docker images
๋ช ๋ น์ด๋ก frontend_image ์ด๋ฏธ์ง๊ฐ ๋ง๋ค์ด์ก์์ ํ์ธํ ์ ์๋ค.
$ docker run --name frontend_container -v $(pwd):/home/node/app -p 8080:8080 frontend_image
๊ทธ ๋ค์, ์ด๋ฏธ์ง๋ก ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ ์คํ์ํจ๋ค.
8080๋ฒ์ผ๋ก ์ก์ถํ์๊ธฐ ๋๋ฌธ์
localhost:8080์ ์ ์ํ๋ฉด, ์นํ์ด์ง๋ฅผ ๋ณผ ์ ์๋ค.
๊ฒฐ๊ณผ
(2)
๐ณ database ๐ณ
๋์ปค ํ์ผ๋ก (1) ๊ณผ์ ๋ฐ๋ณต
database์ ๋์ปค ํ์ผ์ ์ดํด๋ณด์.
FROM mysql:5.7
# ์ด๋ฏธ์ง ํ๊ฒฝ๋ณ์๋ค ์ธํ
# ์ค์ ์์๋ ๋น๋ฐ๋ฒํธ ๋ฑ์ ์ด๊ณณ์ ์
๋ ฅํ์ง ๋ง ๊ฒ!
# ์๋ฒ์ ํ๊ฒฝ๋ณ์ ๋ฑ์ ํ์ฉํ์ธ์.
ENV MYSQL_USER mysql_user
ENV MYSQL_PASSWORD mysql_password
ENV MYSQL_ROOT_PASSWORD mysql_root_password
ENV MYSQL_DATABASE visitlog
# ๋์ปคํ๊ฒฝ์์ ์ปจํ
์ด๋ ์์ฑ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ํด๋๋ก
# ๋ฏธ๋ฆฌ ์์ฑ๋ ์คํฌ๋ฆฝํธ๋ค์ ์ด๋
COPY ./scripts/ /docker-entrypoint-initdb.d/
# ์ด๋ฏธ์ง ๋น๋ ๋ช
๋ น์ด (ํ ํ์ผ๊ณผ ๊ฐ์ ๋๋ ํ ๋ฆฌ์์)
# docker build -t {์ด๋ฏธ์ง๋ช
} .
# ์คํ ๋ช
๋ น์ด (ํฐ๋ฏธ๋์ ๋ก๊ทธ ์ฐํ๋ ๊ฒ ๋ณด๊ธฐ)
# docker run --name {์ปจํ
์ด๋๋ช
} -it -p 3306:3306 {์ด๋ฏธ์ง๋ช
}
# ์คํ ๋ช
๋ น์ด (๋ฐ๋ชฌ์ผ๋ก ์คํ)
# docker run --name {์ปจํ
์ด๋๋ช
} -p 3306:3306 -d {์ด๋ฏธ์ง๋ช
}
์ฐ์ , database ํด๋๋ก ์ด๋ํ๋ค.
(cd ..)
(cd database)
$ docker build -t database_image .
๋๊ฐ์ด ๋์ปคํ์ผ์ ์ด๋ฏธ์ง๋ก ์์ฑํด์ฃผ๊ณ ,
tomato@DESKTOP-IP2MBOJ:/mnt/c/Users/82109/Source/Repos/practice-docker/database$ docker run --nam
e database_container -it -p 3306:3306 database_image
์ปจํ ์ด๋ ์์ฑ์ํจ๋ค!
mysql์ 3306 ํฌํธ๊ฐ ๊ธฐ๋ณธ์ด๋ผ๊ณ ํ๋ค..
์ ๋ช ๋ น์ด ๋์ , - d : daemon ์ ์ถ๊ฐํ๋ฉด,
(๋ค์์ ์ฐ๊ฒฐํ๋ผ๋ ๋ป)
ID ๋ง ํ์๋๊ณ ,
terminal์ ์ฌ์ฉํ ์ ์๋ค.
tomato@DESKTOP-IP2MBOJ:/mnt/c/Users/82109/Source/Repos/practice-docker$ docker run --name databas
e_container -p 3306:3306 -d database_image
6e89286cdd9307656b725e16ff8990ac6281b54771bf4caaf51720d03d4f6cc6
...
(3)
๐ณ backend ๐ณ
๋ฐฑ์๋๋ ๋~๊ฐ์ด ํด์ค๋ค.
FROM python:3.8.5
# ์ด๋ฏธ์ง ์์ฑ ๊ณผ์ ์์ ์คํํ ๋ช
๋ น์ด
RUN pip3 install flask flask-cors flask-mysql
# ์ด๋ฏธ์ง ๋ด์์ ๋ช
๋ น์ด๋ฅผ ์คํํ (ํ ์์น๋ก ์ก์) ๋๋ ํ ๋ฆฌ ์ค์
WORKDIR /usr/src/app
# ์ปจํ
์ด๋ ์คํ์ ์คํํ ๋ช
๋ น์ด
CMD ["python3", "backend.py"]
# ์ด๋ฏธ์ง ์์ฑ ๋ช
๋ น์ด (ํ ํ์ผ๊ณผ ๊ฐ์ ๋๋ ํ ๋ฆฌ์์)
# docker build -t {์ด๋ฏธ์ง๋ช
} .
# ์ปจํ
์ด๋ ์์ฑ & ์คํ ๋ช
๋ น์ด
# docker run --name {์ปจํ
์ด๋๋ช
} -v $(pwd):/usr/src/app -p 5000:5000 {์ด๋ฏธ์ง๋ช
}
๋์ปค ํ์ผ
tomato@DESKTOP-IP2MBOJ:/mnt/c/Users/82109/Source/Repos/practice-docker$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
6e89286cdd93 database_image "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp database_container
๋ฐฑ์๋๋ ํ์ด์ฌ์ flask๋ก api ์๋ฒ๋ฅผ ๋๋ฆฐ๋ค.
์๋น์ค๋ฅผ ๊ตฌ์ฑํ๋ ์ธ ์์๊ฐ dockerfile์ด๋ผ๋ ๋ฏธ์์ ์ค๊ณ๋๋ก ์ค์ ๋๋ค.
๐ณ step3. docker-compose ๐ณ
ํ๋ํ๋ ์ด๋ฏธ์ง๋ก ๋ง๋ค๊ณ
์คํ์ํค๊ธฐ ๋ฒ๊ฑฐ๋กญ๊ธฐ ๋๋ฌธ์
๊ฑฐ์์ ์ค๊ณ๋์ธ docker-compose๋ฅผ ์ด์ฉํ๋ค.
docker-compose.yml ์์ ํ์ผ์ ์ดํด๋ณด์.
์ด๋ฏธ์ง์ version์ ์ ํ๊ณ ,
๊ฐ service(database, backend, frontend)์ ์ต์ ๋ค์ ์ ํด์ค๋ค๊ณ ์ดํดํ๋ฉด ๋๋ค.
version: '3'
services:
database:
# Dockerfile์ด ์๋ ์์น
build: ./database
# ๋ด๋ถ์์ ๊ฐ๋ฐฉํ ํฌํธ : ์ธ๋ถ์์ ์ ๊ทผํ ํฌํธ
ports:
- "3306:3306"
backend:
build: ./backend
# ์ฐ๊ฒฐํ ์ธ๋ถ ๋๋ ํ ๋ฆฌ : ์ปจํ
์ด๋ ๋ด ๋๋ ํ ๋ฆฌ
volumes:
- ./backend:/usr/src/app
ports:
- "5000:5000"
# ํ๊ฒฝ๋ณ์ ์ค์
environment:
- DBHOST=database
frontend:
build: ./frontend
# ์ฐ๊ฒฐํ ์ธ๋ถ ๋๋ ํ ๋ฆฌ : ์ปจํ
์ด๋ ๋ด ๋๋ ํ ๋ฆฌ
volumes:
- ./frontend:/home/node/app
ports:
- "8080:8080"
๊ฒฐ๊ตญ, ์์ ์ผ์ผ์ด ์ปจํ ์ด๋๋ฅผ ์คํ์์ผ์ค ๊ฒ์
๋์ ํ๊ธฐ ์ํด ๋์ปค ์ปดํฌ์ฆ๊ฐ ์์ผ๋๊น ๋ง์ด๋ค.
ํ๋ก ํธ์๋์ ๊ฒฝ์ฐ
$ docker build -t frontend_image .
$ docker run --name frontend_container -v $(pwd):/home/node/app -p 8080:8080 frontend_image
ํ๋ก ํธ์๋ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ ๋ช ๋ น์ด ์กฐ๊ฑด์ด
(ํฌํธ๋๋ฒ 8080:8080 , ๊ฒฝ๋ก .. /app ๋ฑ)
services:
frontend:
build: ./frontend
# ์ฐ๊ฒฐํ ์ธ๋ถ ๋๋ ํ ๋ฆฌ : ์ปจํ
์ด๋ ๋ด ๋๋ ํ ๋ฆฌ
volumes:
- ./frontend:/home/node/app
ports:
- "8080:8080"
compose ํ์ผ๋ก ์ฎ๊ฒจ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
๋ฒก์๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ง์ฐฌ๊ฐ์ง๋ค.
dockerfile, docker-compose.yml
ํ์ผ์ ๋ค ๊ตฌ์ฑํ๋ค๋ฉด,
์ด์ ํฐ๋ฏธ๋์์ ์คํ์์ผ๋ณด์!
tomato@DESKTOP-IP2MBOJ:/mnt/c/Users/82109/Source/Repos/practice-docker$ docker-compose up
์ค์ต ํด๋์์ docker-compose up ๋ช ๋ น์ ํด์ฃผ๋ฉด..
๋ก์ปฌ ํธ์คํธ์์ ์น์ฌ์ดํธ๊ฐ ๋์๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ถ๊ฐ์ ์ธ ๊ณผ์ :)
๋์ปค ์ปดํฌ์ฆ ๊ธฐ๋ณธ ๋ช ๋ น์ด
[Docker CE] docker-compose ๊ธฐ๋ณธ ๋ช ๋ น์ด ์ ๋ฆฌ :: Nirsa (tistory.com)
docker-compose --version
๋ฒ์ ํ์ธ
docker-compose up [์ต์
] [์๋น์ค๋ช
]
์ปจํ ์ด๋ ์์ฑ + ์คํ
์ด๋ ์ต์ ์ ์ข ๋ฅ์๋
1) -d : ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ daemon
2) --no-deps : ๋งํฌ ์๋น์ค ์คํํ์ง ์์
3) --build : ์ด๋ฏธ์ง ๋น๋
4) -t : ํ์์์ ์ง์
docker-compose ps
์ปจํ ์ด๋ ์ํ ํ์ธ
docker-compose logs
์ปจํ ์ด๋ ๋ก๊ทธ ์ถ๋ ฅ
docker-compose run
์ปจํ ์ด๋ ๋ก๊ทธ ์ถ๋ ฅ
docker-compose up ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด ์์ฑ ๋ฐ ์คํ๋ ์ปจํ ์ด๋์์ ์์์ ๋ช ๋ น์ ์คํํ๊ธฐ ์ํด ์ฌ์ฉ ํฉ๋๋ค.
์ปจํ ์ด๋๋ค์ ๋ชจ๋ ์ญ์ ํ ๊ฒฝ์ฐ docker-compose start๊ฐ ์๋, docker-compose up์ผ๋ก ๋ค์ ์ปจํ ์ด๋๋ค์ ์์ฑ ํด์ฃผ์ด์ผ ํฉ๋๋ค. ๋ง์ฝ ํน์ ์๋น์ค์์ /bin/bash๋ฅผ ์คํ์์ผ ์ ํ๊ฒฝ์ผ๋ก ์ง์ ํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ๋ฉด ๋ฉ๋๋ค. ์ฐธ๊ณ ๋ก ์๋น์ค๋ช ๊ณผ ์ปจํ ์ด๋๋ช ์ ๋ค๋ฅธ๊ฒ๋๋ค.
์๋น์ค๋ช ์ docker-compose.yml์ services: ๋ฐ์ ์์ฑํ ์๋น์ค ์ด๋ฆ ์ ๋๋ค.
# ์๋น์ค ์์
docker-compose start
# ์๋น์ค ์ ์ง
docker-compose stop
# ์๋น์ค ์ผ์ ์ ์ง
docker-compose pause
# ์๋น์ค ์ผ์ ์ ์ง ํด์
docker-compose unpause
# ์๋น์ค ์ฌ์์
docker-compose restart
์๋น์ค ์์ / ์ ์ง / ์ผ์์ ์ง / ์ฌ์์
docker-compose rm
์ปจํ ์ด๋ ์ผ๊ด ์ญ์
docker-compose kill [์ต์
]
docker-compose kill -s SIGINT
docker-compose kill
์ปจํ ์ด๋ ๊ฐ์ ์ ์ง
-s SIGINT ์ฌ์ฉ์ SIGINT ์ ๋ฌ
์ฌ์ฉํ์ง ์์ผ๋ฉด SIGKILL ์ ์ก
์๋น์ค ์ง์ ํ๋ฉด, ํน์ ์๋น์ค๋ง killํ ์ ์์
docker-compose down
์ปจํ ์ด๋ ์ผ๊ด ์ ์ง ๋ฐ ์ญ์
docker-compose down --rmi all
์ปจํ ์ด๋ ์ผ๊ด ์ญ์ (์ด๋ฏธ์ง๊น์ง ๋ชจ๋ ์ญ์ )
docker-compose port [์๋น์ค๋ช
] [ํฌํธ๋ฒํธ]
ํ๋ผ์ด๋น ํฌํธ๋ฒํธ ์ค์
docker-compose config
docker-compose ํ์ผ ๋ด์ฉ ํ์ธ
์ถ์ฒ - Quickstart: Compose and Django | Docker Documentation