포그라운드 실행은 현재 실행하는 터미널(콘솔)에 컨테이너의 동작 상태를 출력하는 모드라고 할 수 있다.
이렇게 실행할 경우, 컨테이너의 동작상태를 볼 수 있어서 유용하다.
다만 터미널과 프로세스가 함께 부모, 자식으로 연결되므로, 터미널이 끊어질 경우 컨테이너가 종료되게 된다.
따라서 테스트시 이용하는 것이 바람직하다.
다만 일반적인 터미널 프로그램과 다르게 터미널에서 Ctrl + C 를 눌려서도 강제로 종료할 수 없고,
터미널을 닫으면 종료된다. 따라서 만약 포그라운드로 실행한다면, 따로 터미널을 실행해서 관리해야 한다.
Docker Compose 역시 기본적으로 포그라운드로 실행된다.
docker run 명령을 사용하면 기본적으로 포그라운드로 실행된다.
도커를 서비스형태로 실행할 때 가장 많이 사용되는 방식으로, 터미널에 관계 없이 지속적으로 실행할 수 있도록 구성할 때 유용하다. 대신 현재 동작 상태를 확인하기 위해서는 Docker에서 제공하는 log 옵션을 이용해야 한다.
docker log <컨테이너id>
docker start 명령을 사용하면, 기본적으로 백그라운드 실행으로 동작하지만 run 옵션과 차이가 있는데, 컨테이너에만 사용이 가능하다는 것이다. run은 컨테이너를 생성할 때 사용하는 명령이고, start는 이미 존재하는 컨테이너를 실행할 때 사용할 수 있는데, 이때는 자동으로 백그라운드 모드로 동작하게 된다.
-i 및 -t 옵션을 함께 사용하여 대화식 모드에서 컨테이너를 시작합니다 .
$ docker run -it ubuntu /bin/bash
여기서 -i 옵션은 컨테이너에 있는 bash 셸의 표준 입력 스트림( stdin ) 을 연결 하고 -t 옵션은 프로세스에 의사 터미널을 할당합니다. 이를 통해 터미널에서 컨테이너와 상호 작용할 수 있습니다.
-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
기본적으로 이 명령은 표준 입력, 출력 또는 오류 스트림을 호스트 셸과 바인딩합니다.