이동건-2

이동건-2

 

[따배도] 3-1. 도커 컨테이너 살펴보기: 이론편

 

🐳 도커 컨테이너와 컨테이너 이미지의 이해

1. 컨테이너 이미지란?

컨테이너 이미지는 애플리케이션을 실행하기 위한 모든 요소—운영체제 환경, 라이브러리, 실행 파일, 애플리케이션 코드—가 포함된 읽기 전용(immutable) 파일 집합입니다.
이 이미지는 디스크에 저장되며, 여러 개의 **레이어(layer)**로 구성됩니다. 가장 하단에는 OS 환경을 정의하는 베이스 이미지가 위치하고, 그 위에 애플리케이션 실행에 필요한 파일들이 단계적으로 쌓여 최종 이미지를 이룹니다.


2. 컨테이너란?

컨테이너는 컨테이너 이미지를 실행하여 메모리 상에서 동작하는 독립적인 프로세스입니다.
컨테이너는 동일한 리눅스 커널을 공유하지만, NamespaceCGroup 기술을 통해 격리된 환경에서 실행됩니다. 따라서 하나의 호스트 시스템에서도 여러 개의 컨테이너가 서로 영향을 주지 않고 동시에 실행될 수 있습니다.


3. 컨테이너 이미지와 컨테이너의 차이

구분

컨테이너 이미지

컨테이너

구분

컨테이너 이미지

컨테이너

저장 위치

디스크 (파일 형태)

메모리 (실행 중 상태)

읽기/쓰기

읽기 전용

읽기/쓰기 가능

역할

실행 전 상태의 설계도

실제 실행되는 애플리케이션 환경

수량

하나의 이미지로 여러 개 컨테이너 생성 가능

실행될 때마다 독립적인 컨테이너 생성


4. 도커의 작동 구조

도커는 크게 세 가지 구성 요소로 나뉩니다:

  • 도커 클라이언트: 명령어를 입력하는 인터페이스

  • 도커 데몬(Docker Daemon): 컨테이너 생성 및 관리 기능 담당

  • 도커 호스트: 도커 데몬이 실행되는 시스템

사용자는 도커 클라이언트를 통해 명령을 내리고, 도커 데몬은 이미지를 기반으로 컨테이너를 생성합니다. 이 과정에서 필요한 이미지는 Docker Hub 또는 사설 저장소에서 가져올 수 있습니다.


5. 컨테이너 실행 예시

Node.js 웹 서버를 실행하는 경우를 예로 들면:

  1. docker pull node:latest 명령어로 Node.js 베이스 이미지 다운로드

  2. 앱 코드를 포함한 새로운 이미지 생성

  3. docker run -p 80:3000 my-app 명령어로 컨테이너 실행

  4. 사용자는 브라우저를 통해 http://localhost에 접속 → 컨테이너가 응답


6. 도커의 장점

  • 이미지 기반으로 일관된 환경 보장

  • 실행 속도가 빠르고, 리소스 사용이 효율적

  • 호스트 시스템과 격리된 환경 제공

  • CI/CD 파이프라인에 적합한 자동화 및 확장성

 


 

[따배도] 4-1. 도커 컨테이너 만들어보기: 이론편

 

🐳 도커 컨테이너 생성 방법 및 Dockerfile 활용 정리

1. ✅ 도커 컨테이너 생성 방법

도커 컨테이너는 애플리케이션과 실행 환경을 하나의 단위로 패키징한 독립 실행 환경입니다.
이를 생성하기 위해 가장 먼저 Dockerfile이라는 텍스트 파일을 작성해야 하며, 이후 다음 절차로 진행됩니다:

  1. Dockerfile 작성: 베이스 이미지, 복사할 파일, 실행 명령 등을 명시

  2. 이미지 빌드: docker build 명령어로 이미지 생성

  3. 컨테이너 실행: docker run 명령어로 이미지 기반 컨테이너 실행

💡 Dockerfile은 컨테이너 이미지의 ‘설계도’ 역할을 합니다.


2. 📄 Dockerfile 개요와 주요 지시어

Dockerfile은 컨테이너 이미지를 정의하는 명령어들의 집합이며, 위에서 아래로 순차적으로 해석됩니다.
파일 이름은 반드시 "Dockerfile"이며, 확장자는 없습니다.

지시어

설명

지시어

설명

#

주석 작성

FROM

베이스 이미지 지정 (예: node:14, python:3.9)

COPY, ADD

로컬 파일을 이미지에 복사
ADD는 URL/압축 해제 기능 추가 제공

RUN

빌드 시 실행할 명령어 (예: 패키지 설치 등)

CMD

컨테이너 시작 시 실행할 기본 명령어 (변경 가능)

ENTRYPOINT

CMD와 유사하나 명령어 고정 (사용자 입력 명령과 결합 가능)

ENV, ARG

환경 변수 정의 (ENV는 런타임 지속, ARG는 빌드 시점)

USER

명령어 실행 사용자 지정 (보안 목적)

EXPOSE

컨테이너가 사용하는 포트 명시

VOLUME

데이터 영속성 보장을 위한 디렉토리 지정

LABEL, MAINTAINER

이미지 메타 정보 정의 (설명, 작성자 등)


3. 🧱 도커 컨테이너 개발 예시

목표: Node.js 애플리케이션을 실행하는 컨테이너 생성
구성: hello.js 파일과 아래와 같은 Dockerfile

FROM node:12 WORKDIR /app COPY hello.js . CMD ["node", "hello.js"]

빌드 및 실행 절차:

docker build -t hello-js-test . docker run hello-js-test

이 과정을 통해 hello-js-test 이미지를 생성하고, 실행 가능한 컨테이너를 얻을 수 있습니다.


4. ☁️ 컨테이너 배포

생성한 이미지는 Docker Hub에 배포하여 다른 사용자 또는 팀과 공유할 수 있습니다.

docker login # 인증 docker tag hello-js-test user/hello-js # 이미지 태깅 docker push user/hello-js # 도커허브 업로드

팀/조직 내 사설 레지스트리로도 배포 가능


5. 📌 Dockerfile 활용 예시 – MySQL 컨테이너

MySQL 8.0.23 버전의 Dockerfile 예시에서는 다음 설정들이 사용됩니다:

  • 베이스 이미지: debian

  • EXPOSE 3306: MySQL 기본 포트 노출

  • VOLUME /var/lib/mysql: 데이터 보존을 위한 경로 마운트

이러한 설정은 컨테이너 내에서 데이터 지속성 유지, 외부 연결 허용, 구성 자동화를 위한 핵심 요소입니다.


6. 🧠 활용 정리 및 실습 필요성

Dockerfile을 활용하면 운영체제, 환경설정, 애플리케이션 실행을 자동화할 수 있어,
DevOps 파이프라인, 마이크로서비스 개발, 클라우드 배포 환경에서 필수적으로 사용됩니다.

실제 프로젝트 기반 실습을 통해 다음을 체득할 수 있습니다:

  • 지시어 간 우선순위와 결합 방식 이해

  • 복잡한 애플리케이션 환경 구성

  • 다중 컨테이너 연동 (Compose 연계)

 


[따배도] 5-1. 컨테이너 보관창고 - 이론편

 

📦 도커 레지스트리(Docker Registry) 개요 및 종류

1. ✅ 도커 레지스트리란?

도커 레지스트리는 컨테이너 이미지 저장소를 의미합니다.
사용자는 도커 이미지 파일을 푸시(push)하거나 풀(pull)하여 애플리케이션을 배포하고 공유할 수 있습니다.

레지스트리는 크게 다음 두 가지로 구분됩니다:

구분

설명

구분

설명

도커 허브 (Docker Hub)

도커에서 운영하는 공개 레지스트리
공식 및 사용자 이미지 저장 가능

프라이빗 레지스트리

기업이나 개인이 로컬 또는 클라우드에 구축한 비공개 저장소


2. 🌐 도커 허브의 특징 및 활용

도커 허브(Docker Hub)는 가장 널리 사용되는 퍼블릭 도커 레지스트리입니다.

  • 이미지 규모: 10만 개 이상의 컨테이너 이미지 저장

  • 공식 이미지 제공: nginx, mysql, redis 등 도커 인증 이미지 제공

  • 사용자 기능:

    • 계정 생성 후 개인 레포지토리 운영 가능

    • docker search 명령이나 웹 UI로 이미지 탐색 가능

  • 프라이빗 저장소 제공: 무료 계정은 제한적, 유료 요금제로 확장 가능

📋 도커 허브 활용 흐름

  1. hub.docker.com 접속 → 계정 생성

  2. docker login → 클라이언트 인증

  3. docker push, docker pull로 이미지 업로드 및 다운로드

  4. 레포지토리 단위로 권한 관리 가능

퍼블릭 저장소는 누구나 다운로드 가능하지만 업로드 권한은 본인에게만 있음


3. 🏢 프라이빗 레지스트리의 특징 및 구축

프라이빗 레지스트리는 자체 서버 또는 클라우드에서 운영하는 사설 저장소입니다. 보안 또는 사내 전용 이미지 관리 목적에 적합합니다.

✔️ 주요 특징

  • 완전한 사내 관리 가능: 인터넷 없이도 배포 가능

  • 레지스트리 컨테이너 기반 구축: registry 이미지 사용

  • 보안 및 접근제어 설정 가능 (예: Basic Auth, TLS)

🛠 구축 예시

docker run -d -p 5000:5000 --restart always --name my-registry registry:2
  • localhost:5000이 프라이빗 레지스트리 주소가 됨

  • 이미지를 푸시할 때는 명시적 주소 지정 필요:

# 예시: 프라이빗 레지스트리에 이미지 푸시 docker tag my-image localhost:5000/my-image docker push localhost:5000/my-image

포트가 80이 아닌 경우, 반드시 레포지토리 이름에 포함해야 함


4. 🔍 도커 허브 vs 프라이빗 레지스트리 비교

항목

Docker Hub

프라이빗 레지스트리

항목

Docker Hub

프라이빗 레지스트리

접근 범위

퍼블릭 (기본), 프라이빗 (유료)

조직 내부 (사설망 가능)

설치 필요

❌ 웹 서비스 기반

⭕ 컨테이너 설치 필요

인증/보안

기본 제공 (OAuth, 2FA)

직접 설정 필요 (Basic Auth, TLS 등)

운영 주체

Docker Inc.

사용자(기업)

사용 목적

오픈소스 공유, 개인 배포

내부 배포, 보안 관리 목적


5. 🎯 실무 활용 팁

  • 도커 허브는 표준화된 이미지 관리, CI/CD 연동에 유리함

  • 프라이빗 레지스트리는 보안이 중요한 조직, 사내망 환경에 적합

  • Docker Compose, Kubernetes 등 오케스트레이션 도구와 연계해 활용 가능

  • 실습 시 registry 컨테이너를 직접 띄워 테스트 환경 구성 가능

 


 

[따배도] 6-1. Docker 컨테이너 사용하기 - 이론편

 

🐳 도커 컨테이너 사용 이론 정리

1. ✅ 세 가지 핵심 주제

도커 컨테이너를 사용하는 과정은 아래의 세 가지 주제로 구성됩니다:

구분

내용

관련 명령어

구분

내용

관련 명령어

  1. 컨테이너 이미지 관리

이미지를 검색하고 다운로드, 확인 및 삭제

docker search, docker pull, docker images, docker inspect, docker rmi

  1. 컨테이너 실행

컨테이너 생성 및 실행

docker create, docker start, docker run

  1. 실행 중인 컨테이너 관리

실행 상태 확인, 로그 조회, 명령 실행

docker ps, docker top, docker logs, docker exec


2. 📦 컨테이너 이미지 사용 및 관리

컨테이너 이미지는 도커 허브와 같은 레지스트리에서 검색 후 다운로드 받아 사용합니다.

  • 검색 및 다운로드:

    docker search nginx docker pull nginx:latest
  • 이미지 목록 확인 및 삭제:

    docker images docker inspect nginx docker rmi nginx

docker pull 시 태그 생략 시 기본값은 latest가 사용됩니다.


3. 🛠️ 도커 컨테이너 생성 및 실행

다운로드한 이미지를 바탕으로 컨테이너를 생성하고 실행하는 과정입니다.

  • 분리된 명령어 방식:

    docker create --name myweb nginx docker start myweb
  • 한 줄 실행 방식:

    docker run --name myweb -d nginx

docker run은 pull → create → start 를 한 번에 처리하는 종합 명령어입니다.

  • 상태 확인 및 정지, 삭제:

    docker ps -a # 컨테이너 상태 확인 docker stop myweb # 실행 중지 docker rm myweb # 컨테이너 삭제

※ 컨테이너를 삭제해도 이미지는 남아 있으며, 재사용이 가능합니다.


4. 🔍 실행 중 컨테이너 관리

컨테이너 실행 이후에는 모니터링 및 내부 명령 실행 등 다양한 관리 작업이 필요합니다.

목적

명령어

설명

목적

명령어

설명

상태 확인

docker ps

현재 실행 중인 컨테이너 목록

프로세스 확인

docker top <컨테이너명>

내부 실행 중인 프로세스 확인

로그 확인

docker logs <컨테이너명>

실행 중 로그 출력

명령 실행

docker exec -it <컨테이너명> bash

컨테이너 내부에 명령어 실행 (쉘 접속 등)

예: 웹 서버 로그 확인, 데이터베이스 상태 확인 등 실시간 디버깅 가능


5. 🧠 전체 흐름 요약

  1. 이미지 검색 및 다운로드: docker search / docker pull

  2. 컨테이너 생성 및 실행: docker create + start or docker run

  3. 상태 확인 및 관리: docker ps, logs, exec, stop, rm