Docker 컨테이너 작업

소개

도커는 소프트웨어 애플리케이션이 실행되는 데 필요한 모든 것을 포함하는 파일 시스템을 제공하는 인기있는 컨테이너화 도구입니다. 도커 컨테이너를 사용하면 소프트웨어가 배포되는 위치에 관계없이 동일한 방식으로 작동할 것으로 보장됩니다. 왜냐하면 실행 환경이 엄격하게 일관되기 때문입니다.

이 튜토리얼에서는 도커 이미지와 도커 컨테이너 간의 관계에 대한 간단한 개요를 제공하고, 그런 다음 컨테이너를 실행, 시작, 중지 및 제거하는 방법에 대해 자세히 살펴보겠습니다.

개요

우리는 도커 이미지를 도커 컨테이너를 만들기 위한 비활성 템플릿으로 생각할 수 있습니다. 이미지는 일반적으로 루트 파일 시스템으로 시작하여 순서대로 정렬된 읽기 전용 레이어에 파일 시스템 변경 사항과 해당 실행 매개변수를 추가합니다. 전형적인 리눅스 배포와 달리 도커 이미지에는 일반적으로 응용 프로그램을 실행하는 데 필요한 기본 사항만 포함됩니다. 이미지는 상태가 없으며 변경되지 않습니다. 대신, 이것들은 도커 컨테이너의 시작점을 형성합니다.

이미지는 docker run 명령으로 실제로 현실로 만들어집니다. 이 명령은 이미지 위에 읽기-쓰기 레이어를 추가하여 컨테이너를 생성합니다. 읽기 전용 레이어가 읽기-쓰기 레이어 위에 올려진 이 조합을 연합 파일 시스템이라고 합니다. 실행 중인 컨테이너의 기존 파일을 변경하면 해당 파일이 읽기 전용 공간에서 읽기-쓰기 레이어로 복사되어 변경 사항이 적용됩니다. 읽기-쓰기 레이어의 버전은 원본 파일을 숨기지만 삭제하지는 않습니다. 읽기-쓰기 레이어의 변경 사항은 개별 컨테이너 인스턴스 내에서만 존재합니다. 컨테이너가 삭제되면 변경 사항이 보존되지 않으며 보존하려면 조치를 취해야 합니다.

Docker 컨테이너 사용 방법

  1. 두 개의 Docker 컨테이너 생성
  2. 첫 번째 컨테이너 다시 시작
  3. 모든 컨테이너 삭제

컨테이너 작업

각각 docker run 명령을 사용할 때마다 지정한 이미지로부터 새로운 컨테이너가 생성됩니다. 이는 혼란의 원인이 될 수 있으므로 몇 가지 예시를 통해 살펴보겠습니다:

단계 1: 두 개의 컨테이너 생성

다음 docker run 명령은 기본 ubuntu 이미지를 사용하여 새로운 컨테이너를 생성합니다. -t는 터미널을 제공하고 -i는 상호작용할 수 있도록 합니다. 우리는 Ubuntu 기본 이미지의 Docker 파일에서의 기본 명령인 bash를 사용하여 셸로 들어갈 것입니다.

  1. docker run -ti ubuntu

명령 줄 프롬프트는 루트 사용자로 컨테이너 내부에 있다는 것을 나타내며, 그 뒤에 12자리 컨테이너 ID가 옵니다.

우리는 컨테이너의 /tmp 디렉터리에 몇 가지 텍스트를 에코하여 변경을 만들 것이고, 그것이 성공적으로 저장되었는지를 확인하기 위해 cat을 사용할 것입니다.

  1. echo "Example1" > /tmp/Example1.txt
  2. cat /tmp/Example1.txt
Output
Example1

이제 컨테이너에서 나옵시다.

  1. exit

도커 컨테이너는 명령이 완료되는 즉시 중지되므로 우리 컨테이너는 bash 쉘을 종료했을 때 중지되었습니다. docker ps 명령을 실행하면 실행 중인 컨테이너 목록이 표시되며 우리 것은 보이지 않습니다.

  1. docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

-a 플래그를 추가하면 중지되었거나 실행 중인 모든 컨테이너를 표시하므로 우리 컨테이너가 목록에 표시됩니다:

  1. docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11cc47339ee1 ubuntu "/bin/bash" 6 minutes ago Exited (127) 8 seconds ago small_sinoussi

컨테이너가 생성될 때 컨테이너 ID와 무작위로 생성된 이름이 지정되었습니다. 이 경우 11cc47339ee1은 컨테이너 ID이고 small_sinoussi는 무작위로 생성된 이름입니다. ps -a 명령은 해당 값을 표시하며 컨테이너가 생성된 이미지(ubuntu), 컨테이너가 생성된 시간(6분 전), 그리고 컨테이너에서 실행된 명령(/bin/bash)도 표시합니다. 출력은 또한 컨테이너의 상태(Exited)와 해당 상태에 들어간 지 얼마나 오래되었는지(6초 전)를 제공합니다. 컨테이너가 여전히 실행 중이라면 “Up” 상태가 표시되고 실행 중인 기간이 표시됩니다.

같은 명령을 다시 실행하면 완전히 새로운 컨테이너가 생성됩니다:

  1. docker run -ti ubuntu

명령 프롬프트의 ID가 다르고 Example1 파일을 찾을 수 없는 것으로 보아 새 컨테이너임을 알 수 있습니다:

  1. cat /tmp/Example1
Output
cat: /tmp/Example1: No such file or directory

이는 데이터가 사라간 것처럼 보일 수 있지만 사실은 그렇지 않습니다. 두 번째 컨테이너를 종료하여 생성한 파일이 있는 첫 번째 컨테이너도 시스템에 있는지 확인하겠습니다.

  1. exit

컨테이너 목록을 다시 나열하면 두 개가 모두 표시됩니다:

  1. docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e4341887b69 ubuntu "/bin/bash" About a minute ago Exited (1) 6 seconds ago kickass_borg 11cc47339ee1 ubuntu "/bin/bash" 13 minutes ago Exited (127) 6 minutes ago small_sinoussi

단계 2: 첫 번째 컨테이너 다시 시작하기

기존 컨테이너를 다시 시작하려면 -a 플래그와 함께 start 명령을 사용하여 해당 컨테이너에 연결하고 -i 플래그를 사용하여 대화형으로 만든 다음, 컨테이너 ID 또는 이름을 사용합니다. 아래 명령어에서 컨테이너의 ID로 교체하십시오:

  1. docker start -ai 11cc47339ee1

우리는 다시 컨테이너의 bash 프롬프트에서 자신을 찾게 되며 이전에 생성한 파일을 cat으로 확인하면 여전히 그대로 남아 있습니다.

  1. cat /tmp/Example1.txt
Output
Example1

이제 컨테이너를 종료할 수 있습니다:

  1. exit

이 출력에서 볼 수 있듯이 컨테이너 내에서 만든 변경 사항은 중지하고 다시 시작함으로써 유지됩니다. 컨테이너를 제거할 때만 내용이 삭제됩니다. 이 예제는 변경 사항이 개별 컨테이너로 제한되었음을 보여줍니다. 두 번째 컨테이너를 시작했을 때 이미지의 원래 상태를 반영합니다.

단계 3: 두 컨테이너 모두 삭제하기

두 개의 컨테이너를 생성했으며, 간단한 튜토리얼을 삭제하여 마무리하겠습니다. 중지된 컨테이너에서만 작동하는 docker rm 명령은 하나 이상의 컨테이너의 이름 또는 ID를 지정할 수 있으므로 다음과 같이 두 개를 모두 삭제할 수 있습니다:

  1. docker rm 11cc47339ee1 kickass_borg
Output
11cc47339ee1 kickass_borg

두 컨테이너와 그 안에서 한 모든 변경 사항이 이제 없어졌습니다.

결론

docker run 명령어를 자세히 살펴보았습니다. 이 명령어는 실행될 때마다 자동으로 새로운 컨테이너를 생성하는 방법을 확인했습니다. 또한 중지된 컨테이너를 찾고, 시작하고, 연결하는 방법을 살펴보았습니다. 컨테이너 관리에 대해 더 알고 싶다면, 초보자를 위한 가이드인 Docker 컨테이너에 이름 지정: 초보자를 위한 3가지 팁에 관심이 있을 것입니다.

Source:
https://www.digitalocean.com/community/tutorials/working-with-docker-containers