도커 yaml 파일은 이미지로 컨테이너를 실행시키는 과정없이 docker-compose와 함께 사용하면 간단히 컨테이너를 띄울 수 있다. 또한 다중 컨테이너를 띄울때 사용되는 파일이다.
docker-compose.yaml 파일의 구조를 알아보자
1. version
2. services
서비스명1: #어플리케이션 설정값 정의
서비스명2: #어플리케이션 설정값 정의
3. networks
네트워크 설정, 미지정 시 자동 생성
4. volumes
볼륨 설정
위에서 아래로 처리되는 직렬 구조이다. 일반적으로 가장 먼저 실행되어야 하는 애플리케이션을 먼저 작성하고, 이와 의존성을 갖는 데이터베이스 및 하위 애플리케이션을 작성한다. 그 다음 전체 애플리케이션에 필요한 네트워크, 볼륨, 캐시 등의 기반 환경까지 야믈 코드로 모두 설정할 수 있다. 이러한 기능 때문에 서비스 전체를 yaml 파일로 편리하게 작성할 수 있는 것이다.
version
첫줄은 버전을 명시한다. 컴포즈의 버전을 의미하고 도커 엔진과 호환을 고려하여 버전을 작성한다. 도커 도큐먼트를 참고하면 된다!
보통 컴포즈 도구가 구버전이면 에러가 날 수 있다. 또한 야믈파일은 들여쓰기가 아닌 띄어쓰기로 부모-자식 관계를 나타낸다. 굉장히 민감하기 때문에 잘못되면 파싱이 안된다.
services
도커 컴포즈를 통해 실행할 서비스를 정의한다. 도커 컴포즈는 컨테이너 대신 서비스 개념을 사용한다. 상위의 version 명령과 동일 레벨로 작성되며 다중 컨테이너 서비스 실행을 목적으로 하기 때문에 복수형으로 작성되는 것에 유의한다. 도커 컴포즈로 함께 실행된 모든 서비스는 docker-compose 명령을 통해 통합 관리된다.
services 하위에는 실행될 컨테이너 서비스를 작성하고, 하위 레벨에 도커 명령 실행과 유사하게 컨테이너 실행에 필요한 옵션을 작성하면 된다.
ex) services:
myweb:
image: nginx:lastest
mydb:
image: mariadb:10.4.6
만약 이미지 개발없이 배포 이미지를 사용할 것이면 이렇게 작성하고 그것이 아니고 Dockerfile을 작성하여 이미지를 개발할 경우 미리 빌드해서 이미지명:태그를 명시하거나 build 옵션을 사용하면 Dockerfile 빌드와 컴포즈 실행이 동시에 이루어진다. built 옵션에는 Dockerfile의 경로를 지정하면 된다. (파일명이 Dockerfile이 아닌경우 찾지 못하니 그냥 Dockerfile로 파일 이름을 하자)
networks
도커에서는 리눅스의 veth를 이용해서 가상 네트워크 인터페이스를 사용한다. 컨테이너 마다 ip와 포트가 존재한다. 기존 컨테이너는 아무런 설정을 하지 않는다면 호스트에서만 접근 가능하다. 이러한 점을 극복하고 외부에서도 컨테이너에 접속이 가능하도록 하는것이 veth이다.
도커는 172.17.0.x 주소 부터 순차적으로 ip주소를 부여한다. 127.0.0.1은 루프백 주소로 자기 자신에게 보내는 주소이다. localhost를 입력하면 이 주소로 나에게 요청을 보내는 것이다. 도커에서 네트워크 드라이버는 host와 브릿지 두개를 알면 된다. 호스트는 컨테이너가 호스트 네트워크 자체를 사용하게 하는 것이다. 반면 브릿지는 컨테이너와 호스트의 포트를 연결하여 네트워크를 제공한다.
networks에 아무런 옵션을 지정하지 않으면 자체 기본 네트워크가 자동 생성된다. 최상위 레벨에 networks 지정 시 해당 이름의 네트워크가 생성되고, 대역은 172.x.x.x로 자동할당되며 기본 드라이버는 브릿지로 지정된다.
volumes
컨테이너는 삭제되면 그 안에 데이터도 모두 사라진다. 그렇기 때문에 볼륨을 지정하여 로컬에도 같은 파일을 생성하거나 한다. yaml 파일도 이러한 볼륨을 정의할 수 있다. 최상위 레벨에 볼륨을 정의하고, 서비스 레벨에서 볼륨명과 서비스 내부의 디렉터리를 바인드한다. 최상위 레벨에 volumes를 정의하지 않고 서비스 하위 레벨에 호스트의 절대경로와 컨테이너의 디렉터리 경로를 직접 사용하는 바인드 마운트 방식도 가능하다.
도커 컴포즈 명령어
1. docker-compose up : 컴포즈 야믈 코드에 있는 이미지를 이용해 컨테이너 서비스를 실행한다.
-d 옵션 = 백그라운드실해
--build 옵션 = 컨테이너 서비스를 시작하기 전에 이미지를 빌드한다.
--force-recreate = 도커 컴포즈 야믈 코드 및 이미지가 변경되지 않은 경우에도 컨테이너를 다시 생성한다.
-t = 현재 실행 중인 컨테이너를 종료하는 경우, 이 시간을 이용해 타임아웃이 발생한다.
--scale SERVICE=NUM = 컨테이너 서비스의 개수를 지정 수만큼 확장한다.
파일안에서도 충분히 설정할 수 있는 옵션이다.
2. docker-compose down : up 명령과 반대로, 정의된 컨테이너 서비스, 볼륨, 네트워크 모두를 정지시킨후 삭제한다.
--rmi all = 사용된 모든 이미지를 함께 삭제
--volumes(-v) = 도커 컴포즈 파일에 정의한 볼륨도 삭제
3.docker-compose stop 서비스명: 멀티 컨테이너 서비스 중 특정 컨테이너를 중지시킬 때 사용한다.
4. docker-compose start 서비스명 : 정지된 컨테이너 서비스를 실행한다.
5. docker-compose logs : logs는 docker-compose up -d로 실행한 경우 화면에 어플리케이션 로그를 출력해 준다. 이때 -f 옵션을 사용하면 접근 로그를 계속 출력하게 된다.
6. docker-compose ps : 도커 컴포즈에 정의된 모든 서비스 컨테이너 목록을 조회한다.
※ docker-compose 명령은 야믈 파일이 있는 디렉터리에서 실행해야 한다.
7. docker-compose config : 도커 컴포즈 야믈 파일에 설정을 확인할 때 사용한다.
8. docker-compose pause : 어플리케이션 컨테이너를 일시정지한다.
9. docker-compose unpause : 일시 정지된 컨테이너 서비스를 다시 동작시킨다.
10. docker-compose port 서비스: 컨테이너 서비스의 공개된 포트 정보를 확인한다.
'기타' 카테고리의 다른 글
swagger 403 에러응답 (0) | 2024.11.28 |
---|---|
Restful 하구마잉 (1) | 2024.10.16 |
정보처리기사 자격증 후기(필기, 실기 난이도) (1) | 2024.08.19 |