์ปจํ ์ด๋ ๊ธฐ๋ฐ์ ์คํ์์ค ๊ฐ์ํ ํ๋ซํผ์ผ๋ก ๊ณ์ ๋ฐ๋๋ ์๋ฒ ํ๊ฒฝ๊ณผ ๊ฐ๋ฐ ํ๊ฒฝ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅ!!!
Docker๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๊ฒฉ๋ฆฌ๋์ด ๊ฐ์๋จธ์ ์ฒ๋ผ ์ฌ์ฉํ์ง๋ง ๊ฐ์๋จธ์ ์ด ์๋๊ณ "๊ฒฉ๋ฆฌ๋ง" ํด์ฃผ๊ธฐ ๋๋ฌธ์ VM๊ณผ ๋ค๋ฅด๊ฒ ์ฑ๋ฅ์ ํ๋ฝ์ด ํฌ์ง ์๋ค. ( ์ปจํ ์ด๋ํ )
LXC (LinuX Containers)๋ ๋จ์ผ ์ปจํธ๋กค ํธ์คํธ ์์์ ์ฌ๋ฌ๊ฐ์ ๊ณ ๋ฆฝ๋ ๋ฆฌ๋ ์ค ์์คํ (์ปจํ ์ด๋)๋ค์ ์คํํ๊ธฐ ์ํ ์ด์ ์์คํ ๋ ๋ฒจ ๊ฐ์ํ ๋ฐฉ๋ฒ์ด๋ค.
๋ํ์ ์ธ ๊ธฐ์ ์ cgroups(control groups)๋ก ํ๋ก์ธ์ค๋ค์ ์์์ ์ฌ์ฉ(CPU, ๋ฉ๋ชจ๋ฆฌ, ๋์คํฌ ์ ์ถ๋ ฅ, ๋คํธ์ํฌ ๋ฑ)์ ์ ํํ๊ณ ๊ฒฉ๋ฆฌ์ํค๋ ๋ฆฌ๋ ์ค ์ปค๋ ๊ธฐ๋ฅ์ด๋ค. ๋ํ ์ด์ ํ๊ฒฝ์ ์์ ํ ๊ณ ๋ฆฝ์ํค๊ธฐ ์ํด namespace isolation์ ์ ๊ณตํ๋ค
์ด๋ฐ LXC ๋ฐฉ๋ฒ์ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก Docker๋ฅผ ์ฌ์ฉํ๋ค!!
์ปจํ
์ด๋๋ฅผ ์คํํ๊ธฐ ์ํด ํ์ํ ํ์ผ๋ค์ ๋ชจ์์ผ๋ก
์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ Dockerfile์ด๋ผ๋ ์ด๋ฏธ์ง ์์ฑ ํ์ผ์ด ํ์ํ๋ค
FROM openjdk:8-jdk-alpine #๋ฒ ์ด์ค ์ด๋ฏธ์ง ํ์ผ
COPY build/libs/newweek03-0.0.1-SNAPSHOT.jar app.jar #์ปจํ
์ด๋ ๋ด๋ถ๋ก ํ์ผ ๋ณต์ฌ
ENTRYPOINT ["java","-jar","/app.jar"] #์ปจํ
์ด๋ ์์ฑ๋๋ฉด์ ์คํ
docker build -t {์ด๋ฏธ์ง๋ช
}:{ํ๊ทธ} {Dockerfile ํ์ผ ์์น}
์ปจํ
์ด๋ ์์ฑ
docker run --name {์ปจํ
์ด๋ ์ด๋ฆ} -p {ํธ์คํธ ํฌํธ}:{์ปจํ
์ด๋ ํฌํธ} -d {์ด๋ฏธ์ง๋ช
}:{์ด๋ฏธ์งํ๊ทธ}
docker ps #์์ฑ๋ ์ปจํ
์ด๋ ํ์ธ
docker stop #{์ปจํ
์ด๋๋ช
} #์ปจํ
์ด๋ ์ ์ง
docker ps -a #์ ์ง๋ ์ปจํ
์ด๋ ํ์ธ
docker rm {์ปจํ
์ด๋๋ช
} #์ ์ง๋ ์ปจํ
์ด๋ ์ญ์
test๋ ์ ์ธํ๊ณ build ํด๋ณด์ ๋น ๋ฅธ๊ฒ ์ข์์
Docker ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ
docker build -t my-springboot .
Docker ์ปจํ
์ด๋ ๋ง๋ค๊ธฐ
docker run --name sb -p 8080:8080 -d my-springboot
๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์์๊ฒ ์ ๋์จ ํ์ผ ์์คํ ์ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง ์คํ ๊ตฌ์กฐ๊ฐ ํ๋์ ํ์ผ ์์คํ ์ฒ๋ผ ๋ณด์ด๋๋ก ํ๊ฒ ํ๋ค.
Mysql ์ปจํ
์ด๋ ์์ฑ
docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 -d mysql
ํ ์ด๋ธ ์์ฑ
๋ฐ์ดํฐ ์ ์ฅ
ํ ์คํธ
docker stop some-mysql
docker rm some-mysql
docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 -d mysql
์ฌ์ดํธ : https://hub.docker.com/
docker images
docker tag {์ด๋ฏธ์ง๋ช
}:{ํ๊ทธ} {๋ฆฌํ์งํ ๋ฆฌ ์ด๋ฏธ์ง๋ช
}:{ํ๊ทธ}
docker login
docker push {๋ฆฌํ์งํ ๋ฆฌ ์ด๋ฏธ์ง๋ช
}:{ํ๊ทธ}
cmd ๊ฒฝ๋ก ๋ช
๋ น์ด
ssh -i {key} ubuntu@{ํผ๋ธ๋ฆญip}
๋์ปค ์ค์น(install.sh์ ๋ณต์ฌ) ํ ์คํ
sudo apt-get update
sudo apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install -y docker-ce
sudo usermod -aG docker $USER
์ด๋ฏธ์ง PULL
docker pull {๋์ปค ํ๋ธ ์ด๋ฏธ์ง๋ช
}:{ํ๊ทธ}
์ปจํ
์ด๋ ์คํ
docker run --name {์ปจํ
์ด๋ ์ด๋ฆ} -p 80:8080 -d {์ด๋ฏธ์ง ์ด๋ฆ}:{ํ๊ทธ}
์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ๋ชจ์์ ๊ด๋ฆฌํ๊ธฐ ์ํ ํด๋ก docker-compose.yml ๋ผ๋ ํ์ผ์ ์ปจํ ์ด๋์ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ์ ์ํจ์ผ๋ก์จ ๋์ผ ํธ์คํธ์์ ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ์ผ๊ด์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
docker-compose.yaml ์ค์ ํ์ผ ๋ง๋ค๊ธฐ
version: "3.9"
services:
some-springboot:
image: my-springboot
ports:
- 8080:8080
networks:
- backend
some-mysql:
image: mysql
volumes:
- C:/Users/USER/Documents/Git/weeklytest/spring0607/mysql-data:/var/lib/mysql
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=1234
networks:
- backend
networks:
backend:
application.properties
spring.datasource.url=jdbc:mysql://some-mysql/mydb
spring.datasource.username=root
spring.datasource.password=1234
spring.jpa.hibernate.ddl-auto=update
์คํ
docker-compose up -d
์ปจํ
์ด๋ ํ์ธ
docker-compose ps
MySQL ๋ฐ Docker Compose๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ค ์ปจํ ์ด๋ ์ฑ ๋ง๋ค๊ธฐ