[Docker] 4. docker-compose

설현아·2023년 6월 10일
0

docker

목록 보기
5/5
post-thumbnail
post-custom-banner

docker-compose?

dockerfile을 통하여 docker를 사용할 때 프로젝트가 커지면 그 프로젝트 내의 여러 이미지를 빌드하고 배포하기에 무리가 생긴다.
dockerfile은 하나의 애플리케이션을 이미지로 빌드하기 때문!

여러 개의 애플리케이션을 동시에 빌드할 수 있을까?
바로 docker-compose 를 사용하면 된다.

docker-compose란,
다수의 컨테이너를 한 번에 관리할 수 있도록 돕는다.

1) 각각의 container에 dockerfile이 포함되어야 한다.
2) 그러한 dockerfile을 잘 읽어낼 수 있도록 docker-compose를 작성한다.

이 두 가지를 고려하여 작성한다.


docker-compose.yml

version: '3'
services:
  app:
    build: .
    ports:
      - 80:80

하나씩 알아보자

  1. version: '3'
    : version은 말 그대로 버전

  2. services:
    : 말 그대로 서비스를 정의하겠다는 의미임. 이 아래에 여러 개의 서비스를 각기 정의할 수 있음

  3. app:
    : 이 부분은 서비스명을 정의하는 곳으로 정하고자 하는 서비스명으로 마음대로 변경하면 된다.

  4. build: .
    : Dockerfile의 위치를 의미한다.

    현재 이와 같은 경로로 저장되어있기 때문에 Dockerfile은 docker-compose.yml 과 같은 경로에 있기에 다음과 같이 작성하였다.

  5. ports: - 80:80
    : 연결되는 포트를 지정하는 것이다. dockerfile을 통하여 docker run 명령어를 수행할 때 -p 뒤에 포트를 더하여 명령어를 수행하는데
    docker-compose는 복잡한 docker run 명령어를 요약하여 정리하는 파일이기도 하다.
    따라서 docker-compose.yml에 연결되는 포트도 정의한다.
    (이전 포스트의 포트 내용을 요약하자면, 첫 번째 80번은 호스트의 포트번호이고 두 번째 80번은 컨테이너의 포트번호이다.)

.
다음과 같이 작성은 완료되었다.


  • 실행 docker-compose up
    : docker-compose.yml 파일을 사용하여 docker container를 실행한다.

  • 서비스 조회 docker-compose ps

  • 서비스 종료 docker-compose stop

  • 서비스 시작 docker-compose start

위의 조회, 종료, 시작은 docker-compose up 명령어를 통하여 앱이 실행 중일 때, 그 앱 내의 각각 서비스를 종료/시작하는 명령어이다.

다음 사진과 같이 docker-compose를 기반으로 container가 실행 중일 때 우측의 터미널을 분할하여 각각의 container를 조정할 수 있다.

  • 모듈 내용 변경 docker-compose up --build
    : docker container 내의 python파일 등의 모듈이 변경되면 아무리 docker-compose up 명령어를 수행해도 반영되지 않는다.
    --build 를 같이 붙여주어 변경 내용을 반영한다.

  • 삭제 docker-compose rm
    : docker-compose 로 실행 중인 모든 컨테이너를 삭제한다.

  • 이미지 생성 docker-compose build
    : docker-compose.yml 파일을 기반으로 이미지를 빌드한다.
    : 명령어 뒤에 docker-compose build <서비스명> 으로 추가한다면 해당 서비스만 빌드된다.

이 때, docker-hub에 태그를 부여하여 이미지를 push 하려면 하나의 과정이 더 필요하다.

  • docker tag <이미지_이름>:<이미지_태그> <도커_허브_사용자명>/<리포지토리_이름>:<부여하고자 하는 태그>

위의 명령어를 실행하여 이미지에 태그를 부여한다.
그 이후에 push까지 진행해보면

  • docker push <도커_허브_사용자명>/<리포지토리_이름>:<부여하고자 하는 태그>
    : docker push seolhyeona/final:3.0 다음과 같이 작성한다.

완료!

잘 빌드 되었는지 확인해보자

docker-compose up

잘 실행된다..!

profile
FE Engineer
post-custom-banner

0개의 댓글