728x90

Docker로 개발환경을 빌드하려고 공부중에 Docker, docker-compose의 차이에 대해 알아 볼려고 한다.

 

1. Docker

  • Single Container를 관리하는것
  • 커맨드 라인에서 명령어를 실행할 수 있다.
  • Go언어로 작성된 리눅스 컨테이너를 기반으로하는 오픈소스 가상화 플랫폼
  • VM처럼 가상화기술을 사용하여 독립된 환경에서 애플리케이션을 실행할 수 있는 컨테이너를 생성
  • Docker file과 Docker Image를 활용해 컨테이너를 생성할 수 있음

 

2. Docker-compose

  • 여러 Docker 컨테이너를 정의하고 실행하기 위한 도구
  • yaml file 기반으로 multi container 관리할 수 있는 client이고 yaml파일에 명령어를 적어서 컨테이너를 정의하고 관리한다.
  • 여러 컨테이너가 서로 어떻게 상호 작용하는지, 네트워크와 볼륨 설정은 어떻게 되어야 하는지 등을 정의
  • 관리나 가독성 측면에서 docker-compose를 사용해 주는게 더 좋다.
  • Window에서 docker를 사용하기 위해 docker desktop을 설치하면 자동으로 docker compose가 설치 된다.
  • cmd창에서 아래 명령어로 해당 버전을 확인 할 수 있다. 
docker-compose -v 
docker -v

 

3. Docker-compose 작성법

version: '3'

services: // 생성하고자 하는 컨테이너들을 컨테이너이름, 설정 순으로 나열
    nginx:
        build:
            context: ./requierments/nginx // 빌드명령을 실행할 경로
            dockerfile: ./Dockerfile // 빌드를 실행할 파일
        volumes: // 컨테이너에 마운트할 볼륨 경로
            - wp:/var/www/html
        ports: // 호스트에서:같은네트워크
            - "443:443"
        networks:
            - intra
        depends_on: // 종속성 순서대로 실행될 수 있도록 설정
            - wordpress
        env_file: // 환경변수가 저장되있는 파일
            - .env 
        restart: always

    mariadb:
        build:
            context: ./requierments/mariadb
            dockerfile: ./Dockerfile
        networks:
            - intra
        volumes:
            - db:/var/lib/mysql // volumes의 db를 /var/lib/mysql와 연결하는것
        env_file:
            - .env
        restart: always

    wordpress:
        build:
            context: ./requierments/wordpress
            dockerfile: ./Dockerfile
        depends_on:
            - mariadb
        volumes:
            - wp:/var/www/html
        networks:
            - intra
        env_file:
            - .env
        restart: always

volumes:
    wp:
        driver: local // 볼륨에 사용할 볼륨 드라이버
        driver_opts: // 볼륨 드라이버에 전달할 옵션 목록
            type: none // 사용할 볼륨 드라이버 유형
            o: bind // 마운트 옵션
            device: 'home/$user_name/data/wordpress' // 호스트 파일 시스템에서 사용할 경로

    db:
        driver: local
        driver_opts:
            type: none
            o: bind
            device: 'home/$user_name/data/mariadb'

networks:
    intra:
        driver: bridge

 

4. Docker-compose 명령어

  • docker-compose up
    • docker-compose.yml을 바탕으로 컨테이너들을 생성하기 시작
    • -d 옵션을 사용하면 컨테이너를 백그라운드에서 실행시킴
    • --build 옵션을 사용하면 컨테이너 시작시 dockerfile을 빌드함
  • docker-compose down
    • docker-compose.yml을 바탕으로 생성한 컨테이너나 이미지들을 정지시키고 일괄적으로 삭제해줌
    • --rmi all 옵션을 사용하면 모든 이미지를 삭제함
    • -v 옵션을 사용하면 데이터 볼륨을 삭제함
  • docker-compose ps
    • 현재 작동중인 컨테이너의 목록들을 보여줌
    • -q옵션을 사용하면 컨테이너 ID만 출력
  • docker-compose stop
    • 현재 작동중인 컨테이너들을 일괄적으로 정지함
  • docker-compose start
    • 현재 정지된 컨테이너들을 일괄적으로 시작함
  • docker-compose restart
    • 현재 작동중인 컨테이너들을 일괄적으로 재시작함
  • Docker를 사용하다보면 이미지 생성중 에러가 발생시 생기는 <none> 이미지, 컨테이너가 쌓이게 됨
    • docker rm $(docker ps --filter status=exited -q)
    • docker rmi $(docker images -f "dangling=true" -q)
    • 두 명령어를 사용하면 <none> 이미지와 컨테이너를 삭제할 수 있음
728x90

+ Recent posts