Docker Image, Docker Container
Docker 이미지: Docker Container 서비스를 위한 이미지로, Container 런타임에 필요한 바이너리, 라이브러리 및 설정 값 등을 포함하고, 변경되는 상태값을 보유하지 않고 변하지 않는다. 따라서 불변성, 상태 저장이 없다.
Docker Image와 Docker Container의 관계
Image: 컨테이너에 대한 OS, Application, Library 등등의 정보를 담고 있음
Container: Image를 실행한 상태. 1개의 Image로부터 N개의 Container를 생성할 수 있는 1:N의 관계.
Dockerfile
Dockerfile: APP을 컨테이너로 만들 때 이미지를 만드는 용도로 사용된다. 이를 통해 앱이 필요로 하는 모든 것을 한 곳에 담을 수 있게 된다.
그리고 같은 앱 환경을 쉽게 만들 수 있으며, 앱을 만드는 과정을 자동화할 수 있다.
# Dockerfile 예시
FROM ubuntu:latest // FROM: 베이스 이미지 선택
MAINTAINER Your Name <your-email@example.com> // MAINTAINER: 이미지를 만든 사람의 정보를 입력
RUN apt-get update && apt-get install -y nginx // RUN: 이미지에 명령을 실행하여 파일을 추가하거나 삭제
COPY index.html /usr/share/nginx/html// COPY: 파일을 이미지에 복사
EXPOSE 80 // EXPOSE: 컨테이너가 노출할 포트 설정
CMD ["nginx", "-g", "daemon off;"] // CMD: 실행할 명령을 설정
이외의 명령어
LABEL: 이미지에 메타데이터를 추가 // LABEL purpose='nginx test'
ENTRYPOINT: 컨테이너 시작할 때 실행할 명령어를 입력 // ENTRYPOINT ["npm", "start"]
ENV: 환경 변수 설정 // ENV STAGE staging or ENV JAVA_HOME /usr/lib/jvm/java-8-oracle
WORKDIR: 작업 디렉터리 지정 // WORKDIR /app
USER: 사용자 설정
//RUN ["useradd", "user"]
USER user
RUN ["/bin/bash, "-c", "ls"]
Docker Compose
Docker Compose: 여러 컨테이너를 더 쉽게 관리, 자동 설정, 확장, 보안 강화 등 여러 컨테이너를 한 파일에 적어서 관리 가능
Compose 파일은 앱이 필요로 하는 모든 서비스들(데이터베이스, 큐, 캐시, 웹 API 등)을 정리해 주고, docker compose up 명령어로 이 모든 것을 한 번에 시작 가능
Docker Compose는 기본적으로 새 브리지 네트워크를 생성하여 각 서비스 컨테이너를 그 네트워크에 연결함. 이 네트워크는 docker-compose.yml 파일에 정의된 모든 서비스가 서로 통신할 수 있도록 함.
장점
- 한번에 여러 컨테이너 설정 가능: YAML 파일 하나로 여러 컨테이너의 모든 환경을 설정하고 한 번에 실행 가능
- 빠른 서비스 실행
- 같은 네트워크에서 쉽게 연결 가능
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
app:
build: .
ports:
- "8081:8080"
depends_on:
- db
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
- `version`: Docker Compose 파일의 버전을 지정합니다.
- `services`: 애플리케이션의 각 서비스를 정의합니다.
- `web`, `app`, `db`: 각각의 서비스 이름입니다.
- `image`: 서비스를 실행할 Docker 이미지를 지정합니다.
- `build`: Dockerfile이 있는 디렉토리 경로를 지정하여 이미지를 빌드합니다.
- `ports`: 호스트와 컨테이너 간의 포트를 매핑합니다.
- `depends_on`: 다른 서비스가 먼저 실행되어야 하는 순서를 지정합니다.
- `environment`: 컨테이너의 환경 변수를 설정합니다.
Docker compose 명령어
docker compose up: yml 파일에 정의된 서비스를 빌드하고 시작함.
docker compose down: 실행 중인 모든 서비스를 중지하고 컨테이너, 네트워크, 볼륨 등을 정리함.
CI/CD
CI: 개발자가 변경한 코드를 자주 통합하고, 이 코드가 전체 시스템과 잘 어우러지는지 자동으로 테스트하는 프로세스
CD: CI의 결과물을 사용자에게 자동으로 배포한느 프로세스를 포함함. 코드 변경이 통합되고 테스트를 통과하면, 이를 자동으로 스테이징 환경 또는 프로덕션 환경에 배포함.
장점
- 빠른 피드백
- 자동화된 프로세스
- 일관된 배포
- 높은 품질 유지
- 개발 속도 향상
CI/CD 도구
Github Actions CI/CD
Github Actions: Github에 내장된 CI/CD 도구로, YAML 파일을 사용하여 워크 플로우를 정의함.
- Github 저장소와의 강력한 통합
- 다양한 이벤트 기반 트리거
- 풍부한 커뮤니티 및 Marketplace 지원
- 무료 사용 가능
Jenkins
오픈 소스 CI/CD 도구로, 플러그인을 통해 다양한 기능 확장 가능
- 대규모 프로젝트에 적합
- 분산 빌드 및 다중 플랫폼 지원
- 다양한 플러그인 지원
GitLab CI
GitLab과 통합된 CI/CD 도구로, GitLab 저장소를 기반으로 CI/CD 파이프라인을 설정
- GitLab과의 통합
- 강력한 파이프라인 편집기 제공
- 자동화된 DevOps 수명 주기 관리
- 클라우드 및 온프레미스 모두 지원
Amazon ECS란?
Docker 애플리케이션을 쉽게배포하고 운영 할 수 있도록 지원하는 완전관리형 Container Orchestration 서비스
ECS 구성 요소
- ECR: Docker image 저장소
- ECS Cluster: 컨테이너를 실행하기 위한 Cluster로 여러 인스턴스로 이루어져 Docker Container가 분산 실행됨
- ECS Server: Docker APP 실행 그룹
- ECS Task: ECS Server에 실제로 실행되는 docker container들
'심화_AI를 활용한 백엔드 아키텍처 심화 과정' 카테고리의 다른 글
| [내일배움캠프 사전캠프] 22회차 TIL(7/24 금) - Spring Session, Redis Cache (0) | 2026.07.24 |
|---|---|
| [내일배움캠프 사전캠프] 21회차 TIL(7/23 목) - Redis (0) | 2026.07.23 |
| [내일배움캠프 사전캠프] 19회차 TIL(7/21 화) - Docker Image, Container (0) | 2026.07.21 |
| [내일배움캠프 사전캠프] 18회차 TIL(7/16 목) - 스프링 컨테이너 (0) | 2026.07.16 |
| [내일배움캠프 사전캠프] 17회차 TIL(7/15 수) (0) | 2026.07.15 |