소개
이 포괄적인 Docker 튜토리얼은 개발자 및 IT 전문가에게 컨테이너 기술에 대한 필수 지식을 제공합니다. Ubuntu 에서 Docker 를 설정하는 방법, 핵심 개념을 이해하는 방법, 다양한 컴퓨팅 환경에서 일관된 애플리케이션 배포를 위해 컨테이너화를 활용하는 방법을 배웁니다.
이 포괄적인 Docker 튜토리얼은 개발자 및 IT 전문가에게 컨테이너 기술에 대한 필수 지식을 제공합니다. Ubuntu 에서 Docker 를 설정하는 방법, 핵심 개념을 이해하는 방법, 다양한 컴퓨팅 환경에서 일관된 애플리케이션 배포를 위해 컨테이너화를 활용하는 방법을 배웁니다.
Docker 는 소프트웨어 배포 및 가상화를 혁신하는 강력한 컨테이너 기술 플랫폼입니다. 오픈소스 도구로서 Docker 는 개발자가 다양한 컴퓨팅 환경에서 애플리케이션을 일관되게 패키징, 배포 및 실행할 수 있도록 지원합니다.
Docker 는 개발자가 컨테이너를 사용하여 애플리케이션을 생성, 배포 및 실행할 수 있도록 하는 경량 가상화 기술입니다. 기존 가상 머신과 달리 컨테이너는 호스트 시스템의 커널을 공유하여 더 효율적이고 빠르게 시작할 수 있습니다.
| 구성 요소 | 설명 | 용도 |
|---|---|---|
| Docker Engine | 핵심 실행 환경 | 컨테이너 수명주기 관리 |
| Docker Image | 읽기 전용 템플릿 | 컨테이너 구성 정의 |
| Docker Container | 실행 가능한 인스턴스 | 애플리케이션 실행 |
## 패키지 인덱스 업데이트
sudo apt update
## 종속성 설치
sudo apt install apt-transport-https ca-certificates curl software-properties-common
## Docker 공식 GPG 키 추가
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
## 안정적인 리포지토리 설정
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## Docker Engine 설치
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
## Docker 버전 확인
docker --version
## Docker 설치 확인
docker run hello-world
## 실행 중인 컨테이너 목록
docker ps
## 모든 컨테이너 목록
docker ps -a
Docker 는 현대 소프트웨어 개발에 상당한 이점을 제공합니다.
Docker 이미지는 컨테이너를 생성하는 데 사용되는 읽기 전용 템플릿입니다. 애플리케이션 실행에 필요한 애플리케이션 코드, 런타임, 라이브러리, 환경 변수 및 구성 파일을 포함합니다.
Dockerfile 은 Docker 이미지를 빌드하는 지침이 포함된 텍스트 문서입니다. 각 지침은 이미지에 새로운 레이어를 생성합니다.
| 지침 | 목적 | 예시 |
|---|---|---|
| FROM | 베이스 이미지 지정 | FROM ubuntu:22.04 |
| RUN | 명령 실행 | RUN apt-get update |
| COPY | 파일 이미지 복사 | COPY ./app /application |
| WORKDIR | 작업 디렉토리 설정 | WORKDIR /application |
| CMD | 기본 명령 정의 | CMD ["python", "app.py"] |
## 공식 Python 런타임을 베이스 이미지로 사용
FROM python:3.9-slim
## 작업 디렉토리 설정
WORKDIR /app
## requirements 파일 복사
COPY requirements.txt .
## 종속성 설치
RUN pip install --no-cache-dir -r requirements.txt
## 애플리케이션 코드 복사
COPY . .
## 포트 노출
EXPOSE 5000
## 시작 명령 정의
CMD ["python", "app.py"]
## 태그가 지정된 이미지 빌드
docker build -t hello-world-app .
## 로컬 이미지 목록
docker images
## 생성된 이미지 실행
docker run -p 5000:5000 hello-world-app
## 특정 이미지 삭제
docker rmi hello-world-app
## 사용되지 않는 모든 이미지 삭제
docker image prune
## Docker Hub에서 이미지 가져오기
docker pull ubuntu:22.04
Docker 컨테이너는 생성부터 종료까지 여러 상태를 갖는 정의된 수명주기를 가지고 있습니다. 이러한 상태를 이해하는 것은 효과적인 컨테이너 관리에 필수적입니다.
| 명령어 | 기능 | 예시 |
|---|---|---|
| docker create | 컨테이너 생성 | docker create nginx |
| docker start | 컨테이너 시작 | docker start container_id |
| docker stop | 실행 중인 컨테이너 중지 | docker stop container_id |
| docker restart | 컨테이너 재시작 | docker restart container_id |
| docker rm | 컨테이너 제거 | docker rm container_id |
## 포그라운드에서 컨테이너 실행
docker run nginx
## 백그라운드에서 컨테이너 실행
docker run -d nginx
## 포트 매핑으로 컨테이너 실행
docker run -p 8080:80 nginx
## 사용자 지정 이름으로 컨테이너 실행
docker run --name web-server nginx
## 실행 중인 컨테이너 목록
docker ps
## 모든 컨테이너 목록
docker ps -a
## 컨테이너 로그 보기
docker logs container_id
## 컨테이너 세부 정보 검사
docker inspect container_id
## 컨테이너 리소스 사용량 모니터링
docker stats
## Docker 네트워크 목록
docker network ls
## 사용자 지정 네트워크 생성
docker network create mynetwork
## 컨테이너를 네트워크에 연결
docker network connect mynetwork container_id
## CPU 및 메모리 제한
docker run -d \
--cpus="1.5" \
--memory="512m" \
nginx
## 여러 컨테이너 인스턴스 생성
docker run -d -p 8001:80 nginx
docker run -d -p 8002:80 nginx
docker run -d -p 8003:80 nginx
## 볼륨 생성
docker volume create myvolume
## 컨테이너에 볼륨 마운트
docker run -v myvolume:/app/data nginx
## 환경 변수 설정
docker run -e DATABASE_URL=localhost nginx
Docker 는 애플리케이션 배포를 간소화하는 경량 및 휴대 가능한 컨테이너를 통해 소프트웨어 개발을 혁신합니다. Docker 의 핵심 구성 요소, 설치 프로세스 및 기본 명령어를 숙달함으로써 개발자는 최소한의 오버헤드와 최대의 유연성을 통해 더 효율적이고 확장 가능하며 재현 가능한 소프트웨어 환경을 만들 수 있습니다.