[Docker] docker-compose의 주요 명령어
up
docker-compose.yml 파일의 내용에 따라 이미지를 빌드하고 서비스를 실행합니다. 자세한 진행 과정은 다음과 같습니다.
- 서비스를 띄울 네트워크 설정
- 필요한 볼륨 생성(혹은 이미 존재하는 볼륨과 연결)
- 필요한 이미지 풀(pull)
- 필요한 이미지 빌드(build)
- 서비스 의존성에 따라 서비스 실행
$ docker-compose up
up 명령에 사용할 수 있는 몇 가지 옵션도 존재합니다.
- -d: 서비스 데몬으로 실행하여 백그라운드에서 돌아가게합니다. (docker run에서의 -d와 같습니다.)
- --force-recreate: 컨테이너를 지우고 새로 만듭니다.
- --build: 서비스 시작 전 이미지를 새로 만듭니다.
ps
현재 환경에서 실행 중인 각 서비스의 상태를 보여줍니다.
$ docker-compose ps
stop, start
서비스를 멈추거나, 멈춰 있는 서비스를 시작합니다.
$ docker-compose stop
$ docker-compose start
down
서비스를 지웁니다. 컨테이너와 네트워크를 삭제하며, 옵션에 따라 볼륨도 지웁니다.
$ docker-compose down --volume
--volume: 볼륨까지 삭제합니다
exec
실행 중인 컨테이너에서 명령어를 실행합니다. 자동화된 마이그레이션용 파일 생성이나 유닛 테스트, lint 등을 실행할 때 사용합니다.
$ docker-compose exec django ./manage.py makemigrations
위의 명령어는 django 컨테이너에서 ./manage.py makemigrations 라는 명령어를 실행한다는 뜻입니다.
$ docker-compose exec django sh
위의 명령어는 django 컨테이너의 shell을 열어주는 명령어로, django 컨테이너 안에서 실행하고 싶은 명령어들을 직접 shell에서 치고 싶을 때 유용합니다.
docker-compose.yml 파일을 수정했다면?
docker-compose.yml 파일을 수정하고 이를 서비스에 적용하려면 서비스를 멈추고(stop), 서비스를 지우고(rm), 서비스를 시작해야(up) 합니다.
하지만 up 명령만 실행해도, (현재 실행 중인 서비스 설정과 달라진 부분이 있다면) 알아서 컨테이너를 재생성하고 서비스를 재시작해줍니다.
$ docker-compose up [서비스_이름]
혹시 컨테이너를 재생성하지 않는 것 같다면, --force-recreate 옵션을 붙이면 됩니다.
Dockerfile이나 requirements.txt 파일을 수정했다면?
Dockerfile-dev 파일을 수정했을 땐 build 명령을 사용하여 도커 이미지를 새로 만들어야 합니다. 이후 서비스 중지와 삭제, 재시작을 해야 하죠.
하지만 up 명령에 다음과 같이 --build 옵션을 넣으면 알아서 이미지를 새로 만들고 서비스를 재시작합니다.
$ docker-compose up --build [서비스_이름]
데이터베이스 내용을 지우고 싶다면?
열심히 개발하다 보면 데이터베이스에 원치 않는 데이터가 남는 경우가 있습니다. 데이터베이스에 접속해서 테이블을 삭제하거나 할 수도 있겠지만, down 명령에 --volume 옵션을 추가하면 서비스에서 사용하는 볼륨(=데이터베이스 데이터가 저장되는 곳)을 삭제하기 때문에, 데이터베이스를 깨끗하게 초기화할 수 있습니다.
$ docker-compose down --volume
References
https://www.44bits.io/ko/post/almost-perfect-development-environment-with-docker-and-docker-compose
도커(Docker) 컴포즈를 활용하여 완벽한 개발 환경 구성하기
개발 환경을 구축하기란 그리 쉬운 일이 아닙니다. 문서화를 해두어도 누군가 계속 신경쓰지 않으면 내용이 낡기 마련이고, 계속 신경 쓰자니 이 또한 쉽지 않죠. 어떻게 하면 손쉽게 개발 환경
www.44bits.io