이재홍의 언제나 최신 Docker - Unit 13.8 exec

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

Docker 명령어 및 옵션 목록

이재홍 http://www.pyrasis.com

exec

다음은 외부에서 컨테이너 안의 명령을 실행하는 exec 명령입니다.

docker export <옵션> <컨테이너 이름, ID> <명령> <매개 변수>
  • -d, --detach=false: 명령을 백그라운드로 실행합니다.
  • -i, --interactive=false: 표준 입력(stdin)을 활성화하며 컨테이너와 연결(attach)되어 있지 않더라도 표준 입력을 유지합니다.
  • -t, --tty=false: TTY 모드(pseudo-TTY)를 사용합니다. Bash를 사용하려면 이 옵션을 설정해야 합니다. 이 옵션을 설정하지 않으면 명령을 입력할 수는 있지만 셸이 표시되지 않습니다.

다음 명령을 실행하여 컨테이너를 생성합니다.

$ sudo docker run -d --name hello ubuntu:latest \
    /bin/bash -c "while true; do echo Hello World; sleep 1; done"

1초마다 Hello World를 출력하도록 설정하였습니다. 이 상태에서 다음과 같이 컨테이너 안의 /bin/bash를 실행하여 Bash 셸에 연결합니다. Bash 셸을 연결할 때는 -i -t 옵션을 사용해야 명령을 입력하고 결과를 확인할 수 있습니다.

$ sudo docker exec -i -t hello /bin/bash
root@f31ddb5b0fa9:/# ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 /bin/bash -c while true; do echo Hello World; sleep 1; done
  281 ?        S      0:00 /bin/bash
  312 ?        S      0:00 sleep 1
  313 ?        R+     0:00 ps ax
root@f31ddb5b0fa9:/# exit

컨테이너 안에서 ps ax 명령을 실행해보면 Hello World를 출력하는 /bin/bash와는 별개로 docker exec 명령으로 실행한 /bin/bash를 볼 수 있습니다. exit를 입력하여 이 Bash 셸을 빠져나오더라도 컨테이너는 정지되지 않고 계속 실행됩니다. 이처럼 docker exec 명령을 활용하면 데몬이 실행되고 있는 컨테이너에 Bash 셸을 연결하여 다양한 작업을 할 수 있습니다.

이번에는 Bash 셸을 연결하지 않고, 다음과 같이 apt-get, yum 등의 명령을 실행하여 컨테이너 안에 redis-server 패키지를 설치합니다.

$ sudo docker exec hello apt update
$ sudo docker exec hello apt install -y redis-server

다음과 같이 -d 옵션을 사용하여 명령(프로세스)을 백그라운드로 실행할 수 있습니다. 여기서는 redis-server를 백그라운드로 실행합니다.

$ sudo docker exec -d hello redis-server
$ sudo docker top hello ax
PID     TTY   STAT   TIME   COMMAND
10451   ?     Ss     0:00   /bin/bash -c while true; do echo Hello World; sleep 1;
10495   ?     Ss     0:00   nsenter-exec --nspid 10451 -- redis-server
10496   ?     Sl     0:00   redis-server *:6379
10745   ?     S      0:00   sleep 1

저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

2022-10-03