Jisoo.

기술블로그

3. Docker Container


썸네일

Docker Container

Container에 대해서 알아봅시다.


💡 Container란 무엇일까?

컨테이너는 하나의 기술로써, 간단히 별도의 운영 환경을 가지는 공간입니다.

하나의 휴대전화에서 여러 개의 앱이 서로 영향을 받지 않고 실행이 가능한 것과 비슷합니다.

Docker는 필요한 모든 코드 및 종속성이 패키징 된 Container를 생성하여 한 번에 애플리케이션의 실행에 관련된 모든 동작을 수행할 수 있습니다.

- Docker Container

Docker Container 역시 별도의 운영 환경을 가지는 공간입니다.

따라서 각 컨테이너는 호스트 컴퓨터의 OS 자원을 공유하면서도 별도의 IP, 메모리 공간 등을 가질 수 있습니다.

호스트 컴퓨터의 자원을 공유하므로 기존의 OS를 따로 설치하던 가상화 방식에 비해 리소스 소모가 적고, 독립적인 환경에서 실행되므로 우수한 보안을 제공합니다.

독립적 환경을 가지되, 호스트 자원을 공유하므로 반 가상화 방식이라고 볼 수 있습니다.


💡 Container 사용법

- 상태(Status)

컨테이너는 다음의 상태(Status)를 가질 수 있습니다.

상태설명명령어
created생성 후, 한 번도 시작되지 않은 컨테이너docker create
running실행 중인 컨테이너docker start 또는docker run
paused일시 정지된 컨테이너docker pause
restarting재시작 중인 컨테이너docker restart 또는 docker run --restart
exited완료되거나 실행되지 않는 컨테이너docker stop
removing제거 과정에 있는 컨테이너docker rm
dead오류로 인해 더 이상 사용 불가능한 컨테이너

- 생성 및 실행

컨테이너를 생성하고 실행하려면 다음 명령어를 터미널에 입력해야 합니다.

1# 컨테이너 생성만 하고 실행은 하지 않음 2docker container create 이미지명 3 4# 컨테이너 생성과 동시에 실행 5docker container run 이미지명 6 7# 이미 생성된 컨테이너의 실행 8docker container start 컨테이너ID

- 삭제

컨테이너 삭제 방법은 다음과 같습니다.

실행 중인 컨테이너를 삭제 시도할 경우 에러가 발생하며 -force, -f 옵션을 통해 삭제할 수 있습니다.

1# 종료된 컨테이너 삭제 2docker container rm 컨테이너ID 3 4# 컨테이너 강제로 삭제 5docker container rm -f 컨테이너ID

- 목록

생성한 컨테이너의 리스트를 출력하기 위해서는 다음의 명령어를 입력합니다.

1# 실행 중인 컨테이너 리스트 출력 2docker ps 3docker container ls 4 5# 모든 컨테이너 리스트 출력 6docker container ls -a

- 기타 정보

특정 컨테이너의 프로세스 정보, 로그, 상세 정보 등을 Docker CLI를 통해 획득할 수 있습니다.

1# 해당 컨테이너의 실행 중인 프로세스 목록 2docker container top 컨테이너ID 3 4# 해당 컨테이너의 수집된 모든 로그 5docker container logs 컨테이너ID 6 7# 해당 컨테이너의 상세 정보 8docker container inspect 컨테이너ID

해당 명령어를 통해 컨테이너의 로그, 가상 파일 시스템의 경로, ID, 실행 중인 명령, 네트워크 정보 등 애플리케이션에 발생한 문제 추적에 유용한 정보를 얻을 수 있습니다.


💡 컨테이너와 상호작용하기

Docker Container 실행 시 --interactive --tty 또는 -it 옵션을 추가하여 해당 컨테이너의 터미널에 접근할 수 있습니다.

1docker container run -it 이미지명 [실행 파일]
글 이미지

Docker로 ubuntu 컨테이너를 생성하고 bash를 실행하여 리눅스 명령어를 입력할 수 있는 것을 확인할 수 있습니다.


💡 백그라운드로 동작하는 컨테이너

컨테이너는 기본적으로 스크립트 실행이 종료되면 같이 종료되지만 --detach 또는 -d 명령어를 통해 백그라운드로 계속해서 동작할 수 있습니다.

이를 통해 웹 사이트와 같은 서버 애플리케이션을 실행할 수 있습니다.

- 컨테이너로 웹 사이트 호스팅하기

컨테이너로 웹 사이트를 호스팅하기 위해서는 2가지 옵션이 필요합니다.

  • --detach, -d : 컨테이너를 백그라운드에서 실행합니다.

  • --publish, -p : 컨테이너의 Port를 호스트 컴퓨터에 공개합니다.

컨테이너는 고유한 IP 주소를 갖지만, 그 IP는 Docker에서 생성한 가상 네트워크이므로 물리적으로 존재하지 않습니다.

따라서 외부 네트워크에서 일반적으로 접근이 불가능합니다.

이때 --publish 명령어를 통해 호스트 컴퓨터의 포트와 컨테이너의 포트를 연결할 수 있습니다.

1docker container run --detach --publish 8080:80 이미지명

해당 명령어는 호스트의 8080 포트와 컨테이너의 80 포트를 연결하라는 것을 의미합니다.

글 이미지

Docker는 호스트 컴퓨터의 네트워크 계층에 접근할 수 있는데, 필요한 네트워크 트래픽을 가로채어 해당 컨테이너로 전달 할 수 있습니다.

그림처럼 호스트 컴퓨터에서 localhost:8080 요청 시 컨테이너의 80포트로 HTTP GET 요청을 보낼 수 있습니다.

만약 컨테이너에 Apache와 같은 웹 서버가 있고 index.html이 존재한다면 해당 페이지가 출력됩니다.

참고로 80 포트는 HTTP 서버 기본 포트입니다.

TCP/UDP의 포트 목록

일반적으로 컨테이너의 포트는 숨겨져 있어 --publish로 컨테이너의 포트를 공개해야만 해당 포트로 접근이 가능합니다.


💡 마무리

Docker Container에 대하여 간단히 알아보았습니다.

다음에는 Image에 대해 알아보겠습니다.

2. Docker 설치 및 실행하기
4. Dockerfile과 Image *미완성*

1


Docker 시리즈의 다른 포스트

썸네일-0

4. Dockerfile과 Image *미완성*

Dockerfile과 이미지에 대해서 알아봅시다.


2024년 10월 15일

썸네일-1

2. Docker 설치 및 실행하기

Docker를 설치하고 어떻게 사용하는지 알아봅시다.


2024년 10월 04일

썸네일-2

1. Docker란 무엇일까

Docker에 대해서 간단하게 알아봅시다.


2024년 10월 04일