[Docker Compose 기본] 4. docker compose 주요 명령어 익히기(2)
반갑습니다!
실습을 위해서, 저번 시간에 작성한 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 관련한 나머지 명령어들도 마저 알아보겠습니다 ^^!