새 의사 TTY로 실행 중인 Docker 컨테이너 입력

David Mbochi Njonge 2023년6월20일
  1. 새 프로젝트 만들기
  2. 이미지 정의
  3. 이미지 구축
  4. 컨테이너 실행
  5. docker exec 명령을 사용하여 실행 중인 Docker 컨테이너 입력
  6. 결론
새 의사 TTY로 실행 중인 Docker 컨테이너 입력

컨테이너는 우리 애플리케이션의 버전을 실행하고 있으며 중요한 정보는 컨테이너가 실행 중일 때만 액세스할 수 있습니다. 예를 들어 컨테이너의 로그가 저장되는 위치를 알고 싶을 수 있습니다.

이를 달성하려면 이 특정 컨테이너에 대한 정보를 얻기 위해 실행 중인 컨테이너에 들어가야 합니다. 이 튜토리얼에서는 새로운 의사 TTY를 사용하여 실행 중인 도커 컨테이너에 들어가기 위해 활용할 수 있는 다양한 접근 방식을 배웁니다.

새 프로젝트 만들기

이 튜토리얼의 모든 예제에서 Nginx 애플리케이션을 사용하여 실행 중인 컨테이너에 들어가는 방법을 보여줍니다.

WebStorm IDE를 열고 파일 > 새로 만들기 > 프로젝트를 선택하여 새 프로젝트를 만듭니다. 열린 창에서 빈 프로젝트를 선택하고 프로젝트 이름을 제목 없음에서 docker-enter-container로 변경하거나 원하는 이름을 사용하십시오.

마지막으로 만들기 버튼을 눌러 프로젝트를 생성합니다.

현재 폴더 아래에 index.html이라는 파일을 만들고 다음 코드를 복사하여 파일에 붙여넣습니다.

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bootstrap demo</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"
          rel="stylesheet"
          integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi"
          crossorigin="anonymous">
</head>
<body>
<table class="table table-dark">
    <thead>
    <tr>
        <th scope="col">#</th>
        <th scope="col">First</th>
        <th scope="col">Last</th>
        <th scope="col">Handle</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <th scope="row">1</th>
        <td>Mark</td>
        <td>Otto</td>
        <td>@mdo</td>
    </tr>
    </tbody>
</table>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
        crossorigin="anonymous"></script>
</body>
</html>

이 파일에서 부트스트랩을 사용하여 테이블을 표시하는 간단한 웹 페이지를 만들었습니다. 컨테이너를 실행할 때 반환되는 페이지입니다.

다른 정보를 표시하도록 코드를 자유롭게 변경하십시오.

이미지 정의

Dockerfile이라는 파일을 만들고 다음 Docker 지침을 복사하여 파일에 붙여넣습니다.

FROM nginx:1.23.1-alpine
COPY . /usr/share/nginx/html
  1. FROM - 후속 지침을 사용하여 사용자 정의 이미지를 생성할 기본 이미지를 설정합니다. 이것은 파일의 첫 번째 명령이어야 합니다.
  2. COPY - 현재 디렉토리의 모든 파일과 폴더를 이미지 파일 시스템으로 복사합니다. 이 경우 모든 파일과 폴더를 /usr/share/nginx/html에 복사하고 이 이미지의 요구 사항인 이 위치를 사용했습니다.

이미지 구축

컴퓨터에서 키보드 단축키 ALT+F12를 눌러 새 터미널 창을 엽니다. 그런 다음 아래 명령을 실행하여 enter-container 태그가 있는 이미지를 빌드합니다.

~/WebstormProjects/docker-enter-container$ docker build --tag enter-container:latest .

이 명령은 Dockerfile 명령어를 순차적으로 실행하며 아래와 같이 터미널 창에서 명령어가 실행되는 것을 볼 수 있습니다.

=> CACHED [1/2] FROM docker.io/library/nginx:1.23.1-alpine@sha256:b87c350e6c69e0dc7069093dcda226c4430f3836682af4f649f2af9  0.0s
 => [2/2] COPY . /usr/share/nginx/html

컨테이너 실행

동일한 터미널 창을 사용하여 enter-container-prod라는 컨테이너를 실행하는 다음 명령을 실행합니다.

~/WebstormProjects/docker-enter-container$ docker run --name enter-container-prod -d -p 3000:80 enter-container:latest

이 명령은 컨테이너를 실행하고 호스트의 포트 3000을 노출하여 컨테이너의 포트 80을 수신합니다. 응용 프로그램을 보고 브라우저에서 localhost:3000(http://localhost:3000/)에 대한 요청을 발행하여 index.html 페이지에 테이블을 표시합니다.

다음 섹션에서는 이 컨테이너를 사용하여 컨테이너에 들어가는 데 사용할 수 있는 다양한 접근 방식을 보여줍니다.

docker exec 명령을 사용하여 실행 중인 Docker 컨테이너 입력

실행 중인 컨테이너에서 새 명령을 실행하려면 exec 명령을 사용합니다. 이 명령은 컨테이너의 기본 프로세스가 실행 중일 때만 실행되며 컨테이너를 다시 시작할 때 다시 시작되지 않습니다.

작업 디렉토리가 WORKDIR 명령을 사용하여 지정되지 않은 경우 명령은 기본 디렉토리에서 실행됩니다. 동일한 터미널 창에서 다음 명령을 실행하여 이전 섹션에서 실행한 컨테이너로 들어갑니다.

~/WebstormProjects/docker-enter-container$ docker exec -it enter-container-prod /bin/sh

출력:

/ #

또한 Docker가 컨테이너 STDIN에 연결된 의사 TTY를 할당하여 컨테이너에 대화형 셸을 생성하도록 지시하는 추가 플래그 -it를 사용했습니다.

ls 명령을 실행하면 아래와 같이 컨테이너의 루트 디렉토리에 있음을 알 수 있습니다.

/ # ls

출력:

bin                   etc                   mnt                   run                   tmp
dev                   home                  opt                   sbin                  usr
docker-entrypoint.d   lib                   proc                  srv                   var

/bin/sh 셸 명령을 sh로 대체하여 컨테이너에서 대화형 셸을 만들 수 있습니다. 이것은 기억하기가 훨씬 쉽고 아래와 같이 사용할 수 있습니다.

~/WebstormProjects/docker-enter-container$ docker exec -it enter-container-prod sh

sh 명령 대신 bash 명령 사용

docker exec 명령을 bash라는 sh 명령 대신 사용할 수 있습니다. 이 명령을 사용하면 컨테이너에서 대화형 셸을 만들 수도 있습니다.

bash 명령은 이전 예제에서 sh 명령을 사용한 것과 같은 방식으로 사용할 수 있습니다. CTRL+D를 사용하여 셸 세션을 종료하고 다음 명령을 실행하여 bash 명령을 사용하여 Docker 컨테이너에 들어갑니다.

~/WebstormProjects/docker-enter-container$ docker exec -it enter-container-prod /bin/bash

/bin/bash 셸 명령을 bash로 대체하여 컨테이너에서 대화형 셸을 만들 수 있습니다. 이것은 기억하기가 훨씬 쉽고 아래와 같이 사용할 수 있습니다.

~/WebstormProjects/docker-enter-container$ docker exec -it enter-container-prod bash

shell 명령은 컨테이너에 설치된 셸에 따라 다릅니다. 일부 컨테이너에는 두 개의 셸 명령이 있는 반면 다른 컨테이너에는 하나만 있습니다.

결론

이 자습서에서는 새로운 pseudo-TTY를 사용하여 Docker 컨테이너에 들어가는 데 활용할 수 있는 다양한 접근 방식을 배웠습니다. 이 자습서에서 다루는 접근 방식에는 셸 bash 또는 sh 명령과 함께 docker exec 명령을 사용하는 것이 포함됩니다.

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

관련 문장 - Docker Container