이미지 관리

컨테이너 실행 및 관리

컨테이너 접속 및 로그

Dockerfile 작성 및 이미지 빌드

# FROM: 베이스 이미지
# RUN: 빌드 시 실행할 명령어
# COPY: 파일 복사
# CMD: 컨테이너 실행 시 기본 명령어

| Vulnbank를 참고해서 보자


FROM python:3.9-slim
# Install PostgreSQL client

RUN apt-get update && apt-get install -y \
    postgresql-client \
    && rm -rf /var/lib/apt/lists/*
# 필요한 패키지 설치하고
WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# requirement대로 설치해주고
# Create necessary directories
RUN mkdir -p static/uploads templates

COPY . .

# Ensure uploads directory exists and has proper permissions
RUN chmod 777 static/uploads

EXPOSE 5000

CMD ["python", "app.py"]

| 네트워크


NETWORK ID     NAME                     DRIVER    SCOPE
5e9d0947ab6f   bridge                   bridge    local
0cca623fb9cd   host                     host      local
3e0d058381c6   none                     null      local
9396611e7ba5   vuln-bank_vuln_network   bridge    local

vuln-bank_vuln_network 라는 가상의 브릿지를 만듦

| 여기서 잠깐, Bridge 타입이란?

[
    {
        "Name": "vuln-bank_vuln_network",
        "Id": "9396611e7ba50aae7a782bc8bc4aeb85f6e2c724ea9094f35023796a9700fcc6",
        "Created": "2026-03-19T15:29:31.654975979Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv4": true,
        "EnableIPv6": false,
        "IPAM": { // Ip Address Management
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16", // 서브넷 설정
                    "Gateway": "172.18.0.1" // 게이트웨이
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "com.docker.network.enable_ipv4": "true",
            "com.docker.network.enable_ipv6": "false"
        },
        "Labels": {
            "com.docker.compose.config-hash": "3f21f301bd655b82f3816f6d2b83582bce223c33a2f24a3ab950591ffa60b716",
            "com.docker.compose.network": "vuln_network",
            "com.docker.compose.project": "vuln-bank",
            "com.docker.compose.version": "2.37.1"
        }
    }
]

볼륨, volume

| 여기서 잠깐, volume이란?

DRIVER    VOLUME NAME
local     vuln-bank_postgres_data

Docker Compose

services:
  web:
    build: .
    ports:
      - "5000:5000" # 호스트포트: 컨테이너 포트 연결
      - "80:5000"
      # - "443:5000"
    environment:
      - DB_NAME=vulnerable_bank
      - DB_USER=postgres
      - DB_PASSWORD=postgres
      - DB_HOST=db
      - DB_PORT=5432
    depends_on:
      - db
    volumes:
      - ./static/uploads:/app/static/uploads
    networks:
      - vuln_network

  db:
    image: postgres:13
    environment:
      - POSTGRES_DB=vulnerable_bank
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - vuln_network

volumes:
  postgres_data:

networks:
  vuln_network:
    driver: bridge

DevSecOps 특화 명령어

추후 추가 예정