이동건-2
[따배도] 3-1. 도커 컨테이너 살펴보기: 이론편
🐳 도커 컨테이너와 컨테이너 이미지의 이해
1. 컨테이너 이미지란?
컨테이너 이미지는 애플리케이션을 실행하기 위한 모든 요소—운영체제 환경, 라이브러리, 실행 파일, 애플리케이션 코드—가 포함된 읽기 전용(immutable) 파일 집합입니다.
이 이미지는 디스크에 저장되며, 여러 개의 **레이어(layer)**로 구성됩니다. 가장 하단에는 OS 환경을 정의하는 베이스 이미지가 위치하고, 그 위에 애플리케이션 실행에 필요한 파일들이 단계적으로 쌓여 최종 이미지를 이룹니다.
2. 컨테이너란?
컨테이너는 컨테이너 이미지를 실행하여 메모리 상에서 동작하는 독립적인 프로세스입니다.
컨테이너는 동일한 리눅스 커널을 공유하지만, Namespace와 CGroup 기술을 통해 격리된 환경에서 실행됩니다. 따라서 하나의 호스트 시스템에서도 여러 개의 컨테이너가 서로 영향을 주지 않고 동시에 실행될 수 있습니다.
3. 컨테이너 이미지와 컨테이너의 차이
구분 | 컨테이너 이미지 | 컨테이너 |
---|---|---|
저장 위치 | 디스크 (파일 형태) | 메모리 (실행 중 상태) |
읽기/쓰기 | 읽기 전용 | 읽기/쓰기 가능 |
역할 | 실행 전 상태의 설계도 | 실제 실행되는 애플리케이션 환경 |
수량 | 하나의 이미지로 여러 개 컨테이너 생성 가능 | 실행될 때마다 독립적인 컨테이너 생성 |
4. 도커의 작동 구조
도커는 크게 세 가지 구성 요소로 나뉩니다:
도커 클라이언트: 명령어를 입력하는 인터페이스
도커 데몬(Docker Daemon): 컨테이너 생성 및 관리 기능 담당
도커 호스트: 도커 데몬이 실행되는 시스템
사용자는 도커 클라이언트를 통해 명령을 내리고, 도커 데몬은 이미지를 기반으로 컨테이너를 생성합니다. 이 과정에서 필요한 이미지는 Docker Hub 또는 사설 저장소에서 가져올 수 있습니다.
5. 컨테이너 실행 예시
Node.js 웹 서버를 실행하는 경우를 예로 들면:
docker pull node:latest
명령어로 Node.js 베이스 이미지 다운로드앱 코드를 포함한 새로운 이미지 생성
docker run -p 80:3000 my-app
명령어로 컨테이너 실행사용자는 브라우저를 통해
http://localhost
에 접속 → 컨테이너가 응답
6. 도커의 장점
이미지 기반으로 일관된 환경 보장
실행 속도가 빠르고, 리소스 사용이 효율적
호스트 시스템과 격리된 환경 제공
CI/CD 파이프라인에 적합한 자동화 및 확장성
[따배도] 4-1. 도커 컨테이너 만들어보기: 이론편
🐳 도커 컨테이너 생성 방법 및 Dockerfile 활용 정리
1. ✅ 도커 컨테이너 생성 방법
도커 컨테이너는 애플리케이션과 실행 환경을 하나의 단위로 패키징한 독립 실행 환경입니다.
이를 생성하기 위해 가장 먼저 Dockerfile이라는 텍스트 파일을 작성해야 하며, 이후 다음 절차로 진행됩니다:
Dockerfile 작성: 베이스 이미지, 복사할 파일, 실행 명령 등을 명시
이미지 빌드:
docker build
명령어로 이미지 생성컨테이너 실행:
docker run
명령어로 이미지 기반 컨테이너 실행
💡 Dockerfile은 컨테이너 이미지의 ‘설계도’ 역할을 합니다.
2. 📄 Dockerfile 개요와 주요 지시어
Dockerfile은 컨테이너 이미지를 정의하는 명령어들의 집합이며, 위에서 아래로 순차적으로 해석됩니다.
파일 이름은 반드시 "Dockerfile"
이며, 확장자는 없습니다.
지시어 | 설명 |
---|---|
| 주석 작성 |
| 베이스 이미지 지정 (예: |
| 로컬 파일을 이미지에 복사 |
| 빌드 시 실행할 명령어 (예: 패키지 설치 등) |
| 컨테이너 시작 시 실행할 기본 명령어 (변경 가능) |
| CMD와 유사하나 명령어 고정 (사용자 입력 명령과 결합 가능) |
| 환경 변수 정의 ( |
| 명령어 실행 사용자 지정 (보안 목적) |
| 컨테이너가 사용하는 포트 명시 |
| 데이터 영속성 보장을 위한 디렉토리 지정 |
| 이미지 메타 정보 정의 (설명, 작성자 등) |
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로 이미지 탐색 가능
프라이빗 저장소 제공: 무료 계정은 제한적, 유료 요금제로 확장 가능
📋 도커 허브 활용 흐름
hub.docker.com 접속 → 계정 생성
docker login
→ 클라이언트 인증docker push
,docker pull
로 이미지 업로드 및 다운로드레포지토리 단위로 권한 관리 가능
퍼블릭 저장소는 누구나 다운로드 가능하지만 업로드 권한은 본인에게만 있음
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 | 프라이빗 레지스트리 |
---|---|---|
접근 범위 | 퍼블릭 (기본), 프라이빗 (유료) | 조직 내부 (사설망 가능) |
설치 필요 | ❌ 웹 서비스 기반 | ⭕ 컨테이너 설치 필요 |
인증/보안 | 기본 제공 (OAuth, 2FA) | 직접 설정 필요 (Basic Auth, TLS 등) |
운영 주체 | Docker Inc. | 사용자(기업) |
사용 목적 | 오픈소스 공유, 개인 배포 | 내부 배포, 보안 관리 목적 |
5. 🎯 실무 활용 팁
도커 허브는 표준화된 이미지 관리, CI/CD 연동에 유리함
프라이빗 레지스트리는 보안이 중요한 조직, 사내망 환경에 적합
Docker Compose
,Kubernetes
등 오케스트레이션 도구와 연계해 활용 가능실습 시
registry
컨테이너를 직접 띄워 테스트 환경 구성 가능
[따배도] 6-1. Docker 컨테이너 사용하기 - 이론편
🐳 도커 컨테이너 사용 이론 정리
1. ✅ 세 가지 핵심 주제
도커 컨테이너를 사용하는 과정은 아래의 세 가지 주제로 구성됩니다:
구분 | 내용 | 관련 명령어 |
---|---|---|
| 이미지를 검색하고 다운로드, 확인 및 삭제 |
|
| 컨테이너 생성 및 실행 |
|
| 실행 상태 확인, 로그 조회, 명령 실행 |
|
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. 🔍 실행 중 컨테이너 관리
컨테이너 실행 이후에는 모니터링 및 내부 명령 실행 등 다양한 관리 작업이 필요합니다.
목적 | 명령어 | 설명 |
---|---|---|
상태 확인 |
| 현재 실행 중인 컨테이너 목록 |
프로세스 확인 |
| 내부 실행 중인 프로세스 확인 |
로그 확인 |
| 실행 중 로그 출력 |
명령 실행 |
| 컨테이너 내부에 명령어 실행 (쉘 접속 등) |
예: 웹 서버 로그 확인, 데이터베이스 상태 확인 등 실시간 디버깅 가능
5. 🧠 전체 흐름 요약
이미지 검색 및 다운로드:
docker search
/docker pull
컨테이너 생성 및 실행:
docker create + start
ordocker run
상태 확인 및 관리:
docker ps
,logs
,exec
,stop
,rm