
Docker는 컨테이너와 이미지를 관리하는 데 사용되는 강력한 도구입니다. 하지만 Docker 명령어로 할 수 있는 일은 그것보다 훨씬 더 많습니다. 이번에는 Docker에서 컨테이너를 실행하고 관리하는 다양한 방법에 대해 자세히 알아보겠습니다.
Docker에서 컨테이너를 실행할 때 두 가지 주요 모드가 있습니다:
Attached 모드: 컨테이너의 표준 입력(stdin), 표준 출력(stdout), 표준 오류(stderr)에 현재 터미널이 직접 연결됩니다. 이는 컨테이너 내부에서 발생하는 모든 로그나 출력이 터미널에 직접 표시된다는 것을 의미합니다.
Detached 모드: 컨테이너는 백그라운드에서 실행되며 터미널은 즉시 다음 명령을 입력할 수 있는 상태가 됩니다. 이 모드에서는 컨테이너의 출력이 터미널에 표시되지 않습니다.
docker run: 기본적으로 Attached 모드로 컨테이너를 실행합니다. 이는 컨테이너가 실행되는 동안 터미널이 해당 프로세스에 "붙어" 있다는 것을 의미합니다.docker start: 기본적으로 Detached 모드로 중지된 컨테이너를 다시 시작합니다. 터미널은 컨테이너를 시작한 후 즉시 다음 명령을 받을 준비가 됩니다.터미널에서 다음 명령을 실행해 보겠습니다:
docker run -p 8000:3000 my_image
-p 8000:3000은 로컬 머신의 포트 8000을 컨테이너의 포트 3000에 매핑합니다.my_image는 실행하려는 Docker 이미지를 의미합니다.하지만 이 모드에서는 터미널이 해당 프로세스에 묶여 있으므로 다른 명령을 입력하거나 실행할 수 없습니다. 컨테이너를 중지하려면 Ctrl + C를 눌러야 합니다.
이번에는 Detached 모드로 컨테이너를 실행해 보겠습니다:
docker run -d -p 8000:3000 my_image
-d 플래그를 추가하여 컨테이너를 Detached 모드로 실행합니다.Detached 모드의 장점은 다음과 같습니다:
컨테이너가 실행 중인지 확인하려면 다음 명령을 사용합니다:
docker ps
이 명령은 현재 실행 중인 모든 컨테이너의 목록을 표시합니다.
Detached 모드로 실행된 컨테이너의 로그를 보고 싶다면 docker logs 명령을 사용합니다.
컨테이너 ID 또는 이름 확인:
docker ps
이 명령을 통해 컨테이너의 ID와 이름을 확인할 수 있습니다.
로그 확인:
docker logs [컨테이너_ID_또는_이름]
예:
docker logs eloquent_brown
이 명령은 해당 컨테이너에서 발생한 모든 이전 로그를 표시합니다.
실시간 로그 확인:
로그를 실시간으로 모니터링하려면 -f (follow) 옵션을 사용합니다.
docker logs -f [컨테이너_ID_또는_이름]
이 명령은 컨테이너에서 생성되는 새로운 로그를 지속적으로 표시합니다.
이미 실행 중인 컨테이너에 다시 연결하여 직접 상호 작용하고 싶다면 docker attach 명령을 사용합니다.
docker attach [컨테이너_ID_또는_이름]
컨테이너를 중지하려면 다음 명령을 사용합니다:
docker stop [컨테이너_ID_또는_이름]
컨테이너가 정상적으로 중지되기까지 몇 초가 걸릴 수 있습니다.
중지된 컨테이너를 다시 시작하려면 docker start 명령을 사용합니다.
docker start [컨테이너_ID_또는_이름]
기본적으로 docker start는 Detached 모드로 컨테이너를 시작합니다.
컨테이너를 Attached 모드로 시작하고 싶다면 -a 옵션을 추가합니다:
docker start -a [컨테이너_ID_또는_이름]
이렇게 하면 컨테이너의 출력이 터미널에 직접 표시되며, 컨테이너와 직접 상호 작용할 수 있습니다.
이미 특정 포트를 사용 중인 컨테이너가 있는 경우 동일한 포트를 다른 컨테이너에서 사용할 수 없습니다. 이 문제를 해결하려면 다른 로컬 포트에 컨테이너를 바인딩하면 됩니다.
예를 들어, 첫 번째 컨테이너가 포트 3000을 사용 중이라면, 두 번째 컨테이너는 다음과 같이 다른 포트를 사용합니다:
docker run -d -p 8000:3000 my_image
localhost:8000으로 접근하여 두 번째 컨테이너에 접속할 수 있습니다.-f 옵션으로 실시간 로그를 모니터링할 수 있습니다.docker start에 -a 옵션을 사용하여 Attached 모드로 시작할 수 있습니다.Docker에서 컨테이너를 효과적으로 관리하려면 이러한 개념과 명령어를 이해하는 것이 중요합니다. 이를 통해 컨테이너의 실행 모드를 적절히 선택하고 필요에 따라 컨테이너와 상호 작용할 수 있습니다.
컨테이너 이름 지정: 컨테이너를 생성할 때 --name 옵션을 사용하여 알아보기 쉬운 이름을 지정할 수 있습니다.
docker run -d -p 8000:3000 --name my_container my_image
컨테이너 삭제: 더 이상 필요하지 않은 컨테이너를 삭제하려면 다음 명령을 사용합니다:
docker rm [컨테이너_ID_또는_이름]
실행 중인 컨테이너를 삭제하려면 먼저 중지해야 합니다.
이미지 목록 확인:
docker images
이 명령은 로컬에 저장된 모든 Docker 이미지를 표시합니다.
이미지 삭제:
docker rmi [이미지_ID_또는_이름]
더 이상 필요하지 않은 이미지를 삭제하여 디스크 공간을 확보할 수 있습니다.
Docker는 개발자와 시스템 관리자에게 유연하고 강력한 환경을 제공합니다. 컨테이너의 실행 모드와 관리 방법을 잘 이해하면 애플리케이션의 배포와 테스트를 더욱 효율적으로 수행할 수 있습니다. 이 가이드를 통해 Docker의 기본 개념과 명령어를 익히고, 실제 환경에서 적용해 보시기 바랍니다.