์ด๋ฒ ํฌ์คํ ์์๋ ์ ๋ฒ์ ๋ง๋ JAVA-Tomcat-MySQL ํฌํ ํ๋ก๊ทธ๋จ์ .war๋ก ๊ฐ์ ธ์์ Docker์์ ์คํํด๋ณด๋ ์ค์ต ๊ณผ์ ์ ์ ์ด๋ณด์๋ค. VSCode ์์ Dockerfile ์ ์์ฑํ ํ๋ก์ ํธ ํด๋๋ฅผ ํ๋ ์์ฑํ๊ณ ๊ทธ ์์ docker-compose.yml ํ์ผ๊ณผ mysql, tomcat ํ๊ฒฝ์ค์ ์ ํด์ฃผ๋ ํ์ผ์ ๊ฐ๊ฐ ๋ง๋ค์๋ค. ๊ทธ๋ฐ ๋ค์ ๊ทธ ํ๋ก์ ํธ ์์์ ํฐ๋ฏธ๋์ ์ด์ด์ docker-compose up -d ๋ช ๋ น๋ฌธ์ ์คํํ๋ฉด ํ๋์ ์ปจํ ์ด๋ ๋ด์์ mysql ์ปจํ ์ด๋์ tomcat ์ปจํ ์ด๋๊ฐ ๊ฐ๊ฐ ์คํ์ด ๋๋ค.
1. Docker Image Pull & Container Run
# ๋์ปค ํ๋ธ์์ tomcat ์ด๋ฏธ์ง ์ฐพ๊ธฐ
docker search tomcat
# ๋์ปค ํ๋ธ์์ mysql ์ด๋ฏธ์ง ์ฐพ๊ธฐ
docker search mysql
# tomcat ์ด๋ฏธ์ง pull
docker image pull tomcat:9
# mysql ์ด๋ฏธ์ง pull
docker image pull mysql
# pull ๋ฐ์ tomcat ์ด๋ฏธ์ง๋ฅผ container ๋ก ์คํ (์ฒซ ์คํ)
docker run -d --name="tomcat-test" -p 8080:8080 tomcat:9
# pull ๋ฐ์ tomcat ์ด๋ฏธ์ง๋ฅผ container ๋ก ์ฌ์คํ
# docker restart tomcat-test
# pull ๋ฐ์ mysql ์ด๋ฏธ์ง๋ฅผ container ๋ก ์คํ
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=mysql๋น๋ฒ -d -p 3306:3306 mysql:latest
# pull ๋ฐ์ mysql ์ด๋ฏธ์ง๋ฅผ container ๋ก ์ฌ์คํ
# docker restart mysql-container
๐ก mysql ์ด๋ฏธ์ง ๋ฐ๊ณ run ์คํํ ๋ 3306 port conflict ์๋ฌ ๋ฐ์ํ๋ ๊ฒฝ์ฐ,
์๋์ฐ ๊ฒ์์ฐฝ - "์๋น์ค" ๊ฒ์ - MySQL80 - ์ค์ง ํด๋ฆญ
2. war ํ์ผ tomcat/webapps/์ ๋ฃ๊ธฐ
# ๋ก์ปฌ ๊ฒฝ๋ก์ ์๋ war ํ์ผ์ docker ๊ฒฝ๋ก๋ก ๋ณต์ฌ
docker cp ./ROOT.war tomcat-test:/usr/local/tomcat/webapps/
๐ก war ํ์ผ์ ์๋ณธ์ธ java ํ์ผ์์ mysql ์ฐ๋๋ถ๋ถ์ ip ์ฃผ์๋ฅผ localhost ์์ ipv4 ์ฃผ์๋ก ๋ณ๊ฒฝ
static String url = "jdbc:mysql://๋ดIpv4์ฃผ์:3306/db๋ช
";
3. docker tomcat ํด๋ ๋ค์ด๊ฐ์ war ํ์ผ ํ์ธํ๊ธฐ, docker mysql ์ ๋ค์ด๊ฐ์ database ๋ง๋ค๊ธฐ
# mysql ๋ค์ด๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
docker exec -it mysql-container bash
mysql -u root -p
# tomcat ๋ค์ด๊ฐ์ war ํ์ผ ํ์ธํ๊ธฐ
docker exec -it tomcat-test /bin/bash
๐ก ํฐ์บฃ ๋ด๋ถ์ JDK ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก Java ๋ฅผ ์ค์นํ ํ์๋ ์์ง๋ง ํฐ์บฃ ํด๋์ ์ ๊ทผํด์ Java ๋ฒ์ ์ ํ์ธํด์ผ ํ๋ค. (Java ๋ฒ์ ์ด war ํ์ผ์ Java ๋ฒ์ ๊ณผ ๋ค๋ฅด๋ฉด ์๋ฌ ๋ฐ์ํ ์ ์๋ค. ๋ฒ์ ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ ๋ก์ปฌ Java ํ๋ก์ ํธ๋ฅผ ๋ค์ด๊ทธ๋ ์ด๋ ํ๊ฑฐ๋ ํฐ์บฃ ๋ด๋ถ์ Java ๋ฅผ ์ ๊ทธ๋ ์ด๋ ํด์ผ ํ๋ค.)
4. ์ค์ ํ ๋ถ๋ถ๊น์ง ์ปจํ ์ด๋ ์ ์ฅ
docker commit mysql-container mysql
docker commit tomcat-test tomcat
5. docker-compose ๋ง๋ค๊ธฐ
๐ก ์ด๋ฒ์ ์์ ํ ๋์ปค ์ด๋ฏธ์ง ๋ฐ ์ปจํ ์ด๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋จํ๊ฒ ์๊ฐํ๋ฉด ์ด๋ ๋ค. ๋จผ์ mysql:latest ์ด๋ฏธ์ง์ tomcat:9 ์ด๋ฏธ์ง๋ฅผ pull ๋ฐ์์ ๊ฐ๊ฐ 3306 ํฌํธ์ 8080 ํฌํธ๋ก test_mysql ๊ณผ test_tomcat ์ปจํ ์ด๋๋ฅผ ์คํํ๋ค. ์ปจํ ์ด๋ ๋ ๊ฐ๊ฐ ์ ์ ์๋ํ๊ณ web ์ด ์ ์์ ์ผ๋ก ์คํ๋๋ ๊ฒ์ ํ์ธํ ๋ค์ docker compose ๋ฅผ ์์ฑํ์๋ค. docker compose ๋ ์ฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ํ๋์ ์ปจํ ์ด๋์ ๋ด๊ณ ํ๋์ ์ปจํ ์ด๋ ๋ด์์ ์คํ๋๋ ๊ฐ๊ฐ์ ์ด๋ฏธ์ง์ ๋ํ ์ปจํ ์ด๋๋ฅผ ์ ์ดํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
๐ก VSCode ์ ํ๋ก์ ํธ ํด๋ ์์ฑ
๐ก mysql ์ ์ํ database ํด๋ ์์ฑ - database/script ์ sql ์ฟผ๋ฆฌ๋ฌธ ํ์ผ ์์ฑ
๐ก tomcat ์ ์ํ tomcat ํด๋ ์์ฑ - tomcat/webapp ์ .war ํ์ผ ์ถ๊ฐ
๐ก docker-compose.yml ์์ฑ
version: "3.7"
services:
webapp:
build: tomcat
ports:
- 8080:8080
environment:
MYSQL_HOST: database
MYSQL_USER: root
MYSQL_PASSWORD: ๋น๋ฒ
MYSQL_DB: db๋ช
database:
build: database
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: ๋น๋ฒ
MYSQL_DATABASE: db๋ช
๐ก docker compose ์์๋ services ๊ฐ container ์ ๊ฐ์ ์๋ฏธ๋ก ์ฌ์ฉ๋๊ณ , services ํ์์ compose ๋ก ์คํํ๋ ค๋ ์ปจํ ์ด๋๋ค(์ด๋ฏธ์ง)์ ์์ฑํ๋ค.
๐ก tomcat ์ปจํ ์ด๋์ ์ด๋ฆ์ผ๋ก webapp์, mysql ์ปจํ ์ด๋์ ์ด๋ฆ์ผ๋ก database ๋ผ๊ณ ์ง์ ํ๋ค.
๐ก build: tomcat ์ด๋, tomcat ์ปจํ ์ด๋์ธ webapp ์ ์คํํ๊ธฐ ์ํด tomcat ํด๋์ Dockerfile ์ tomcat ์ ํ๊ฒฝ ์ค์ ์ ์์ฑํ๊ณ ๋น๋ํ tomcat docker image ๋ฅผ ์ง์ ํ๋ค๋ ์๋ฏธ์ด๋ค.
๐ก build: database ๋, mysql ์ปจํ ์ด๋์ธ database ์ ์คํํ๊ธฐ ์ํด database ํด๋์ Dockerfile ์ mysql ์ ํ๊ฒฝ ์ค์ ์ ์์ฑํ๊ณ ๋น๋ํ mysql docker image ๋ฅผ ์ง์ ํ๋ค๋ ์๋ฏธ์ด๋ค.
๐ก docker-compose.yml ์๋ ๋ฒ์ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ด๋, ๋น๋ฒ, ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ช , ํฌํธ ๋ฒํธ, ๋น๋ํ ์ด๋ฏธ์ง ๋ฑ์ ๊ด๋ จํ ๊ฒ(๊ธฐ๋ณธ ํ๊ฒฝ์ค์ )์ ์์ฑํ๊ณ , ๋น๋ํ tomcat ๊ณผ database ์ ํด๋ ํ์์ ์๋ Dockerfile ์๋ ์ค์ docker terminal ์์์ ์ฝ๋๋ก ํด๊ฒฐํด์ค์ผ ํ๋ ๊ฒ๋ค(์ด๋ฏธ์ง pull, ํ์ผ ์ถ๊ฐ, sql ์ฟผ๋ฆฌ๋ฌธ ์์ฑ, ์ปจํ ์ด๋ ์คํ๊ณผ ๊ด๋ จ๋ ๊ฒ ๋ฑ) ์ ์์ฑํ๋ฉด ๋๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
๐ก ports ๋ก ๊ฐ๊ฐ ์คํํ ํฌํธ๋ฅผ ์ง์ ํ๋ค.
5. docker-compose ์คํ
6. docker-compose ํ๋ก์ ํธ ์ ์ฅ
docker-compose ํ๋ก์ ํธ๋ฅผ build ํ๋ฉด docker-compose ํด๋ (newtest ์ปจํ ์ด๋) ๋ด์์ ์คํ๋๋ newtest_webapp ๊ณผ newtest_database ์ ์ด๋ฏธ์ง๋ง ๊ฐ๊ฐ ๋ง๋ค์ด์ง๊ณ ๋ ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ง newtest ์ ์ด๋ฏธ์ง๋ ๋ง๋ค์ด ์ง์ง ์๋๋ค. docker image merge ํค์๋๋ก ๊ฒ์ํด๋ณด๋ ๋ค๋จ๊ณ ๋น๋๋ผ๊ณ ํด์ dockerfile ํ๋์ ์ฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ๋ค ๋ฃ๊ณ ํ๊ฒฝ์ค์ ํด์ค ๋ค์ ๋น๋ํ๋ ๋ฐฉ๋ฒ์ด ์์๋๋ฐ ๊ทธ๊ฒ๋ merge ์ ๊ฐ๋ ์ ์๋ ๋ฏ ํ๋ค. ์ฐ์ ํ๋ผ๋๋๋ก ๋ฐ๋ผ ํด๋ดค๋๋ฐ ๋ญ๊ฐ ์ ์๋๋ค.
๊ธฐ์กด์ ๋ฐ๋ก ์ค์ ํด ๋ tomcat ๊ณผ mysql ์ ํ๋์ dockerfile ์ ๋ค ์์ฑํด์ ์ด๋ฏธ์ง push ํ๋ ๊ฒ ๊น์ง๋ ๋๋ค. docker hub ์ ๋ ํ์งํ ๋ฆฌ ํ๋๋ฅผ ๋ง๋ค์ด์ ๊ฑฐ๊ธฐ์ docker compose ์ด๋ฏธ์ง๋ฅผ push ํ๊ณ ์คํ์ ํด๋ดค์ผ๋ ์๋ฌ๊ฐ ๋ด๋ค.
๋ก๊ทธ๋ฅผ ๋ณด๋๊น tomcat ์ ๋์ค์ง๋ ์๊ณ mysql ๊ด๋ จ ๋ก๊ทธ๋ง ๋ฌ๋ค. ๊ทธ๋ฆฌ๊ณ db01 ์ ๋ชป์ฐพ๋ ๊ฑธ๋ก ๋ด์๋ mysql user ๊ณ์ ๋ฌธ์ ๋ ์๋ ๊ฑฐ ๊ฐ๋ค. ๋ค๋จ๊ณ ๋น๋์ ๋ํ ๊ฑธ ๋ ์ฐพ์๋ณด๊ณ ๋ค์ ํด๋ด์ผ์ง.. ์ผ๋จ docker ๊ฐ์ด๋ ๋ฌธ์์๋ ๋์ค๋ฏ์ด docker-compose ํ๋ก์ ํธ๋ฅผ github ์ ์ฌ๋ ค๋๊ณ ํด๋ก ๋ฐ์์ ์ฐ๋ ํํ๋ก ๋ง๋ค๊ธฐ๋ก ํ๋ค. github ์ docker-compose ๋ฅผ ์ ๋ก๋ํ๋ ๊ฒ์ ์ฝ๋ค. ๋ ํ์งํ ๋ฆฌ ํ๋๋ฅผ ๋ง๋ค์ด์ ๊ฑฐ๊ธฐ์ docker-compose ํด๋๋ฅผ ์ถ๊ฐํ๊ณ push ํ๋ฉด ๋๋ค.
๐ docker-compose ์ค์ต ๊นํ๋ธ : https://github.com/qwa310/DockerCompose
GitHub - qwa310/DockerCompose: Docker Compose ์ค์ต
Docker Compose ์ค์ต. Contribute to qwa310/DockerCompose development by creating an account on GitHub.
github.com
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
'Server > Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker] Docker ๋ช ๋ น์ด ์ ๋ฆฌ (0) | 2021.10.10 |
---|---|
[Docker] SpringBoot/MyBatis ํ๋ก์ ํธ Docker์์ ์คํํ๊ธฐ (0) | 2021.10.06 |
[Docker] Ubuntu ์์ Docker Compose ์คํ (with Github, VirtualBox) (0) | 2021.10.01 |
[Docker] Docker ๊ฐ์ด๋ ๋ฐ๋ผํด๋ณด๊ธฐ (0) | 2021.10.01 |
[Docker] Docker ์ค์น ๋ฐ ์์ํ๊ธฐ (0) | 2021.09.30 |
๋๊ธ