Docker 기초 쉽게 배우기

DockerBeginner
지금 연습하기

소개

이 포괄적인 Docker 튜토리얼은 개발자 및 IT 전문가에게 컨테이너 기술에 대한 기본적인 이해를 제공합니다. Docker 의 핵심 개념, 설치 절차 및 실용적인 명령줄 기술을 탐색함으로써 학습자는 다양한 컴퓨팅 환경에서 애플리케이션을 패키징, 배포 및 관리하는 실질적인 기술을 습득하게 됩니다.

Docker 기본 개념

Docker 및 컨테이너 기술 소개

Docker 는 컨테이너화를 위한 강력한 플랫폼으로, 개발자가 다양한 컴퓨팅 환경에서 애플리케이션을 일관되게 패키징, 배포 및 실행할 수 있도록 지원합니다. 현대 소프트웨어 배포의 핵심 도구로서 Docker 는 애플리케이션 생성, 관리 및 확장 프로세스를 간소화합니다.

Docker 의 핵심 개념

graph TD
    A[Docker 이미지] --> B[Docker 컨테이너]
    A --> C[Dockerfile]
    B --> D[컨테이너 런타임]

Docker 는 다음과 같은 몇 가지 기본 개념을 도입합니다.

개념 설명
Docker 이미지 애플리케이션 코드와 종속성이 포함된 읽기 전용 템플릿
Docker 컨테이너 이미지의 실행 가능한 인스턴스
Dockerfile 이미지 빌드 지침을 정의하는 텍스트 파일
Docker 레지스트리 이미지를 저장하고 공유하는 저장소

Ubuntu 22.04 에서의 설치

## 패키지 인덱스 업데이트
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 엔진 설치
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

기본 Docker 명령어

## Docker 버전 확인

## Docker Hub에서 이미지 가져오기

## 사용 가능한 이미지 목록

## 컨테이너 실행

## 실행 중인 컨테이너 목록

## 컨테이너 중지

실습 예제: 간단한 웹 애플리케이션 실행

## Nginx 이미지 가져오기
docker pull nginx:latest

## Nginx 컨테이너 실행
docker run -d -p 8080:80 nginx:latest

## 컨테이너 실행 확인
docker ps

이 예제는 Docker 를 사용하여 웹 서버를 빠르게 배포하는 방법을 보여주며, 소프트웨어 배포에서의 간편성과 효율성을 보여줍니다.

컨테이너 관리

컨테이너 수명주기 작업

Docker 는 컨테이너 수명주기를 효율적으로 제어하고 조작할 수 있도록 개발자에게 포괄적인 도구를 제공합니다.

graph LR
    A[생성됨] --> B[실행 중]
    B --> C[중지됨]
    C --> D[제거됨]
    D --> E[재시작됨]

컨테이너 관리 명령어

명령어 기능 예시
docker create 컨테이너 생성 docker create nginx
docker start 중지된 컨테이너 시작 docker start <컨테이너_ID>
docker stop 실행 중인 컨테이너 중지 docker stop <컨테이너_ID>
docker restart 컨테이너 재시작 docker restart <컨테이너_ID>
docker rm 컨테이너 제거 docker rm <컨테이너_ID>

고급 컨테이너 제어

## 사용자 지정 이름으로 컨테이너 실행
docker run --name web-server -d nginx:latest

## 컨테이너 세부 정보 확인
docker inspect web-server

## 컨테이너 로그 보기
docker logs web-server

## 실행 중인 컨테이너 내부에서 명령 실행
docker exec -it web-server /bin/bash

컨테이너 리소스 관리

## 컨테이너 CPU 및 메모리 제한
docker run -d --cpus=0.5 --memory=512m nginx:latest

## 리소스 사용량과 함께 실행 중인 컨테이너 목록
docker stats

이미지 관리 작업

## 로컬 이미지 목록
docker images

## 특정 이미지 제거
docker rmi nginx:latest

## 사용되지 않는 이미지 제거
docker image prune

## 특정 이미지 버전 가져오기
docker pull ubuntu:20.04

컨테이너 네트워크 관리

## 사용자 지정 네트워크 생성
docker network create mynetwork

## 특정 네트워크에서 컨테이너 실행
docker run --network=mynetwork nginx:latest

고급 Docker 기술

다단계 빌드

다단계 빌드는 Dockerfile 의 복잡성을 최적화하고 최종 이미지 크기를 줄입니다.

## 빌드 단계
FROM golang:1.17 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

## 프로덕션 단계
FROM alpine:latest
COPY --from=builder /app/myapp /usr/local/bin/
CMD ["myapp"]

Docker Compose 워크플로우

graph LR
    A[Docker Compose 파일] --> B[서비스 정의]
    B --> C[컨테이너 오케스트레이션]
    C --> D[네트워크 연결 애플리케이션]

Compose 구성 예제

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  database:
    image: postgres:12
    environment:
      POSTGRES_PASSWORD: secret

성능 최적화 기법

기법 설명
계층 캐싱 계층 재구성 최소화
.dockerignore 불필요한 파일 제외
Alpine 이미지 최소한의 기본 이미지 사용

고급 네트워킹

## 사용자 지정 브리지 네트워크 생성
docker network create --driver bridge isolated_network

## 특정 네트워크에 컨테이너 연결
docker run --network=isolated_network nginx:latest

볼륨 관리 전략

## 이름이 지정된 볼륨 생성
docker volume create app-data

## 컨테이너에 볼륨 마운트
docker run -v app-data:/var/lib/data nginx:latest

컨테이너 모니터링

## 실시간 컨테이너 메트릭

## 컨테이너 로그 검사

보안 권장 사항

## 비루트 사용자로 컨테이너 실행
docker run --user 1000 nginx:latest

## 읽기 전용 파일 시스템 설정
docker run --read-only nginx:latest

요약

Docker 는 컨테이너화를 위한 일관되고 효율적인 플랫폼을 제공하여 소프트웨어 배포 방식을 혁신합니다. 이 튜토리얼을 통해 독자들은 Docker 이미지, 컨테이너, Dockerfile 기본 개념과 함께 Docker 설치, 컨테이너 관리, 웹 애플리케이션 실행 등의 실질적인 기술을 배웠습니다. 이러한 기술은 현대 소프트웨어 개발 및 인프라 관리의 중요한 기반을 형성합니다.