Docker/Docker Compose 사용법 익히기

[Docker Compose 기본] 4. docker compose 주요 명령어 익히기(2)

Fletcher 2024. 8. 17. 22:56

 

반갑습니다!

실습을 위해서, 저번 시간에 작성한 docker-compose.yml 파일에

몇 가지 내용을 추가해서 수정하고

 

해당 내용들이 무엇을 의미하는지 잠시 살펴보겠습니다 ^^

 

 

 

저번 포스트에서 작성한 내용은 services 중에서 db 이하의 내용이었습니다

이번 실습에서는 하나의 내용을 추가하였는데요

app 이하의 내용들입니다 ^^

 

위 docker compose 파일을 실행시키면 총 두 개의 컨테이너가 실행이 됩니다

새로운 키워드들에 대해서 잠시 살펴보겠습니다

 

 

① build 옵션

app 이하의 내용을 보면 먼저 build라는 옵션이 있는데요

이미지를 Dockerfile 기반으로 작성시 사용이 됩니다

컨테이너를 실행할 때 아예 이미지 빌드 작업부터 시작해서 컨테이너를 실행하는거죠 ^^

 

이 명령어에는 두 가지 내용을 꼭 기재해줘야 하는데요

(1)context : Dockerfile이 있는 디렉토리입니다

(2)dockerfile : 해당 Dockerfile의 파일명입니다

 

 

②links 옵션

컨테이너 내부에서 다른 컨테이너에 접속하고 싶을 때 사용합니다

위 코드에서는 db라는 컨테이너에 접속할 때,

mysqldb라는 이름으로 접속한다는 의미입니다 ^^

 

참고로, 캡쳐 이미지와 같이 콜론을 붙여서

별도의 내부 네트워킹 이름을 지정하는 작업을 하지 않아도

docker-compose.yml 파일에 기재된 각각의 컨테이너 이름으로

각 컨테이너 내부에서 접속이 가능합니다 ^^

 

 

③container_name 옵션

컨테이너의 이름을 설정할 때 사용합니다

 

 

④depends_on 옵션

만약에 db 컨테이너가 실행되기 전에

app 컨테이너가 먼저 작업이 완료되어 실행된 뒤

db 컨테이너에 내부 네트워킹을 시도한다고 가정해보겠습니다

 

그럼 db 컨테이너가 온전히 작동되기 이전이기 때문에 에러가 생길 것입니다

그럼 db 컨테이너가 생성된 이후에 app 컨테이너가 작업을 수행하도록

이 순서를 정해줄 수 없을까요?

 

이 때 사용하는 것이 바로 depends_on 옵션이 되겠습니다 !

 

 

조금 더 풀어서 설명해보겠습니다 ^^

Docker Compose를 사용해서 여러 컨테이너를 실행할 경우

컨테이너가 실행을 시작하는 시점은,

컨테이너의 조건마다 미묘하게 다를 수 있습니다

 

따라서 특정 컨테이너가 실행되자마자

바로 다른 컨테이너에 접속하도록 코드를 작성하면,

경우에 따라서 접속 불가 에러가 생길 수도 있습니다 ^^

이를 위해서 depends_on 옵션이 존재합니다

 

 

하지만, depends_on이 모든 것을 해결해주는 만능은 아닙니다 ^^;;

 

해당 옵션은 컨테이너의 실행 순서만 제어할 뿐,

컨테이너가 Ready 상태가 될 때까지를 명확하게 제어하고 관리하는 것은 아니므로,

상황에 따라서 depends_on 옵션이 사용자의 의도대로 동작하지 않을 수 있습니다

 

예를 들자면, app 컨테이너는 앞서 준비할 작업이 별로 없기 때문에

빠르게 실행이 될 수도 있지만

db 같은 경우에는 초기화 작업에 있어 수행할 과정이 여러개가 있다면

db는 초기화 작업 중인데 app이 db에 접속하려고 하면

마찬가지로 내부 네트워킹에 대해 오류가 발생하겠죠 ^^;;

 

각 컨테이너 설정마다 실제 프로세스가 실행되는 시점이 다를 수도 있기 때문입니다!

 

 

 

 

이번 포스트까지 해서

docker compose 파일 작성시 사용되는

주요 명령어와 옵션에 대해서 얼추 살펴보았습니다 ^^

 

다음 포스트에서는 해당 docker compose 파일을 이용하여

실제 실습을 진행해보고, docker-compose 관련한 나머지 명령어들도 마저 알아보겠습니다 ^^!