이미지 관리
-
docker pull ~~
- 이미지를 다운로드한다.
- https://hub.docker.com/r/legendwon/cau-mid
-
docker images
- 로컬 이미지 목록 확인

-
docker inspect [이미지 ID]
- 이미지 상세 정보 확인
- 해시값, ENV 등등 설정 등 확인 가능하다.
-
docker rmi nginx:latest
- 이미지 삭제
-
docker history <이미지 ID>
컨테이너 실행 및 관리
-
docker run nginx
- 기본 실행
- 백그라운드 실행할려면 -d
-
docker run -d -p 8080:80 nginx
- 포트 매팅(-p 호스트포트:컨테이너포트)
-
docker run -d -v /my/html:/user/share/nginx/html -p 8080:80 nginx
- 내 코드를 수정해서 컨테이너내 바로 적용 가능
-
docker ps
-
docker rm nginx
- 컨테이너 삭제
컨테이너 접속 및 로그
-
docker exec -it <컨테이너 ID> /bin/bash
- 컨테이너 내부 접속
-
docker logs <컨테이너ID>
- 로그 확인
-
docker stats
- 컨테이너 리소스 사용량
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"]
| 네트워크
- docker network ls
- 네트워크 목록 확인
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 라는 가상의 브릿지를 만듦
- docker network create my-network
- 네트워크 생성(Bridge 타입)
| 여기서 잠깐, Bridge 타입이란?
-
Docker의 기본 네트워크 방식
-
가상 스위치: Docker를 설치하면 호스트 컴퓨터 안에
docker0라는 가상의 다리(Bridge)가 생김 -
각 컨테이너를 사설IP를 부여받고 외부로 나갈 때는 호스트의 IP를 빌림(NAT)
-
docker run -d --network my-network --name app1 nginx
- 컨테이너를 특정 네트워크에 연결
-
docker network inspect my-network
- 네트워크 상세 정보 확인
[
{
"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이란?
-
컨테이너 내부의 특정 폴더를 호스트 컴퓨터의 특정 폴더와 동기화하는 장치
-
왜 사용함?
- 컨테이너가 사려도 데이터는 남기기 위해
- 환경 설정, 로그관리 등등
-
docker volume ls
- 볼륨 목록 확인
DRIVER VOLUME NAME
local vuln-bank_postgres_data
-
docker volume create my-data
- 볼륨 생성
-
docker run -d -v my-data:/app/data nginx
- 볼륨 사용
-v my-data:/app/data:"내 컴퓨터의 my-data라는이름의 저장소와 컨테이너 안의 /app/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
- docker-compose up
- 서비스 시작
- docker-compose down -v
- 서비스 중지 + 볼륨도 삭제
-
- v 없으면, 서비스 중지
- docker-compose ps
- 실행 중인 서비스 확인
DevSecOps 특화 명령어
추후 추가 예정

