서론
도커 실행엔 수많은 옵션이 붙는다.
docker run -it -p 8080:40001 -v ~./docker\_proj:/app/service/ 등등등
이걸 일일히 다 기억할 수 있는가?
만약 상호 의존성이 있는 컨테이너라면 실행 순서도 문제가 된다.
이 모든걸 해결해줄 영웅이 나타났으니...!
그게 바로 도커 컴포즈 이다.
도커 실행옵션들을 yml 형태로 정리하여, 한번에 호출이 가능하다.
목차
- docker-compose.yml 예제
- docker-compose 명령어
- 실행중인 컨테이너에 터미널로 붙기
- 몇가지 팁
가장 간단한 예제 docker-compose.yml
먼저 docker-compose.yml 이 필요하다.
아래는 간단한 web서버 + db서버 이다.
#이 버전은 [도커 컴포즈] 버전이다!
version: '3.3'
#서비스 네이밍은 용도가 많다.
services:
web:
# docker build 옵션들
build:
context: .
dockerfile: Dockerfile
#여기서부터 run 옵션들이다.
container_name: php73
depends_on:
- db #여기 변수는 밑에 db 컨테이너를 가리킨다!
volumes:
- .:/var/www/html/
ports:
- 8000:80
db:
container_name: mysql5
image: mysql:5
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: tmddud333
MYSQL_USER: tmddud333
MYSQL_PASSWORD: abd123
volumes:
- "./init/:/docker-entrypoint-initdb.d/"
ports:
- 33060:3306
역시 yml, 가독성이 아주 훌륭하다.
서비스 네임 (web, db) 는 생각보다 아주 중요한데,
- 위에 설명되어있듯 depends_on 을 통해 컨테이너 실행 우선순위를 정할 때 쓰기도 하고
- 그 외 web 컨테이너에서 db 컨테이너를 호출할 때 localhost 마냥 "주소"를 대체해서 쓴다.
php 를 예로 $host = "db" 로 설정하고
mysqli_connect($host, $user, $password.....)
형태로 호출하는 것이다.
가장 필수적인 명령어
docker-compose 가 있는 경로에서
#실행
docker-compose up
#중지 (컨테이너 stop)
docker-compose stop
#중지-삭제 (networks와 컨테이너 stop, rm)
docker-compose down
실행중인 컨테이너 접근
물론 컨테이너에 접근할일 없게 만드는 것이 주된 목적이다만,
언제든지 예외는 있으니...
docker exec -it 컨테이너ID /bin/bash
#종료하려면
exit
exit 를 해도 컨테이너에 영향이 가지 않는다.
별도의 프로세스로 /bin/bash를 실행시켰기 때문.
몇가지 팁
- docker-compose up 을 실행하기 전, 모든 컨테이너&이미지를 삭제해주고 하는 것이 좋다.
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
- db를 실행하기 전, 만약 초기 테이블을 생성하고 싶다면, sql 파일을 생성한 뒤속성을 컨테이너에 추가한다.
volumes:
- "./init/:/docker-entrypoint-initdb.d/"
실행 컴퓨터에 init 폴더 안에 sql 파일형태로 저장되어 있어야 한다. (파일 이름은 상관없다.)
컨테이너가 실행 시 /docker-entrypoint-initdb.d/ 를 참조하여 sql문을 실행시킨다.
반응형
'개발 > Linux & DevOps' 카테고리의 다른 글
리눅스 OS 설정 - sysctl.conf 탐구 (nginx 패킷 드랍) (0) | 2022.11.04 |
---|---|
자체 진행한 도커 젠킨스 해커톤 후기 ㅎㅎ (0) | 2022.11.01 |
Dockerize 이야기 : Docker Image, Dockerfile 최적화 원리 (0) | 2022.09.14 |
구름 | 장애 대응 특강 노트 정리 (0) | 2022.08.29 |
Jenkins 공식문서 후기 (CasC, 디렉터리 구조, 시스템 설정 등) (0) | 2022.04.14 |