카테고리 없음

앱/웹 컨테이너와 데이터베이스 컨테이너 실행시키는 방법

meomdms 2024. 12. 3. 17:27

앱 컨테이너를 실행시키기 위한 도커 이미지가 있어야 함.

도커 이미지가 없다면 만들어서 빌드해야되는데 빌드하기 전 꼭 도커 로그인을 해야함

나는 프로젝트 루트폴더에서

docker build -t ci-cd_caniuseit:latest . 

이 명령어를 통해 도커 이미지를 빌드했다. 도커이미지이름은 ci-cd_caniuseit 임

 

PS C:\canIuseIt_CICD\CI-CD_canIuseit> docker build -t ci-cd_caniuseit:latest . ERROR: error during connect: Head "http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/_ping": open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.

 

근데 첨에 이런 에러가 뜸

나는 데스크톱 환경에서 하기때문에 Docker Desktop이 제대로 실행되고 있지 않아 발생한 오류였음. 제대로 도커를 실행한 뒤 다시 명령어를 입력하니

 

 

이미지 빌드 성공함

docker run --name [CONTAINER_NAME] --network [NETWORK_NAME] -p 3000:3000 [IMAGE_NAME]

docker run --name web-container --network caniuseit-network -p 3000:3000 ci-cd_caniuseit

실행하려고 하니 호스트를 찾을 수 없다며 에러가 뜸. 데베 컨테이너를 실행시킨 뒤 해야될 것 같다

 

 

데베 컨테이너 실행시키는 방법

 

 

 

우선 .env파일에 있는 데이터 베이스 호스트 이름을 내가 쓸 데베 컨테이너 이름으로 바꿔준다.

 

DATABASE_DIALECT=mysql
DATABASE_NAME=canIuseit_db
DATABASE_USERNAME=root
DATABASE_PASSWORD=cancanii!
DATABASE_HOST=[CONTAINER_NAME] # 컨테이너 이름
...

 

caniuseit-database
난 이걸로 함. 이렇게 이름을 지정하니 실행중인 컨테이너를 확인 할 때 직관적으로 알 수 있어서 좋더라
 

 

앱 컨테이너와 데이터베이스 컨테이너는 같은 도커 네트워크에 속해있어야함

 

docker network create [NETWORK_NAME]

이 명령어를 통해 도커 네트워크를 생성해준다.

난 네트워크 이름 caniuseit-network 이렇게 지정함

docker network create caniuseit-network
9e5656c2e9068435f88a5fa18f295b9e1259e62bb08de31ecc8cd92d3b0390d2 ->이게 네트워크 .. 아이디? 인가?

 

암튼 일케 해서 이제 데베 컨테이너 실행시키려고 함

docker run --name caniuseit-database --network caniuseit-network -e MYSQL_ROOT_PASSWORD=cancanii! -e MYSQL_DATABASE=canIuseit_db -p 3306:3306 mysql:8

 

 

음 일단 보니 mysql:8이 없어서 pull 받아준 것 같고

이 오류는 호스트의 3306 포트가 이미 다른 서비스 또는 컨테이너에서 사용 중이기 때문에 발생합니다. 즉, MySQL을 실행하려는 호스트 포트(3306)가 충돌하고 있는 상황

 

netstat -ano | findstr :3306

이 명령어를 통해 현재 호스트에서 어떤 프로세스가 3306포트를 사용 중인지 확인함

 

6664 프로세스ID가 실행중이래

6664는 먼데?

mysqld.exe래

이걸 죽이고 3306 포트를 사용하려고 했는데

죽여지지가 않음...

 

그래서 그냥 3307 포트로 실행하려고 하니 caniuseit-database 컨테이너는 이미 존재하는 컨테이너라 충돌이 일어난대

 

함 보니까 컨테이너가 만들어지긴 했는데 실행은 안 되는 상태라 걍 docker rm caniuseit-database 명령어로 지워버림

 

그러고 다시 포트번호 3307로 연결하는 명령어를 실행해서 데베 컨테이너 실행에 성공함

docker run --name caniuseit-database --network caniuseit-network -e MYSQL_ROOT_PASSWORD=cancanii! -e MYSQL_DATABASE=canIuseit_db -p 3307:3306 mysql:8

성공!!

 

 

 

이 명령어를 통해 mysql에도 접근가능

 

위에서 이미 웹컨테이너를 만들었으므로 docker start web-container통해 웹컨테이너 실행 성공!!

 

엥 근데 보니까 아까 에러난 거 해결이 안 돼서 브라우저로 localhost 연결 시도하니 연결에 실패함

 

 

기존 웹컨테이너 지우고 아예 컨테이너 만들 때부터 같은 도커 네트워크에 속하도록 명령어를 한꺼번에 입력했다

 

왜냐면 원인은 네트워크에 데베 컨테이너만 속해있어서 연결이 안 되는 거였음

 

 

암튼 연결되고 나서 브라우저에 로컬호스트:포트번호 입력하면 서비스가 정상작동 하는 걸 확인할 수 있음