본문 바로가기
Devops/Docker

[Docker] Docker Compose

by 볼링치는 개발자 2021. 6. 11.
반응형

이전 포스팅에서는 Dockerfile로 이미지를 빌드해서 사용하는 방법에 대해 포스팅했습니다.

이번 포스팅에서는 Docker Compose를 사용하는 방법에 대해 포스팅하려 합니다.

 

Docker Compose는 하나의 애플리케이션을 여러 개의 Docker로 구성하는 방법입니다.

Micro Service Architecture 처럼 컨테이너 간의 연결을 구성하고 실행하는 방법입니다.

Docker Compose를 구성하는 방법으로는 명령어와 yaml파일의 사용이 있습니다.

 

다음은 Docker Compose의 기본적인 예시입니다.

version: "3.9"  # optional since v1.27.0
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    links:
      - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

출처 : https://docs.docker.com/compose/ 

 

version은 docker compose 버전 3.9를 사용하겠다는 의미입니다.

services에 있는 web과 redis는 각각 다른 컨테이너로 links를 통해 연결됩니다.

 

그럼 docker compose를 사용하기 위해 docker compose를 설치해보겠습니다.

다음 명령어를 통해 docker compose를 설치해줍니다.

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

 

다음 명령어를 통해 권한 설정을 해줍니다

$ sudo chmod +x /usr/local/bin/docker-compose

 

다음 명령어를 통해 설치가 잘 됐는지 확인할 수 있습니다.

$ docker-compose --version

docker-compose에서 많이 쓰이는 compose 명령어는 다음과 같습니다

 

up - 컨테이너를 만들고 시작합니다.

ps -  컨테이너를 멈추고 삭제합니다.

rm -  정지된 컨테이너를 삭제합니다. (rmi는 없다)

exec - 실행중인 컨테이너에서 명령어를 실행합니다.

images - 이미지 리스트를 보여줍니다.


Docker-compose로 Apache2 실행하기

그럼 docker-compose의 간단한 예시를 실행해보겠습니다.

먼저 저는 /work/docker-compose라는 디렉토리를 먼저 만들어주고, 그 디렉토리에서 작업을 진행했습니다.

먼저 다음 명령어를 통해 docker-compose.yaml파일을 생성해주었습니다.

$ vi docker-compose.yaml

docker-compose.yaml파일은 다음과 같이 작성했습니다.

docker-compose.yaml파일을 작성하고, config명령어를 통해 해당 파일에 에러가 있는지 없는지 확인이 가능합니다.

$ docker-compose config

아무 에러가 뜨지 않아서 그대로 사용하면 됩니다.

up 명령어로 컨테이너를 생성하고 실행해 봅니다.

$ docker-compose up

up 명령어의 경우, docker-compose를 할 때, docker-compose.yaml파일에 있는 특정 컨테이너만 실해 시킬 수 있습니다.

현재 yaml파일에서는 web컨테이너 밖에 없지만, 다양한 컨테이너가 있을 때 사용하기 좋습니다.

$ docker-compose up web처럼 명령어를 입력하면 지정한 컨테이너만 실행합니다.

 

그리고 docker-compose.yaml파일이 있는 디렉토리에서 ps 명령어를 통해 해당 컨테이너가 실행 중인지 확인할 수 있습니다.

$ docker-compose ps

locatlhost:8000으로 접속하면 apache2가 잘 돌고 있는 것을 확인할 수 있습니다.

그럼 다음 명령어로 실행 중인 컨테이너를 멈춰보겠습니다

$ docker-compose down

해당 컨테이너를 종료하니 ps에 실행 중인 컨테이너 목록에도 없고, localhost:8000으로 접속하면 연결 에러가 뜹니다.


Docker-compose로 Wordpress + MySQL 서비스 띄우기

앞서 Apache2 웹서버를 띄우는 간단한 예제를 봤는데, 이번에는 두 개의 컨테이너를 연결해 띄우는 예제를 작성해보려 합니다.

 

Wordpress는 오픈소스로 간단한 웹 페이지를 제작하는 툴이고, MySQL은 wordpress가 기본으로 사용하는 데이터베이스입니다.

즉, 'wordpress'라고 명명된 데이터베이스가 있어야 합니다.


명령어로 서비스 띄우기

docker-compose파일로 구성하기 전에 명령어로 이 서비스를 띄울 수 있습니다

$ docker run --name db -e MYSQL_ROOT_PASSWORD=123 -e MYSQL_DATABASE=wordpress -d mysql
$ docker run --name web --link db:mysql -p 9000:80 wordpress

 

첫 번째 명령어는 이름이 db인 mysql데이터베이스를 생성하고 실행합니다.

두 번째 명령어는 데이터베이스를 이름이 db인 mysql로 하는 wordpress를 생성하고 실행합니다.

두 명령어를 모두 실행하고 localhost:9000으로 접속하면 wordpress실행을 확인할 수 있습니다.

 

사전에 설정해준 설정 값대로 wordpress에서 입력해주면 됩니다.

 

데이터베이스 이름은 wordpress, 비밀번호는 123, 데이터베이스 호스트는 mysql데이터베이스의 이름인 db로 입력하면 됩니다.

그러면 다음과 같이 생성할 계정 정보를 입력합니다.

생성한 계정 정보로 로그인을 하면 다음과 같이 wordpress서비스를 사용할 수 있게 됩니다.


Docker-compose로 서비스 띄우기

위에 실행했던 명령어를 기반으로 docker-compose.yaml파일을 작성해보겠습니다.

docker-compose.yaml파일 작성을 마치고 $ docker-compose config 명령어로 체크해줍니다.

오류가 없으면 $ docker-compose up 명령어로 실행시켜줍니다.

 

docker-compose.yaml파일에서 설정해준 8080 포트로 접속해보면 wordpress서비스를 정상적으로 사용할 수 있는 것을 확인할 수 있습니다.

wordpress 설정해서 데이터베이스 호스트를 docker-compose.yaml에서 설정한 db1으로 설정해주고, 사용자 정보를 입력하고, 로그인을 하면 아까와 같은 wordpress서비스를 사용할 수 있는 것을 확인할 수 있습니다.

반응형

'Devops > Docker' 카테고리의 다른 글

[Docker] Dockerfile (2)  (0) 2021.06.11
[Docker] Dockerfile (1)  (0) 2021.06.11
[Docker] Docker 이미지 다루기 (2)  (0) 2021.06.11
[Docker] Docker 이미지 다루기 (1)  (0) 2021.06.11
[Docker] Apache 사용해보기  (0) 2021.06.10

댓글