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
하나씩 알아보자
version: '3'
: version은 말 그대로 버전
services:
: 말 그대로 서비스를 정의하겠다는 의미임. 이 아래에 여러 개의 서비스를 각기 정의할 수 있음
app:
: 이 부분은 서비스명을 정의하는 곳으로 정하고자 하는 서비스명으로 마음대로 변경하면 된다.
build: .
: Dockerfile의 위치를 의미한다.
현재 이와 같은 경로로 저장되어있기 때문에 Dockerfile은 docker-compose.yml 과 같은 경로에 있기에 다음과 같이 작성하였다.
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
잘 실행된다..!