Docker 실습: Container 및 Docker 기초
클라우드 컴퓨팅 수업에서 Containerization과 Docker의 기본 개념을 학습하고, Ubuntu 환경에서 Docker Engine을 설치한 후 다양한 Docker 명령어를 통해 실습해보았다. 이 글은 해당 실습에서 배운 개념과 명령어들을 정리해보았다.
1. Containerization이란?
- Container : Container는 프로세스 수준의 가벼운 가상화 환경이다. Linux의 chroot, namespace, cgroup 등의 기능을 활용하여 실행 환경을 격리한다.
컨테이너는 호스트 OS의 커널을 공유하면서도 각각 독립된 실행 환경을 제공한다. 가상머신처럼 별도의 운영체제 전체를 실행하는 것이 아니기 때문에 상대적으로 성능 오버헤드가 작고, 필요한 라이브러리와 바이너리만 포함하여 빠르게 시작할 수 있다는 장점이 있다.
- Containerization의 장점 : 컨테이너를 사용하면 개발 환경과 실행 환경을 독립적으로 구성할 수 있다.
예를 들어 컨테이너 내부에서 특정 소프트웨어를 설치하거나 설정을 변경하더라도 호스트 OS에 직접적인 영향을 주지 않는다. 작업이 완료된 컨테이너를 Image로 저장하면 필요한 의존성까지 함께 패키징하여 다른 환경에 그대로 배포할 수 있다. 따라서 개발자마다 환경이 달라 발생하는 "내 컴퓨터에서는 잘 되는데?" 문제를 줄일 수 있다.
2. Microservice Architecture
Containerization과 함께 MSA에 대해서도 학습했다.
MSA는 하나의 큰 애플리케이션을 하나의 프로세스로 구성하는 Monolithic Architecture와 달리, 애플리케이션을 여러 개의 독립적인 서비스로 분리하는 구조다. 각 서비스는 API를 통해 서로 통신하며 독립적으로 개발하고 배포할 수 있다.
MSA의 주요 장점은 다음과 같다.
- 서비스별로 독립적인 유지보수가 가능하다.
- 필요한 서비스만 독립적으로 확장할 수 있다.
- 서비스마다 서로 다른 프로그래밍 언어를 사용할 수 있다.
즉, 서비스 간 결합도를 낮추고 각각의 컴포넌트를 독립적으로 관리할 수 있다는 장점이 있다.
3. Docker란?
Docker는 컨테이너를 이용해 애플리케이션을 Build, Ship, Run할 수 있도록 지원하는 오픈소스 플랫폼이다. Docker를 이용하면 애플리케이션과 실행에 필요한 환경을 Image 형태로 패키징하고, 이를 기반으로 동일한 환경의 Container를 실행할 수 있다.
Docker의 주요 구성 요소는 Docker Engine, Docker CLI, Docker Hub등이 있다.
Docker Engine
Docker Engine은 Docker의 핵심 실행 환경으로, 실제 Container를 생성하고 실행 및 관리하는 역할을 한다. 내부적으로 dockerd라는 Docker daemon이 동작한다.
Docker CLI
Docker CLI는 터미널에서 Docker 명령어를 실행하기 위한 인터페이스다. 예를 들어 다음과 같은 명령어를 사용한다.
docker run
docker pull
docker ps
Docker Hub
Docker Hub는 Docker Image를 저장하고 공유하는 Registry다. GitHub가 소스 코드를 공유하는 공간이라면, Docker Hub는 Docker Image를 공유하는 공간이라고 이해할 수 있다.
4. Docker Engine 설치
이번 실습에서는 Ubuntu 환경에서 Docker Engine을 설치했다. 먼저 Docker 공식 GPG Key를 추가하고 Docker의 공식 Apt Repository를 등록했다.
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
이후 Docker Repository를 추가하고 패키지 목록을 업데이트했다. Docker Engine과 CLI, containerd, buildx plugin을 설치한다.
sudo apt-get install docker-ce docker-ce-cli \
containerd.io docker-buildx-plugin
설치가 완료되면 Docker 서비스가 정상적으로 실행되고 있는지 확인한다.
sudo systemctl status docker
sudo docker --version
만약 Docker daemon이 자동으로 실행되지 않는다면 다음 명령어를 이용해 직접 시작할 수 있다.
sudo systemctl start docker
5. Docker 설치 확인
Docker가 제대로 설치되었는지 확인하기 위해 hello-world Image를 실행했다.
sudo docker run hello-world
hello-world Image가 로컬에 존재하지 않는 경우 Docker는 Docker Hub에서 해당 Image를 가져온 후 Container를 생성하여 실행한다. 정상적으로 실행되면 Hello from Docker! 메시지가 출력된다. 이를 통해 Docker Engine이 정상적으로 설치되고 실행되고 있는지 확인할 수 있다.
6. Docker의 기본 명령어
이번 실습에서는 Docker의 기본적인 명령어인 docker run, docker pull, docker ps, docker images 등을 사용했다.
docker run
docker run은 특정 Image를 기반으로 새로운 Container를 생성하고 실행하는 명령어다.
개념적으로는 다음 세 가지 작업이 결합된 명령어라고 볼 수 있다.
docker pull
↓
docker create
↓
docker start
즉, 필요한 Image가 로컬에 없다면 먼저 가져오고, 해당 Image를 기반으로 Container를 생성한 후 실행한다.
docker pull
docker pull은 Docker Hub와 같은 원격 Registry에서 Image를 로컬로 가져오는 명령어다.
sudo docker pull python:3.9.25-slim
Docker Hub에는 다양한 공식 Image가 저장되어 있으며, 이번 실습에서는 nginx와 python Image를 사용했다.
docker images
현재 로컬에 저장되어 있는 Docker Image를 확인할 수 있다.
sudo docker images
docker pull을 통해 다운로드한 Image가 정상적으로 로컬에 저장되었는지 확인할 때 사용할 수 있다.
7. Nginx Container 실행
Docker를 이용하면 별도의 복잡한 설치 과정 없이 Nginx 서버를 Container로 실행할 수 있다. 다음 명령어를 실행한다.
sudo docker run -p 81:80 -d nginx
각 옵션은 다음과 같은 의미를 가진다.
- nginx: 실행할 Image
- -d: Detached mode로 실행하여 백그라운드에서 실행
- -p 81:80: 호스트의 81번 포트를 Container의 80번 포트에 연결
즉, 외부에서 호스트의 81번 포트로 들어온 요청을 Container의 80번 포트에서 실행 중인 Nginx로 전달하도록 설정한 것이다.
8. 실행 중인 Container 확인
현재 실행 중인 Container는 docker ps를 이용해 확인할 수 있다.
sudo docker ps
이 명령어는 현재 실행 중인 Container만 보여준다. 중지된 Container까지 포함하여 생성된 모든 Container를 확인하려면 -a 옵션을 사용한다.
sudo docker ps -a
9. Python Container 실행
다음으로 Python 공식 Image를 이용해 Container를 실행했다. 먼저 Python 3.9.25 slim Image를 Docker Hub에서 가져온다.
sudo docker pull python:3.9.25-slim
이후 로컬 Image 목록을 확인한다.
sudo docker images
다운로드한 Image를 기반으로 Interactive Container를 실행한다.
sudo docker run -it python:3.9.25-slim
여기서 -it 옵션은 Container의 터미널에 직접 연결하여 Interactive하게 사용할 수 있도록 한다. 따라서 Container 내부에서 Python 환경을 직접 실행하고 명령어를 입력할 수 있다. 실습 과정에서는 Image 이름을 정확하게 입력하는 것도 중요하다는 점을 확인했다. Docker Image는 이름과 Tag에 따라 구분되기 때문에 python:3.9.25-slim과 같이 정확한 Image 이름을 사용해야 한다.
10. 실습을 통해 정리한 Docker 명령어
이번 실습에서 사용한 주요 명령어를 정리하면 다음과 같다.
| docker run | Image를 기반으로 Container를 생성하고 실행한다. |
| docker pull | 원격 Registry에서 Image를 가져온다. |
| docker images | 로컬에 저장된 Image를 확인한다. |
| docker ps | 실행 중인 Container를 확인한다. |
| docker ps -a | 모든 Container를 확인한다. |
'클라우드' 카테고리의 다른 글
| [클라우드] 클라우드컴퓨팅 (이론) (1) | 2026.08.19 |
|---|