====== 도커컴포즈 사용법====== * description : 도커컴포즈 사용법 * author : 치킨5분컷 * email : hgkim@repia.com * lastupdate : 2022-11-22 Tue \\ ===== 사전에 설치가 필요한 프로그램 ===== * 도커 * 리눅스 배포판(이 글은 우분투 22.04 버전 사용.) ===== 아래 명령어들은 어디서 쳐야하나?===== * 사전에 설치한 리눅스 배포판을 실행하여 이용한다. ===== 도커컴포즈란? ===== * 도커 컴포즈는 하나의 설정파일로 여러 컨테이너를 운용하게 할 수 있게 해주는 도구 중 하나. * 여러 개의 컨테이너를 코드(YAML 파일)를 통해서 정의하고 실행하는 역할을 하며, 설정 파일인 `yaml`을 기반으로 동작. * 재사용 가능 =====YAML (YAML Ain’t Markup Language)란===== * 구조화 데이터나 오브젝트를 문자열로 변환하기 위한 데이터 형식의 한 종류. * Space를 사용한 들여쓰기를 통해 데이터 계층을 표시. ★** 주의사항 - tab키 절대 사용 금지. 들여쓰기의 크기가 반드시 동일 해야 하기때문. 어길시 오류발생.** =====docker-compose.yml 특징===== - `YAML` 파일은 도커컴포즈에 관한 설정을 담음. - 확장자로 `.yml`, `.yaml`의 형식을 사용. - **key / value** 구조로 구성. - 대소문자를 구분. - 콜론(:) 뒤에는 한 칸을 띄고 사용. ex)`image: centos:7.9.2009` - 대시(-)로 복수의 값을 나열. - 주석 표기는 해시(#)를 이용. ★** 주의사항 - 콜론(:) 뒤에 단어 붙여쓰기 금지. 인식 불가로 인한 오류발생.** =====docker compose  파일의 구조===== =====Top level 4가지(들여쓰기 금지)===== version: () - 지원 버전을 확인 services: (docker container) - 컨테이너의 설정을 확인. volumes: (docker volume) - 도커 볼륨에 대한 설명. networks: (docker network) - 도커 네트워크에 대한 설명. 이렇게 크게 4가지를 잡고 도커컴포즈 파일을 생성. * 도커 버전에 따라 지원 가능 버전이 달라지므로 확인 필요. [[https://docs.docker.com/compose/compose-file/compose-versioning/|지원 버전 확인 사이트]] =====compose file 버전별 차이===== 사용할려면 `docker-compose.yml` 상단에 사용할 compose file format의 버전을 명시. **버전별 특징** - Version 1에서는 버저닝을 생략. * networking이 지원되지 않음 * 모든 컨테이너는 기본 bridge 네트워크에 배치되고 해당 IP 주소의 다른 모든 컨테이너에서 연결 가능 * 컨테이너 간 검색을 활성화하려면 links를 사용 - Version 2부터 마이너 버전(2.x)까지 설정해야 함. (생략 시 2.0으로 적용된다.) * yml 문서에 버전명을 마이너 버전까지 작성 ex) 2.1 * 모든 각각의 서비스는 **services 아래에 다중 컨테이너로 구성** * volumes에 Named volumes 생성 가능 * networks에 Network 생성 가능 * 기본적으로 **모든 컨테이너**는 **애플리케이션 전체의 기본 네트워크에 연결**되며 서비스 이름과 동일한 호스트 이름에서 검색 가능하다. 이것은 링크가 거의 불필요하다는 것을 의미한다. - Version 3 은 도커 스웜과 같이 사용되도록 디자인됨. =====Docker Compose 명령어===== * **docker-compose.yaml 파일이 위치한 디렉토리 에서 실행 (반드시)** * 특정 파일의 위치를 정의. 1. docker-compose up # 서비스와 관련된 컨테이너 생성 그리고 시작 2. docker-compose down # 서비스와 관련된 컨테이너 종료 후 제거 3. docker-compose start/stop/restart # 서비스 관련 컨테이너 시작 / 종료 / 재시작 4. docker-compose kill # 실행 중인 컨테이너에 SIGKH 시그널을 통해서 강제 종료 5. docker-compose pause/ unpause # 컨테이너 정지 /재가동 6. --build # 컨테이너를 생성하기 전에 이미지를 빌드한다. =====Docker Compose 명령어 실행 옵션===== | -d | 백그라운드 실행 | | --no-deps | 링크 서비스 실행하지 않음 | | --build | 이미지 빌드 | | -t | 타임아웃을 지정(기본 10초) | =====Docker Compose.yml 파일 내 사용가능한 옵션===== | 구분 | 내용 | 명령어 순위 | | version : | 버전 지정 | 최상위 | | services : | 서비스 정의 | 최상위 | | volumes : | 컨테이너에 볼륨 Mount | 최상위 | | build : | 빌드 환경 설정 | service의 하위 | | context : | Dockerfile 이 있는 디렉토리 지정 | build의 하위 | | dockerfile : | Dockerfile의 이름이 다를경우 설정 | build의 하위 | | image : | 이미지 지정 | build의 하위 | | command : | container 에서 작동하는 명령 | service의 하위 | | entrypoint : | container 에서 작동하는 명령 | service의 하위 | | environment : | 컨테이너 안 환경변수 설정 | service의 하위 | | container_name : | 컨테이너 이름 설정 | service의 하위 | | links : | 다른 컨테이너와 연결 | service의 하위 | | ports : | Host 에 컨테이너가 공개하는 포트지정 | service의 하위 | | expose : | 컨테이너끼리 공개하는 포트 지정 | service의 하위 | =====도커컴포즈를 통한 컨테이너 생성 방법===== 1. hgkim@LAPTOP-266L93S4:/usr/bin$ sudo mkdir DockerCompose # Docker가 있는 디렉토리에 DockerCompose디렉토리 생성. 2. hgkim@LAPTOP-266L93S4:/usr/bin/DockerCompose$ sudo vi Dockerfile # DockerCompose디렉토리로 이동후 도커파일 생성 및 작성. FROM 만들 이미지 파일 (이미지이름:버전) # FROM 필수. 추가적으로 필요한 명령어 3. hgkim@LAPTOP-266L93S4:/usr/bin/DockerCompose$ sudo vi docker-compose.yml # DockerCompose디렉토리에 도커컴포즈 파일 생성 및 작성. ### docker-compose.yml version: "3.9" #버전 services: #컨테이너 설정 apserver: #만들 서비스 이름 build: #변경사항이 많아 Dockerfile을 빌드해야할 경우 이용 context: . #Dockerfile의 위치. '.'은 현재 디렉토리 ports: #Port포워딩할 포드범위 - '22:22' - '7100-7110:7100-7110' - '80:80' - '8080:8080' user: root privileged: true #기본적으로는 Unprivileged모드로 실행되며, 이 모드에서는 시스템 주요 자원에 접근할 수 있는 권한이 부족하여, 특정시스템 자원에 접근하기 위해 모드 변경. container_name: rsa_server #생성될 컨테이너 이름. 4. docker-compose up -d --build # 도커컴포즈 실행시 도커파일을 빌드 후 백그라운드 실행) 5. docker exec -it 컨테이너명 /bin/bash # 컨테이너 실행. ===도커컴포즈와 도커파일을 통한 활용 방법=== * 검색솔루션에 사용할 재사용 가능한 적절한 OS 컨테이너를 만들 수 있음. * 검색솔루션 설치(도커 기반) 과정을 줄일 수 있음. === 도커파일 사용법 === * [[wiki:3party:docker:도커파일_사용법|도커파일 설정 방법]] {{tag>치킨5분컷 도커컴포즈 도커컴포즈_명령어 도커컴포즈_컨테이너}}