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
'Spring' 카테고리의 다른 글
dockerFile과 docker-compose.yml 의 차이점 (1) | 2024.12.09 |
---|---|
동시성 이슈 (1) | 2024.12.01 |
동시성 제어 방법 - RedissonClient로 멀티스레드 환경의 동시성 극복하기 (0) | 2024.12.01 |
날씨 API 불러오기 - OpenWeather API 사용 (2) | 2024.08.22 |
날씨 API 불러오기 - Weather API 사용 (0) | 2024.08.22 |