도커 컨테이너 사용 방법

노트북에서 프로그래밍하는 사람의 사진.

컨테이너는 모든 도커 설치의 생명선입니다. 이들은 도커 플랫폼의 기초 역할을 하며, 종속성과 버전 충돌에 대한 걱정 없이 컴퓨터에서 서비스를 실행할 수 있게 해줍니다. 여기에서는 도커 CLI 도구를 사용하여 도커 컨테이너를 생성, 관리 및 사용자 정의하는 기본 사항을 보여줍니다.

목차

  • 도커 이미지 찾기 및 가져오기
  • 도커 컨테이너 실행 및 중지하기
  • 도커 컨테이너 검사하기
  • 도커 컨테이너 사용자 정의하기
  • 도커 컨테이너 및 이미지 삭제하기

참고: 먼저 리눅스 시스템에 도커를 설치하여 시작하세요.

도커 이미지 찾기 및 가져오기

도커 컨테이너는 원래 시스템과 분리된 프로그램을 실행할 수 있게 해주는 특별한 유형의 소프트웨어 환경입니다. 이를 위해 도커는 “소프트웨어 이미지“를 사용합니다. 이는 컨테이너가 시작되는 기반이 되는 프로그램의 정적 복사본입니다.

이미지와 컨테이너 간의 이러한 구분은 소프트웨어를 필요한 방식으로 재구성하고 조정할 수 있게 해줍니다. 예를 들어, “httpd”와 같은 이미지를 가질 수 있지만, 이를 통해 “website1”과 “website2”라는 두 개의 별개의 컨테이너를 생성할 수 있습니다.

새로운 도커 이미지를 찾는 가장 쉬운 방법은 search 하위 명령어를 사용하는 것입니다:

docker search httpd

CLI 도구에서 httpd 도커 이미지를 강조하는 터미널.

웹 브라우저를 사용하고 싶다면 도커 허브 웹사이트에서 패키지를 검색할 수도 있습니다.

도커 허브 웹사이트에서 httpd 도커 이미지를 보여주는 스크린샷.

이미지를 시스템에 다운로드하려면 다음 명령어를 실행하세요:

docker image pull httpd

images 하위 명령어를 사용하여 새 이미지를 시스템에 제대로 추가했는지 확인하세요:

docker images

시스템에 설치된 httpd 도커 이미지를 강조하는 터미널.

도커파일을 사용하여 새 이미지 빌드하기

도커 허브에서 미리 빌드된 이미지를 가져오는 것 외에도, 도커 CLI에서 직접 이미지를 빌드할 수 있습니다. 이는 기존 소프트웨어 패키지의 사용자 정의 버전을 만들거나 새로운 앱을 도커로 포팅할 때 유용합니다.

이를 위해 먼저 홈 디렉토리에 빌드 파일을 위한 폴더를 만드세요:

mkdir ~/my-docker-image && cd ~/my-docker-image

좋아하는 텍스트 편집기를 사용하여 새 도커파일을 만드세요:

nano ./Dockerfile

새 도커파일 안에 다음 코드를 붙여넣으세요:

FROM nginx  
COPY sample-site /usr/share/nginx/html

“sample-site” 폴더를 만들고 기본 HTML 사이트를 복사하거나 만드세요:

mkdir ./sample-site  
cp ~/index.html ./sample-site/

새 도커파일을 저장한 후, 시스템에서 빌드하기 위해 다음 명령어를 실행하세요:

docker build -t custom-nginx .

새 도커 이미지가 도커 이미지 목록에 있는지 확인하세요:

docker images

빌드 하위 명령어에서 생성된 사용자 정의 이미지를 강조하는 터미널.

기존 컨테이너를 사용하여 새 이미지 빌드하기

도커 CLI 도구는 현재 시스템에 존재하는 컨테이너에서 새 이미지를 빌드할 수도 있습니다. 이는 이미 기존 환경에서 작업 중이고 현재 설정에서 새 이미지를 만들고 싶을 때 유용합니다.

이를 위해 컨테이너가 현재 실행 중이지 않은지 확인하세요:

docker stop my-http-server

commit 하위 명령어를 실행한 후 컨테이너 이름을 입력하고, 그 다음에 새 도커 이미지의 이름을 제공하세요:

docker commit my-http-server my-new-server-image

docker images를 실행하여 새 도커 이미지가 시스템에 있는지 확인하세요.

시스템에 설치된 도커 컨테이너에서 새 사용자 정의 이미지를 강조하는 터미널.

도커 컨테이너 실행 및 중지하기

도커 이미지가 준비되었으므로 이제 이를 사용하여 첫 번째 컨테이너를 생성할 수 있습니다. 이를 위해 run 하위 명령어를 사용하고 실행할 이미지의 이름을 입력하세요:

docker run httpd

이 방법은 첫 번째 도커 컨테이너를 실행하는 데 작동하지만, 이렇게 하면 현재 셸 세션을 차지하게 됩니다. 컨테이너를 백그라운드에서 실행하려면 run 하위 명령어 뒤에 -d 플래그를 추가하세요:

docker run -d httpd

run 하위 명령어는 새 도커 컨테이너의 동작을 변경할 수 있는 여러 추가 플래그를 사용할 수 있습니다. 예를 들어, --name 플래그를 사용하면 컨테이너에 사용자 정의 이름을 추가할 수 있습니다:

docker run -d --name=my-http-server httpd

반면에 --publish 플래그를 사용하여 도커 컨테이너에 접근할 수 있는 네트워크 포트를 리디렉션할 수 있습니다. 이는 컨테이너가 특권 포트를 차지하지 않도록 하고 싶을 때 주로 유용합니다:

docker run -d --name=my-http-server --publish 8080:80 httpd

사용자 정의 도커 컨테이너에서 호스팅되는 웹사이트를 여는 웹 브라우저를 보여주는 스크린샷.

현재 시스템에서 실행 중인 모든 도커 컨테이너를 확인하려면 다음 명령어를 실행하세요:

docker ps

run 하위 명령어와 유사하게, ps는 동작을 수정할 수 있는 여러 플래그를 사용할 수 있습니다. 예를 들어, 현재 중단된 컨테이너를 보려면 -a 플래그를 사용하세요:

docker ps -a

실행 중인 컨테이너를 끄려면 stop 하위 명령어를 사용하고 컨테이너 ID 또는 도커 컨테이너의 이름을 입력하세요:

docker stop my-http-server

중지한 컨테이너는 start 하위 명령어를 다시 실행하여 다시 시작할 수 있습니다:

docker start my-http-server

참고: darkhttpd를 사용하여 간단한 웹사이트를 실행하여 도커로 웹 호스팅의 기본을 배우세요.

도커 컨테이너 일시 중지 및 종료하기

도커 CLI 도구는 실행 중인 컨테이너 프로세스를 일시적으로 일시 중지하고 종료할 수 있게 해줍니다. 이는 도커 설정에 문제가 발생했을 때 문제를 격리하거나 잘못된 동작을 하는 컨테이너를 중지하고 싶을 때 유용합니다.

시스템에서 실행 중인 모든 컨테이너를 나열하려면 docker ps를 실행하세요.

관리하려는 컨테이너의 ID 또는 이름을 찾으세요.

시스템에서 현재 실행 중인 사용자 정의 도커 컨테이너를 강조하는 터미널.

일시 중지할 컨테이너의 이름 뒤에 pause 하위 명령어를 실행하세요:

docker pause my-http-server

일시 중지된 프로세스를 다시 시작하려면 unpause 하위 명령어를 실행하세요:

docker unpause my-http-server

잘못된 동작을 하는 프로세스를 중지하려면 kill 하위 명령어를 실행하고 컨테이너의 이름을 입력하세요:

docker kill my-http-server

도커 컨테이너 검사하기

컨테이너의 세부 사항을 아는 것은 도커 스택의 건강을 유지하는 데 중요한 부분입니다. 이는 잠재적인 문제를 빠르게 살펴볼 수 있게 해주며, 전체 배포를 수정하는 것과 재작업하는 것의 차이를 만들 수 있습니다.

도커 컨테이너의 개요를 보려면 inspect 하위 명령어를 실행하세요:

docker inspect my-http-server

이렇게 하면 전체 컨테이너의 현재 상태를 설명하는 긴 JSON 문자열이 출력됩니다. 출력 결과를 jq로 파이프하거나, 출력할 JSON 객체 뒤에 -f 플래그를 사용하여 좁힐 수 있습니다:

docker inspect -f {{.Name}} my-http-server

터미널에 컨테이너 로그 출력하기

그 외에도 현재 실행 중인 도커 컨테이너의 로그를 추적하고 출력할 수 있습니다. 이는 서비스가 현재 어떻게 동작하는지 확인하고 STDOUT에 반환되는 출력을 살펴보는 데 유용합니다.

이를 위해 컨테이너 이름 뒤에 로그 하위 명령어를 실행하세요:

docker logs my-http-server

--follow 플래그와 함께 로그 하위 명령어를 실행하여 도커 서비스의 연속 로그를 생성할 수도 있습니다. 이는 UNIX 파이프 끝에서 tail -f를 실행하는 것과 유사합니다:

docker logs --follow my-http-server

도커 컨테이너의 연속 로그를 보여주는 터미널.

다른 하위 명령어와 유사하게, 도커 컨테이너 로그의 출력을 사용자 정의하기 위해 다양한 플래그를 추가할 수 있습니다. 예를 들어, --timestamps 플래그는 컨테이너가 STDOUT에 보내는 각 메시지에 대한 자세한 타임스탬프를 추가합니다:

docker logs --timestamps my-http-server

--details 플래그는 현재 도커 컨테이너에 대해 설정한 환경 변수도 출력합니다. 한편, --since 플래그는 특정 시점 이후에 발생한 로그만 표시할 수 있게 해줍니다:

docker logs --details --since 8m my-http-server

현재 실행 중인 도커 컨테이너에서 더 자세한 로그 출력을 보여주는 터미널.

도커 컨테이너 사용자 정의하기

본질적으로 도커 컨테이너는 현재 시스템 위에서 실행되는 작고 간소화된 리눅스 버전입니다. 이는 가상 머신과 유사하게 컨테이너 내부의 데이터에 접근하고 검색할 수 있음을 의미합니다.

호스트 머신에서 컨테이너로 로컬 파일을 복사하려면 cp 하위 명령어를 실행하세요:

docker cp ~/my-file my-http-server:/tmp

때때로 컨테이너 내부에서 셸을 열어 “들어가야” 할 필요가 있습니다. 이렇게 하면 파일을 편집하고 이진 파일을 설치하며 필요에 따라 사용자 정의할 수 있습니다:

docker exec -it my-http-server /bin/bash

이제 예를 들어 “index.html”을 편집하고 웹사이트의 홈페이지를 만들 수 있습니다.

도커 컨테이너의 루트 셸에 복사된 HTML 파일을 보여주는 터미널.

컨테이너의 셸에서 나가려면 Ctrl + D를 누르거나 터미널에서 exit를 실행하세요.

도커 컨테이너의 루트 셸에서 종료 명령을 강조하는 터미널.

알아두면 좋은 점: 기존 도커 컨테이너를 새 시스템으로 이동하는 방법을 배우세요.

도커 컨테이너 및 이미지 삭제하기

사용하지 않는 도커 컨테이너와 이미지를 제거하는 것은 배포를 위한 일반적인 정리 작업의 중요한 부분입니다. 이를 통해 서버에서 불필요한 파일을 제거하고 장기적으로 저장 공간을 절약할 수 있습니다.

컨테이너를 삭제하기 전에 먼저 중지했는지 확인하세요:

docker stop my-http-server

이제 rm 하위 명령어를 사용하여 컨테이너를 제거하세요:

docker rm my-http-server

docker ps -a를 실행하여 이전 도커 컨테이너를 제대로 삭제했는지 확인하세요.

현재 중단된 컨테이너를 포함한 모든 사용 가능한 도커 컨테이너를 보여주는 터미널.

도커 배포에서 원래 도커 이미지를 삭제하세요:

docker rmi my-new-server-image

시스템에서 도커 이미지를 삭제한 결과를 강조하는 터미널.

docker images를 실행하여 원래 도커 이미지를 제대로 제거했는지 확인하세요.

업데이트된 도커 이미지 목록을 보여주는 터미널.

도커 컨테이너를 생성, 관리 및 제거하는 방법을 배우는 것은 리눅스 서버에서 할 수 있는 일 중 일부에 불과합니다. XPipe로 서버와 도커 컨테이너 허브를 호스팅하여 리눅스 시스템 관리의 깊은 세계를 탐험하세요.

이미지 출처: Shamin Haky via Unsplash. 모든 수정 및 스크린샷은 Ramces Red에 의해 이루어졌습니다.