Docker - Attach and Detach

문한성·2023년 4월 12일
0

공부

목록 보기
22/28
post-thumbnail

포그라운드 실행(Attached mode), run

포그라운드 실행은 현재 실행하는 터미널(콘솔)에 컨테이너의 동작 상태를 출력하는 모드라고 할 수 있다.

이렇게 실행할 경우, 컨테이너의 동작상태를 볼 수 있어서 유용하다.

다만 터미널과 프로세스가 함께 부모, 자식으로 연결되므로, 터미널이 끊어질 경우 컨테이너가 종료되게 된다.

따라서 테스트시 이용하는 것이 바람직하다.

다만 일반적인 터미널 프로그램과 다르게 터미널에서 Ctrl + C 를 눌려서도 강제로 종료할 수 없고,

터미널을 닫으면 종료된다. 따라서 만약 포그라운드로 실행한다면, 따로 터미널을 실행해서 관리해야 한다.

Docker Compose 역시 기본적으로 포그라운드로 실행된다.

docker run 명령을 사용하면 기본적으로 포그라운드로 실행된다.

백그라운드 실행(detached mode) start

도커를 서비스형태로 실행할 때 가장 많이 사용되는 방식으로, 터미널에 관계 없이 지속적으로 실행할 수 있도록 구성할 때 유용하다. 대신 현재 동작 상태를 확인하기 위해서는 Docker에서 제공하는 log 옵션을 이용해야 한다.

docker log <컨테이너id>

docker start 명령을 사용하면, 기본적으로 백그라운드 실행으로 동작하지만 run 옵션과 차이가 있는데, 컨테이너에만 사용이 가능하다는 것이다. run은 컨테이너를 생성할 때 사용하는 명령이고, start는 이미 존재하는 컨테이너를 실행할 때 사용할 수 있는데, 이때는 자동으로 백그라운드 모드로 동작하게 된다.

모드에 따른 컨테이너 실행 명령어

Interactive Mode

-i 및 -t 옵션을 함께 사용하여 대화식 모드에서 컨테이너를 시작합니다 .

$ docker run -it ubuntu /bin/bash

여기서 -i 옵션은 컨테이너에 있는 bash 셸의 표준 입력 스트림( stdin ) 을 연결 하고 -t 옵션은 프로세스에 의사 터미널을 할당합니다. 이를 통해 터미널에서 컨테이너와 상호 작용할 수 있습니다.

Detached Mode

-d 옵션을 사용하여 분리 모드에서 컨테이너를 실행합니다.

$ docker run -d --name test_redis -p 6379:6379 redis

이 명령은 컨테이너를 시작하고 해당 ID를 인쇄한 다음 셸 프롬프트로 돌아갑니다. 따라서 컨테이너가 백그라운드에서 계속 실행되는 동안 다른 작업을 계속할 수 있습니다.

나중에 이름이나 컨테이너 ID를 사용하여 이 컨테이너에 연결할 수 있습니다.

실행 중인 컨테이너와 상호 작용

명령 실행

실행 명령을 사용 하면 이미 실행 중인 컨테이너 내에서 명령을 실행할 수 있습니다.

$ docker exec -it test_redis redis-cli
복사
이 명령은 이미 실행 중인 test_redis 라는 Redis 컨테이너에서 redis-cli 세션을 엽니다. 이름 대신 컨테이너 ID를 사용할 수도 있습니다.

그러나 키에 대한 값만 얻고 싶을 수도 있습니다.

$ docker exec test_redis redis-cli get mykey

이는 redis-cli 에서 get 명령을 실행 하고 mykey 키의 값을 반환 하고 세션을 닫습니다.

백그라운드에서 명령을 실행할 수도 있습니다.

$ docker exec -d test_redis redis-cli set anotherkey 100

여기서는 이 목적을 위해 -d를 사용합니다. anotherKey 키에 대해 값 100을 설정 하지만 명령의 출력을 표시하지 않습니다.

3.2. 세션 연결
연결 명령 은 터미널을 실행 중인 컨테이너에 연결합니다.

$ docker attach test_redis

기본적으로 이 명령은 표준 입력, 출력 또는 오류 스트림을 호스트 셸과 바인딩합니다.

profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

0개의 댓글