Docker

[Docker] 로컬 환경에서 도커를 활용해보자

emhaki 2023. 4. 6. 21:11
728x90
반응형
SMALL

✅  도커 컴포즈(Docker Compose)란 무엇인가?

  • 도커 컨테이너를 일괄적으로 정의하고 제어하는 도구
  • 설정 파일을 도커 CLI로 번역하는 역할
  • CLI는 터미널과 비슷한 환경을 말함
# 도커 컴포즈를 실행하기 위한 코드
docker-compose -f local-infra.yml up --build

 도커 컴포즈 설정 파일

  • version
  • services
    1. 실행하려는 컨테이너들을 정의하는 역할
    2. 이름, 이미지, 포트 매핑, 환경 변수, 볼륨 등을 포함
    3. 해당 정보를 가지고 컨테이너를 생성하고 관리
      • imgae: 컨테이너를 생성할 때 쓰일 이미지 지정
      • build: 정의된 도커파일에서 이미지를 빌드해 서비스의 컨테이너를 생성하도록 설정
      • environment: 환경 변수 설정, docker run 명령어의 --env, -e 옵션과 동일
      • commend: 컨테이너가 실행될 때 수행할 명령어, docker run 명령어의 마지막에 붙는 커맨드와 동일
      • depends_on: 컨테이너 간의 의존성 주입, 명시된 컨테이너가 먼저 생성되고 실행
        • 컨테이너를 생성할 때 의존성이 있는 경우가 많다고 함
      • ports: 개방할 포트 지정, docker run 명령어의 -p와 동일 (좌측은 호스트 디바이스 port, 우측은 컨테이너 port)
      • expose: 링크로 연결된 컨테이너에게만 공개할 포트 설정
      • volumes: 컨테이너에 볼륨을 마운트함
      • restart: 컨테이너가 종료될 때 재시작 정책
        • no: 재시작 되지 않음
        • always: 외부에 영향에 의해 종료 되었을 때 항상 재시작
        • on-failure: 오류가 있을 시에 재시작
# ex) docker compose
version: "3.0"

services:
  db:
    image: mysql:latest
    volumes:
      - ./db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_pass
      MYSQL_DATABASE: wordpress
      MYSQL_USER: docker_pro
      MYSQL_PASSWORD: docker_pro_pass
  
  app:
    depends_on: 
      - db
    image: wordpress:latest
    volumes:
      - ./app_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: docker_pro
      WORDPRESS_DB_PASSWORD: docker_pro_pass
  • network
    • bridge: 도커 엔진에 의해 자동으로 생성되는 가상 네트워크, 컨테이너끼리 연결되는 기본 네트워크
# 네트워크 보기
docker network ls

# 사용하지 않는 네트워크 삭제
docker network prune

# wordpress_net 네트워크 생성
docker network create wordpress_net

# 도커 stop
docker stop ${docker ps -aq}

✅ 도커 컴포즈를 활용하여 워드 프레스 서비스 실행하기

Docker CLI로 실행할 경우

# mysql db container 생성
docker \
run \
    --name "db" \
    -v "$(pwd)/db_data:/var/lib/mysql" \
    -e "MYSQL_ROOT_PASSWORD=root_pass" \
    -e "MYSQL_DATABASE=wordpress" \
    -e "MYSQL_USER=docker_pro" \
    -e "MYSQL_PASSWORD=docker_pro_pass" \
    --network wordpress_net \
mysql:latest
# app 생성
docker \
    run \
    --name app \
    -v "$(pwd)/app_data:/var/www/html" \
    -e "WORDPRESS_DB_HOST=db" \
    -e "WORDPRESS_DB_NAME=wordpress" \
    -e "WORDPRESS_DB_USER=docker_pro" \
    -e "WORDPRESS_DB_PASSWORD=docker_pro_pass" \
    -e "WORDPRESS_DEBUG=1" \
    -p 8000:80 \
    --network wordpress_net \
wordpress:latest

위와 같이 db와 app을 따로 실행하는 것보다 도커 컴포즈를 통해 여러개 컨테이너를 관리하는게 훨씬 편하다.

🔎 도커 컴포즈로 여러개 컨테이너 관리하기

Docker compose를 이용할 경우

# docker-compose -f docker-compose.yml up --bulid
# yml 파일
version: "3.0"

services:
  db:
    image: mysql:latest
    volumes:
      - ./db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_pass
      MYSQL_DATABASE: wordpress
      MYSQL_USER: docker_pro
      MYSQL_PASSWORD: docker_pro_pass
  
  app:
    depends_on: 
      - db
    image: wordpress:latest
    volumes:
      - ./app_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: docker_pro
      WORDPRESS_DB_PASSWORD: docker_pro_pass

ec2를 사용할 경우 깃에서 코드를 가져와서 여러 라이브러리를 확인하고 구동해야하지만 도커 컴포즈를 이용하면 세팅으로도 앱실행이 가능하다.

📚 도커 컴포즈 공식문서 and 생활코딩 Docker 입문강의

 

Docker Compose overview

 

docs.docker.com

 

728x90
반응형

'Docker' 카테고리의 다른 글

[Docker] Docker 알아보기  (0) 2023.04.04