Infra/Docker

Docker, Container(컨테이너) 여러 명령어를 이용하여 다루기 (for window)

개발자 DalBy 2024. 5. 14. 17:03
반응형

Docker, Container(컨테이너) 여러 명령어를 이용하여 다루기

참고: 환경은 window local 환경에서 구성하였습니다. 참고 부탁드립니다!

docker
docker

 

 

컨테이너를 대화식으로 실행하는 방법

docker container run --interactive --tty [이미지]

 

--interactive 플래그를 사용하면 컨테이너에 접속된 상태가 됩니다.

--tty 플래그는 터미널 세션을 통해 컨테이너를 조작한다는 의미입니다.

 

hostname date
hostname date

위 사진과 같이 윈도우는 #으로 표현됩니다.(각 운영체제에 맞게 활성화 됨)

 

해당 커맨드를 입력하면 컨테이너ID, 날짜 정보를 확인할 수 있습니다.  

/ # hostname
/ # date

 

 

 

실행중인 모든 컨테이너 정보 확인

docker container ls

컨테이너 정보 확인
컨테이너 정보 확인

container 아이디와 hostname이 같다는 것을 볼 수 있습니다. 추가적으로 --all 커맨드를 추가하면 실행 상태와 상관 없이 모든 컨테이너 목록을 확인할 수 있다. docker container ls --all 커맨드로 알 수 있는 정보가 있는데 컨테이너 내부 애플리케이션이 실행 중이어야, 컨테이너 상태도 실행 중으로 된다. 애플리케이션 프로세스가 종료되면 컨테이너 상태(STATUS)도 Existed (0)이 된다. 종료된 컨테이너는 CPU, memory자원을 사용하지 않는다. 해당 스크립트를 실행하면 끝나는 시점에 종료된다. 대화식 컨테이너도 터미널 세션 종료시 종료된다. 그리고 종료된 컨테이너는 명시적 삭제를 진행하지 않으면 삭제되지 않는다. (해당 컨테이너가 호스트 컴퓨터의 디스크 공간을 점유함.)

 

 

실행중인 컨테이너 프로세스 목록 확인

# 필자는 (2b)
docker container top [container ID]

실행중인 컨테이너 프로세스 목록 확인
실행중인 컨테이너 프로세스 목록 확인

UID, PID 등등 여러 프로세스 목록을 확인 할 수 있습니다.

 

 

컨테이너에 수집된 로그 출력

# 필자는 (2b)
docker container logs [container ID]

컨테이너에 수집된 로그 출력
컨테이너에 수집된 로그 출력

컨테이너에 수집된 로그를 확인 할 수 있습니다.

 

 

HTTP 요청 로그 출력

# 필자는 (2b)
docker container inspect [container ID]

HTTP 요청 로그 출력
HTTP 요청 로그 출력

HTTP 요청 로그 출력할 수 있습니다.

 

이러한 명령어를 사용하는 이유는 컨테이너의 가상 파일 시스템상 경로, 실행 컨테이너 명령, 가상 도커, 네트워크 등 애플리케이션에서 발생한 문제를 추적 하는데 유용한 정보가 제공됩니다. 또한 CPU 사용량을 확인하거나 도커 네트워크를 확인하는 등 컨테이너, 애플리케이션에 대한 문제를 다룰 때 많이 사용한다고 합니다.

 

 

 

컨테이너 웹 사이트 호스팅

docker container run --detach --publish 8080:80 [이미지]

해당 커맨드를 입력하면 컨테이너 ID가 출력되고, 백그라운드에서 계속 동작합니다.

docker container ls 커맨드를 입력 해 보면, STATUS가 up about a minute인 것을 확인 할 수 있습니다.(올라간 시간)

https://localhost:8080 접속하면 해당 [docker 설정-이미지] 웹사이트를 호출 할 수 있습니다.

--detach는 해당 컨테이너를 백그라운드에서 실행하며 container ID를 출력하는 커맨드 입니다. --publish는 컨테이너의 포트를 호스트 컴퓨터에 공개하는 커맨드 입니다.

웹 페이지 접속
웹 페이지 접속

 

일반적으로 Docker를 설치하면 호스트 컴퓨터의 네트워크 계층에 Docker가 끼어듭니다. 그래서 호스트 컴퓨터에서 네트워크 트래픽을 모두 Docker가 intercept하여 필요한 정보를 해당 컨테이너에 전달할 수 있습니다.

 

컨테이너는 외부환경에 노출되지 않습니다. 각 컨테이너는 고유 IP 주소를 가지고 있지만, 해당 IP주소는 Docker가 관리하는 내부 가상 네트워크의 주소 입니다. 실제 호스트 컴퓨터에 물리적으로 연결된 네트워크가 아닙니다. 8080 port를 통해 호스트 컴퓨터에 입장하고 80 port를 통해 해당 애플리케이션이 들어있는 Docker 컨테이너에 트래픽을 전달합니다.

 

실시간으로 CPU, memory, network, disk 상태 확인하기

docker container stats [container ID]

실시간 컨테이너 상태 확인
실시간 컨테이너 상태 확인

해당 커맨드를 입력하면 실시간으로 컨테이너의 상태를 알 수 있습니다.

 

 

모든 컨테이너 삭제

docker container rm --force $(docker container ls --all --quiet)

rm은 삭제 명령어 입니다. 그리고 $() 문법은 괄호 안 명령의 출력을 다른 명령으로 전달하는 역할을 합니다. 위 커맨드는 호스트 컴퓨터에 존재하는 모든 컨테이너의 목록을 만든 후, 이 컨테이너를 제거합니다. (--force 플래그를 사용하면 실행중인 컨테이너라도 바로 삭제 가능합니다.)

 

 

이렇게 간단하게 컨테이너를 실행하고, 확인하고, 삭제 해 보는 방법을 알아보았습니다.

docker 아키텍처 구성
docker 아키텍처 구성

이렇게 빌드-공유-실행의 워크플로우가 docker의 핵심이라고 합니다. 이러한 작업 흐름은 소프트웨어의 배포를 쉽게 만든다고 합니다. 컨테이너에 이미지를 만들어 공유하면 도커에서 해당 이미지를 실행만 하면 됩니다. 

 

docker 가이드 출처

https://docs.docker.com/get-started/overview/

 

Docker overview

Get an in-depth overview of the Docker platform including what it can be used for, the architecture it employs, and its underlying technology.

docs.docker.com

 

 

반응형