본문 바로가기
docker & kubernetes

컨테이너 사용법 9 | Docker&Kubernetes 학습 32

by 그갸거겨 2024. 12. 14.
728x90
반응형

컴포즈 파일(YAML 형식)의 작성 요령

  • 첫 줄에 도커 컴포즈 버전을 기재
  • 주 항목 services, networks, volumes 아래에 설정 내용을 기재
  • 항목 간의 상하 관계는 공백을 사용한 들여쓰기로 나타낸다.
  • 들여쓰기는 같은 수의 배수만큼의 공백을 사용한다.
  • 이름은 주 항목 아래에 들여쓰기한 다음 기재한다.
  • 컨테이너 설정 내용은 이름 아래에 들여쓰기한 다음 기재한다.
  • 여러 항목을 기재하려면 줄 앞에 '-'를 붙인다.
  • 이름 뒤에는 콜론(:)을 붙인다.
  • 콜론 뒤에는 반드시 공백이 와야한다.(바로 줄바꿈하는 경우는 예외)
  • # 뒤의 내용은 주석으로 간주된다.
  • 문자열은 작은따옴표(') 또는 큰따옴표(")로 감싸 작성한다.

 

컴포즈 파일의 항목 정리

  • 주 항목
항목 내용
services 컨테이너를 정의한다.
networks 네트워크를 정의한다.
volumes 볼륨을 정의한다.
  • 자주 나오는 정의 내용
항목 docker run 명령어의 해당 옵션 또는 인자 내용
image 이미지 인자 사용할 이미지를 지정
networks --net 접속할 네트워크를 지정
volumes -v, --mount 스토리지 마운트를 설정
ports -p 포트 설정
environment -e 환경변수 설정
depends_on 없음 다른 서비스에 대한 의존관계를 정의
restart 없음 컨테이너 종료 시 재시작 여부를 설정
command 커맨드 인자 컨테이너 시작 시 기존 커맨드를 오버라이드
container_name --name 실행할 컨테이너의 이름을 명시적으로 지정
dns --dns DNS서버를 명시적으로 지정
env_file 없음 환경설정 정보를 기재한 파일을 로드
entrypoint --entrypoint 컨테이너 시작 시 ENTRYPOINT 설정을 오버라이드
external_links --link 외부 링크를 설정
extra_hosts --add-host 외부 호스트의 IP주소를 명시적으로 지정
logging --log-driver 로그 출력 대상을 설정
network_mode --network 네트워크 모드를 설정
  • restart의 설정값
설정값 내용
no 재시작하지 않는다.
always 항상 재시작한다.
on-failure 프로세스가 0 외의 상태로 종료됐다면 재시작한다.
unless-stopped 종료 시 재시작하지 않음. 그 외에는 재시작한다.

 

이제 직접 컴포즈 파일을 작성해보자.
MySQL과 워드프레스 컨테이너를 만드는 컴포즈 파일을 작성하자!

실습내용

생성할 네트워크, 볼륨 및 컨테이너 정보

항목
네트워크 이름 workdpress00net1
MySQL 볼륨 이름 mysql00vol11
워드프레스 볼륨 이름 wordpress00vol12
MySQL 컨테이너 이름 mysql00ex11
워드프레스 컨테이너 이름 wordpress00ex12

정의 내용

  • MySQL 컨테이너(mysql00ex11)의 정의
항목 항목 이름
MySQL 이미지 이름 image: mysql:5.7
사용할 네트워크 networks: wordpress00net1
사용할 볼륨 volumes: mysql00vol11
마운트 위치   /var/lib/mysql
재시작 설정 restart: always
MySQL 설정 environment: ♣이 붙은 항목 설정
MySQL 루트 패스워드 MYSQL_ROOT_PASSWORD myrootpass
MySQL 데이터베이스 이름
MYSQL_DATABASE wordpress00db
MySQL 사용자 이름
MYSQL_USER wordpress00charm
MySQL 패스워드
MYSQL_PASSWORD wcharmpass
  • 워드프레스 컨테이너(wordpress00ex12)의 정의
항목 항목 이름
의존관계 depends_on: mysql00ex11
워드프레스 이미지 이름 image: wordpress
사용할 네트워크 networks: wordpress00net1
사용할 볼륨 volumes: wordpress00vol12
마운트 위치   /var/www/html
포트 번호 설정 port: 8085:80
재시작 설정 restart: always
데이터베이스 관련 정보 environment: ♣이 붙은 항목 설정
데이터베이스 컨테이너 이름 WORDPRESS_DB_HOST mysql00ex11
데이터베이스 이름
WORDPRESS_DB_NAME wordpress00db
데이터베이스 사용자 이름
WORDPRESS_DB_USER wordpress00charm
데이터베이스 패스워드
WORDPRESS_DB_PASSWORD wcharmpass

 

컴포즈 파일을 배치할 경로

항목
컴포즈 파일 배치 경로(Windows) C:\Users\사용자명\Documents\com_folder
컴포즈 파일 배치 경로(macOS) /Users/사용자명/Documents/com_folder
컴포즈 파일 배치 경로(Linux)
/home/사용자명/com_folder

1. docker-compose.yml 파일 생성

  • 메모장 등의 텍스트 에디터를 사용해 컴포즈 파일을 작성하고, Linux는 nano 에디터 등을 사용한다.
  • 파일 이름은 docker-compose.yml로 하고, 앞서 준비한 com_folder에 둔다.

2. 주 항목 작성

  • 버전에 이어 필수 주 항목(services, networks, volumes)을 작성한다. 복수형임에 주의!
docker-compose.yml 작성 내용 1

version: "3"
services:
networks:
volumes:

3. 이름 작성

  • 각각의 주 항목 아래에 줄바꿈한 뒤 들여쓰기 후 이름을 작성한다. 예제에선 공백 두 개로 들여쓰기 했다.
docker-compose.yml 작성 내용 2

version: "3"
services:
  mysql00ex11:
  wordpress00ex12:
networks:
  wordpress00net1:
volumes:
  mysql00vol11:
  wordpress00vol12:

4. MySQL 컨테이너의 정의 작성

docker-compose.yml 작성 내용 3

version: "3"
services:
  mysql00ex11:
    image: mysql:5.7
    networks:
      - wordpress00net1
    volumes:
      - mysql00vol11:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: myrootpass
      MYSQL_DATABASE: wordpress00db
      MYSQL_USER: wordpress00charm
      MYSQL_PASSWORD: wcharmpass
  wordpress00ex12:
networks:
  wordpress00net1:
volumes:
  mysql00vol11:
  wordpress00vol12:

5. 워드프레스 컨테이너의 정의 작성

docker-compose.yml 작성 내용 4

version: "3"
services:
  mysql00ex11:
    image: mysql:5.7
    networks:
      - wordpress00net1
    volumes:
      - mysql00vol11:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: myrootpass
      MYSQL_DATABASE: wordpress00db
      MYSQL_USER: wordpress00charm
      MYSQL_PASSWORD: wcharmpass
  wordpress00ex12:
    depends_on:
      - mysql00ex11
    image: wordpress
    networks:
      - wordpress00net1
    volumes:
      - wordpress00vol12:/var/www/html
    ports:
      - 8085:80
    restart: always
    environment:
      WORDPRESS_DB_HOST: mysql00ex11
      WORDPRESS_DB_NAME: wordpress00db
      WORDPRESS_DB_USER: wordpress00charm
      WORDPRESS_DB_PASSWORD: wcharmpass
networks:
  wordpress00net1:
volumes:
  mysql00vol11:
  wordpress00vol12:

6. 파일 저장

  • 공백의 개수와 콜론의 유무 등 틀리기 쉬운 부분을 다시 점검하고 저장하자.

 

 

도커 컴포즈를 직접 실행해보자.
앞서 작성한 MySQL과 워드프레스 컨테이너를 생성하고 실행한다.

도커 컴포즈 명령어

  • 명령 프롬프트/터미널에서 docker-compose 명령을 사용한다.
  • 가장 자주 사용하는 명령어는 up과 down 두 가지이지만, stop도 가끔 사용한다.

docker-compose up 명령어

  • 컴포즈 파일의 내용에 따라, 컨테이너 및 주변 환경을 생성하는 명령어다.
  • 컴포즈 파일의 경로는 -f 옵션을 사용해 지정한다.
  • 자주 사용하는 명령어 예: docker-compose -f 정의_파일_경로 up 옵션
옵션 내용
-d 백그라운드로 실행
--no-color 화면 출력 내용을 흑백으로 함
--no-deps 링크된 서비스를 실행하지 않음
--force-recreate 설정 또는 이미지가 변경되지 않더라도 컨테이너를 재생성
--no-create 컨테이너가 이미 존재할 경우 다시 생성하지 않음
--no-build 이미지가 없어도 이미지를 빌드하지 않음
--build 컨테이너를 실행하기 전에 이미지를 빌드
--abort-on-container-exit 컨테이너가 하나라도 종료되면 모든 컨테이너를 종료
-t, --timeout 컨테이너를 종료할 때의 타임아웃 설정. 기본은 10초
--remove-orphans 컴포즈 파일에 정의되지 않은 서비스의 컨테이너를 삭제
--scale 컨테이너의 수를 변경

 

docker-compose down 명령어

  • 컴포즈 파일의 내용에 따라, 컨테이너와 주변 환경을 종료 및 삭제하는 명령어다.
  • 볼륨과 이미지는 삭제되지 않고, 컴포즈 파일의 경로는 -f 옵션으로 지정한다.
  • 자주 사용하는 명령어 예: docker-compose -f 컴포즈_파일_경로 down 옵션
옵션 내용
--rmi 종류 삭제 시에 이미지도 삭제한다. 종류를 all로 지정하면 사용했던 모든 이미지가 삭제된다.
local로 지정하면 커스텀 태그가 없는 이미지만 삭제한다
-v, --volumes volumes 항목에 기재된 볼륨을 삭제한다. 단, external로 지정된 볼륨은 삭제되지 않는다.
--remove-orphans 컴포즈 파일에 정의되지 않은 서비스의 컨테이너도 삭제한다.

 

docker-compose stop 명령어

  • 컴포즈 파일의 내용에 따라, 컨테이너를 종료하고, 컴포즈 파일의 경로는 -f 옵션으로 지정한다.
  • 자주 사용하는 명령어 예: docker-compose -f 컴포즈_파일_경로 stop 옵션

docker-compose의 주요 명령어 목록

명령어 내용
up 컨테이너를 생성하고 실행한다.
down 컨테이너와 네트워크를 종료하고 삭제한다.
ps 컨테이너 목록을 출력한다.
config 컴포즈 파일을 확인하고 내용을 출력한다.
port 포트 설정 내용을 출력한다.
logs 컨테이너가 출력한 내용을 화면에 출력한다.
start 컨테이너를 시작한다.
stop 컨테이너를 종료한다.
kill 컨테이너를 강제로 종료한다.
exec 명령어를 실행한다.
run 컨테이너를 실행한다.
create 컨테이너를 생성한다.
restart 컨테이너를 재실행한다.
pause 컨테이너를 일시정지한다.
unpause 컨테이너의 일시정지를 해제한다.
rm 종료된 컨테이너를 삭제한다.
build 컨테이너에 사용되는 이미지를 빌드 혹은 재빌드한다.
pull 컨테이너에 사용되는 이미지를 내려받는다.
scale 컨테이너의 수를 지정한다.
events 컨테이너로부터 실시간으로 이벤트를 수신한다.
help 도움말 화면을 출력한다.

 

 

도커 컴포즈로 실행한 컨테이너의 이름과 스케일링(scale 옵션)

  • 도커 컴포즈로 실행한 컨테이너 역시 도커 엔진을 통해 관리할 수 있다.
    • 단, 도커 컴포즈로 실행한 컨테이너의 이름은 임의로 결정된다.
  • 예를 들어, com_folder에 둔 컴포즈 파일을 사용해서 penguin이라는 이름의 컨테이너를 생성하면
    실제로 도커 컴포즈로 생성된 컨테이너 이름은 com_folder_penguin_1과 같이 폴더 이름과 번호가 붙는다.
    • -f 옵션을 생략했다면, 폴더 이름은 붙지 않는다.
  • 이렇게 폴더 이름과 번호가 붙더라도, 도커 컴포즈를 통해 컨테이너를 지정할 때는
    (컴포즈 파일에 기재된)원래 이름을 사용할 수도 있다.
  • 따라서, 도커 컴포즈로 생성된 컨테이너를 도커 엔진을 통해 다룰 때는
    ps 명령어로 컨티에너 이름을 먼저 확인해야 한다.

  • 같은 구성의 컨테이너를 여러 세트 만들고 싶다면 up 명령어에 --scale 옵션을 붙이면 된다.
  • 명령어 예:
    docker-compose -f C:\..생략..\com_folder\docker-compose.yml up --scale penguin=3

 

실습내용

실습에 사용할 컴포즈 파일

  • 컴포즈 파일은 경로를 지정할 수 있다면 어디에 둬도 무방하다.
    항목
    컴포즈 파일 배치 경로(Windows) C:\Users\사용자명\Documents\com_folder
    컴포즈 파일 배치 경로(macOS) /Users/사용자명/Documents/com_folder
    컴포즈 파일 배치 경로(Linux)
    /home/사용자명/com_folder

1. 컴포즈 파일을 적절한 위치에 배치

  • 앞서 작성했던 docker-compose.yml 파일을 사용한다.

2. 컴포즈 파일의 내용을 실행

  • docker-compose up 명령어를 실행하면 컴포즈의 파일의 정의대로 컨터이너 및 주변 환경이 세팅된다.
  • -d 옵션을 사용하고, -f 옵션을 사용해 컴포즈 파일의 경로를 지정한다.
  • 컴포즈 파일 내용 실행(Windows): -f C:\..생략..\com_folder\docker-compose.yml up -d
  • 컴포즈 파일 내용 실행(macOS): -f /Users/..생략../com_folder/docker-compose.yml up -d
  • 컴포즈 파일 내용 실행(Linux): -f /home/..생략../com_folder/docker-compose.yml up -d

3. 웹 브라우저에서 워드프레스에 접근 가능한지 확인

  • 웹 브라우저에서 http://localhost:8085/ 에 접근해 워드프레스의 초기화면이 나타나는지 확인하자.

4. 컨테이너와 네트워크를 종료 및 삭제

  • 확인이 끝나면 docker-compose down 명령어를 사용해, 컨테이너와 네트워크를 종료 및 삭제한다.
  • -f 옵션으로 컴포즈 파일의 경로를 설정하고, 삭제 후엔 ps 명령어로 잘 삭제됐는지 확인하자.
  • 컨테이너와 네트워크의 종료 및 삭제(Windows):
    docker-compose -f C:\..생략..\com_folder\docker-compose.yml down
  • 컨테이너와 네트워크의 종료 및 삭제(macOS): 
    docker-compose -f /Users/..생략../com_folder/docker-compose.yml down
  • 컨테이너와 네트워크의 종료 및 삭제(Linux): 
    docker-compose -f /home/..생략../com_folder/docker-compose.yml down

5. 뒷정리

  • down 명령어를 사용해도 이미지와 볼륨은 삭제되지 않아서, 직접 삭제해야 한다.
728x90