실행 중인 도커 컨테이너에 연결하면 컨테이너 내부에서 어떤 일이 발생하는지 확인하려는 경우에 유용합니다. 도커 컨테이너가 예상대로 작동하지 않으면 컨테이너에 부착하거나 셸을 컨테이너에 가져와 ps 또는 top과 같은 명령을 실행할 수 있습니다. 컨테이너에 들어가 새 패키지를 설치하고 컨테이너에서 새 도커 이미지를 작성할 수도 있습니다.
컨테이너의 주 실행 프로세스에 연결하는 방법과 셸을 실행 중인 컨테이너에 연결하는 방법에 대해 설명합니다.
컨테이너에 부착
컨테이너에서 여러 프로세스를 실행할 수 있지만 대부분의 도커 컨테이너는 단일 프로세스만 실행하고 있습니다. 컨테이너를 시작할 때 실행되는 명령은 ENTERPOINT 및/또는 RUN 명령을 사용하여 지정합니다.
도커 연결 명령을 사용하면 터미널을 실행 중인 컨테이너에 연결할 수 있습니다. 이 기능은 표준 출력에 작성된 내용을 실시간으로 확인하거나 프로세스를 대화식으로 제어하려는 경우에 유용합니다.
attach 명령의 작동 방식을 더 잘 이해하기 위해 공식 Nginx 이미지를 사용하여 분리된 새로운 Nginx 컨테이너를 실행해 보겠습니다.
docker container run --name my_nginx -d -p 8080:80 nginx
-p 8080:80 옵션은 도커에게 컨테이너의 포트 80을 호스트 컴퓨터의 포트 8080에 매핑하라고 지시합니다.
my_nginx 컨테이너가 실행 중인지 확인할 컨테이너를 나열합니다.
docker container ls
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 8e1c4974a8d8 nginx "nginx -g 'daemon of…" 3 minutes ago
컨테이너의 ID 또는 이름을 사용하여 컨테이너에 부착합니다.
docker container attach my_nginx
컨테이너를 실행할 때 실행되는 nginx 이미지의 기본 명령은 cmd ["nginx", "-g", "daemon off;"]로 설정됩니다. attach 명령을 실행하면 터미널이 nginx 프로세스에 연결됩니다.
브라우저에서 127.0.0.1:8080을 열면 nginx 프로세스의 출력을 실시간으로 볼 수 있습니다.
# 192.168.33.1 - - [04/Oct/2019:21:12:28 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"
# 192.168.33.1 - - [04/Oct/2019:21:12:28 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.33.71:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"
컨테이너 로그에 액세스하려면 도커 로그 명령을 사용하는 것이 좋습니다.
컨테이너를 중지하지 않고 분리하려면 CTRL-p CTRL-q 키 조합을 사용합니다. Ctrl-c를 누르면 용기가 중지됩니다.
첨부할 실행 중인 프로세스가 입력을 승인할 경우 입력에 지침을 보낼 수 있습니다.
쉘을 컨테이너에 담기
도커 Exec 명령을 사용하면 실행 중인 컨테이너 내에서 명령을 실행할 수 있습니다.
Exec 명령의 작동 방식과 컨테이너 셸 입력에 사용할 수 있는 방법을 보려면 먼저 새 컨테이너를 시작하십시오. 공식 MySQL 이미지를 사용합니다.
docker container run --name my_mysql -d mysql
그러면 "my_mysql"이라는 이름의 컨테이너가 생성됩니다.
컨테이너 내에서 명령을 실행하려면 다음 명령을 실행합니다.
docker container exec -it my_mysql ls /var
# backups cache lib local lock log mail opt run spool tmp
-i 옵션은 대화형이며 -t는 도커에게 의사 TTY 장치를 할당하라고 말합니다. ls 명령은 컨테이너의 /var 디렉토리 안에 있는 모든 파일 및 디렉토리를 나열합니다.
컨테이너에 셸을 가져오려면, 즉 컨테이너 내부에 들어가려면 셸 바이너리를 실행하여 새 셸 세션을 시작합니다. sh, bash 또는 이미지에 포함된 다른 셸을 사용할 수 있습니다.
아래 명령은 컨테이너 내부에 새 Bash 세션을 만듭니다.
docker container exec -it my_mysql /bin/bash
명령 프롬프트가 변경되어 현재 컨테이너 셸에서 작업 중임을 나타냅니다.
여기서 다른 Linux 서버에서와 같은 방식으로 명령을 실행할 수 있습니다. 예를 들어 현재 환경 변수 목록을 가져오려면 env를 입력하십시오.
출력은 다음과 같습니다.
env
# HOSTNAME=e0214d97e0fe
# MYSQL_ROOT_PASSWORD=my-secret-pw
# PWD=/
# HOME=/root
# MYSQL_MAJOR=8.0
# GOSU_VERSION=1.7
# MYSQL_VERSION=8.0.17-1debian9
# TERM=xterm
# SHLVL=1
# PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# _=/usr/bin/env
도커 Exec 및 도커 연결 명령을 사용하면 실행 중인 컨테이너에 연결할 수 있습니다. 컨테이너에 대화형 셸을 가져오려면 Exec 명령을 사용하여 새 셸 세션을 시작합니다. attach 명령은 터미널을 실행 중인 컨테이너에 연결합니다.
'SW > 리눅스' 카테고리의 다른 글
Linux : 그룹 생성(groupadd 명령어) 방법, 예제 (0) | 2022.03.18 |
---|---|
Linux : CentOS 8 : Nginx 설치 방법, 예제, 명령어 (0) | 2022.03.17 |
Linux : Git : 깃 커밋 메세지 변경 방법, 예제, 명령어 (0) | 2022.03.14 |
Linux : Bash Scripts에 주석 작성 방법, 예제, 명령어 (0) | 2022.03.13 |
Linux : CentOS 8 : Java 설치 방법, 예제, 명령어 (0) | 2022.03.12 |