Docker 에서 각 컨테이너들은 독립적인 상태로 존재합니다.
MySQL을 이미지로 가져오고
docker pull mysql
그냥 Mysql 컨테이너를 생성하면
docker run --name dbmysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=0000 -e MYSQL_DATABASE=ourproject -e MYSQL_USER=userid -e MYSQL_PASSWORD=0000 -d mysql
docker ps ( 실행중인 컨테이너 확인 )
mysql 컨테이너가 생성되어 있습니다.
컨테이너에 접속해서
docker exec -it 컨테이너이름 /bin/bash
mysql -u root - p 로 접속, mysql을 사용할 수 있습니다.
Spring 프로젝트 컨테이너도, DB 가 사용되지 않았다면 그냥 독립적으로는 실행시킬 수 있습니다.
즉, 각각의 Container 들은 독립적으로 하나하나씩은 잘 돌아갑니다.
하지만 두 Container 사이에 연동이 필요할 경우,
즉, Spring 프로젝트에서 MySQL DB를 연동해서 사용하고 있을 경우
[ Spring 프로젝트 컨테이너 ] <======> [ Mysql 컨테이너 ]
이 둘 사이를 연결시켜줄 연결고리가 필요합니다.
크게 두 가지 방법이 있는 것 같습니다.
(1) docker-compose 사용
(2) network 사용
docker-compose 가 여러가지 컨테이너를 연결하고 설정하는데 훨씬 강점이 있어 많이 사용되고 있습니다.
이 글에서는 간단히 network 를 사용해 spring 프로젝트 컨테이너와 mysql 컨테이너만을 연결하는 방법을 정리했습니다.
결론적으로는 network 를 하나 생성해두고,
연결시키고자 하는 각 컨테이너에서 이미지로 컨테이너를 생성할 때
이 네트워크 정보를 포함해서 컨테이너를 생성해줍니다.
1. network 생성
docker network create springboot-mysql-network
네트워크 확인
docker network ls
2. 네트워크 정보 포함 mysql 컨테이너 생성
docker run --name dbmysql -p 3306:3306 --network springboot-mysql-network -e MYSQL_ROOT_PASSWORD=0000 -e MYSQL_DATABASE=ourdb -e MYSQL_USER=userid -e MYSQL_PASSWORD=0000 -d mysql
위와 같이,
--network 생성해둔네트워크이름
정보를 추가
-d ( 백그라운드 실행 ) 추가
하여 컨테이너를 생성해줍니다.
( 생성해둔 네트워크와 연결된 상태의 / 백그라운드 실행되는 mysql 컨테이너 )
3. 네트워크 정보 포함 spring 프로젝트 컨테이너 생성
docker run -p 8080:8080 --name springboot-mysql --network springboot-mysql-network -d 프로젝트이미지ID
마찬가지로,
--network 생성해둔네트워크이름
정보를 추가
-d ( 백그라운드 실행 ) 추가
컨테이너를 생성해 줍니다.
( 생성해둔 네트워크와 연결된 상태의 / 백그라운드 실행되는 spring 프로젝트 컨테이너 )
이렇게 하면
Spring 프로젝트 컨테이너 ======= 생성해둔 네트워크 ======= Mysql 컨테이너
생성해둔 네트워크를 연결고리로, 두 컨테이너를 연결할 수 있고
Spring 프로젝트에서 Mysql DB 를 연동하여 사용할 수 있게 됩니다.
Docker 는 간편하고 편리한 기능들을 제공해 주지만
docker-compose 를 이용한 컨테이너 연동,
jenkins 배포 자동화를 위한 docker in docker 등
깊게 학습해야할 부분도 많이 있는 것 같습니다.
여러번 배포를 시도해 보고, 직접 사용해 보면서 익숙해져 나가야 겠습니다.
'Back to the Docker' 카테고리의 다른 글
[ Docker ] 도커로 Spring 프로젝트 AWS 배포하기 ( DockerHub ) (0) | 2022.12.28 |
---|---|
[ Docker ] docker 란 (0) | 2022.12.28 |