docker

[Docker] docker-compose의 주요 명령어

sklass 2021. 10. 9. 11:53

up

docker-compose.yml 파일의 내용에 따라 이미지를 빌드하고 서비스를 실행합니다. 자세한 진행 과정은 다음과 같습니다.

  1. 서비스를 띄울 네트워크 설정
  2. 필요한 볼륨 생성(혹은 이미 존재하는 볼륨과 연결)
  3. 필요한 이미지 풀(pull)
  4. 필요한 이미지 빌드(build)
  5. 서비스 의존성에 따라 서비스 실행
$ 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