개요
- Docker를 사용하면되는데 Docker Compose를 사용하는 이유는 도커 명령어를 파일로 관리해서 복잡한 도커 컨테이너/네트워크를 구성하기 용이하다. 기존 docker보다 간결하고 가독성이 좋다.
- Compose는 다중 컨테이너 Docker 어플리케이션에서 정의하고 실행하게 작동시켜주는 도구이다. YAML파일을 통해 작성함으로써 어플리케이션의 서비스를 구성할 수 있다. 한줄의 명령어로 모든 서비스를 생성하고 시작하게 할 수 있다. 또한, 모든 환경(운영, 스테이지, 개발, 테스트, 또한 CI 워크 플로우 등) 에서 작동한다. 어플리케이션의 아래의 생명주기를 관리하기 위한 명령어를 제공한다.
- 서비스의 시작, 종료, 그리고 재빌드
- 실행중인 서비스의 상태
- 실행중인 서비스의 로그 스트림
구성 요소 ( 상세한 설명: https://watch-n-learn.tistory.com/40 )
- image : 컨테이너의 이미지를 정의
- build : 위 이미지를 활용하는 방식이 아닌 dockerfile의 경로를 지정해 빌드하여 사용하는 방법
- dockerfile : 빌드할 dockerfile의 이름이 Dockerfile이 아닌 경우 이름을 지정하기 위해 사용
- ports: 호스트와 컨테이너의 포트 바인딩 설정에 사용됨
- volumes: 호스트의 지정된 경로로 컨테이너의 볼륨을 마운트 하도록 설정
- container_name: 컨테이너 이름을 설정
- command: 컨테이너가 실행된 후 컨테이너의 쉘에서 실행시킬 쉘 명령어 설정
- environment: 환경변수를 설정
- env_file: 'environment'와 동일한 기능을 수행하지만 이 키워드를 사용하면 env 파일을 이용해서 적용할 수 있음
- depends_on: 다른 컨테이너와 의존관계를 설정
- restart: 컨테이너의 재시작과 관련하여 설정
예제 1
- nginx 웹 서비스와 MySQL를 Docker Compose로 실행해보자
version: "3.9"
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: example
옵션 설명
- image: docker hub에 있는 이미지를 사용하여 docker container를 작성할 경우 image를 설정할 수 있다.
- environment: env옵션과 동일한 역할 환경변수 값 설정할 수 있다.
- ports: 포트 번호를 입력할 때 무조건 쌍따옴표안에 작성필요
Docker Compose 실행 명령어
docker-compose up
- 위의 YML 파일에서는 두 개의 서비스를 정의합니다. web 서비스는 nginx 이미지를 사용하며, 호스트의 8080 포트를 컨테이너의 80 포트로 매핑합니다. db 서비스는 mysql 이미지를 사용하며, 컨테이너 내에서 MYSQL_ROOT_PASSWORD 환경 변수를 설정합니다.
예제 2
- Flask 웹 어플리케이션과 MySQL을 Docker Compose로 실행해보자.
Docker Compose 파일
version: '3'
services:
db:
image: mysql
restart: always
environment:
MYSQL_DATABASE: test
MYSQL_USER: root
MYSQL_PASSWORD: example
MYSQL_ROOT_PASSWORD: example
volumes:
- ./mysql-data:/var/lib/mysql
web:
build: .
restart: always
ports:
- "5000:5000"
environment:
DATABASE_URL: mysql+pymysql://root:example@db/test
옵션 설명
- image: docker hub에 있는 이미지를 사용하여 docker container를 작성할 경우 image를 설정할 수 있다.
- restart: docker container가 다운되어 있을경우 항상 재시작을 하는 설정이다.
- environment: env옵션과 동일한 역할 환경변수 값 설정할 수 있다.
- volumes: 여러개의 volume을 지정하며 볼륨을 나눠가며 사용할 수 있다.
- ports: 포트 번호를 입력할 때 무조건 쌍따옴표안에 작성필요
Docker Compose 실행 명령어
docker-compose up
- 위 파일은 두개의 서비스를 정의한다. db(mysql)은 데이터베이스고, 다른 하나(web)은 flask 웹 어플리케이션이다. 위와 같이 Docker compose 파일을 작성 후 위과 같은 명령어로 예제를 실행할 수 있다.
결론
- 서버에서 도커를 설치한 후 위와같이 설정 파일을 작성 후 명령어로 실행하면 간단하게 환경을 구축할 수 있는 큰 장점이 있다. 다양한 옵션 다양한 환경에서 사용할 수 있어 용이하게 사용할 수 있을 거 같다.
reference
'DevOps&Network' 카테고리의 다른 글
JWT(JSON WEB TOKEN) 이란? (1) | 2023.04.17 |
---|---|
[AWS] 구축한 Subnet에 EC2 연결 (0) | 2023.03.23 |
[AWS] VPC & SUBNET 구축하기 (0) | 2023.03.20 |