2026. 6. 12. 18:47ㆍDocker
Ⅰ. Docker 컨테이너 운용
| Docker 컨테이너 운용 |
구분 | 설명 | 비고 |
| 개념 | 컨테이너를 안정적으로 실행하고, 성능과 상태를 지속적으로 모니터링하며, 장애 발생 시 신속히 복구하는 일련의 운영 관리 절차 |
DevOps의 핵심 운영 단계 | |
| 운용 목적 | 컨테이너 서비스의 가용성 (Availability) 확보 | 안정적 서비스 제공 | |
| 시스템 부하 및 리소스 관리 | |||
| 장애 복구 자동화 | |||
| 주요 구성 요소 | 컨테이너 상태 감시 | 운영 자동화 구성 | |
| 리소스 모니터링 | |||
| 로그 수집 및 분석 | |||
| 자동 재시작 정책 관리 | |||
| 상태 모니터링 | 컨테이너의 CPU, 메모리, I/O, 네트워크의 사용량을 실시간 추적 | docker stats, Grafana, Prometheus 등 사용 |
|
| 자동 재시작 정책 | --restart=always 또는 on-failure 설정을 통해 컨테이너 다운 시 자동 복구 |
장애 복원성 향상 | |
| 로그 관리 및 수집 | 컨테이너별 로그를 중앙화 (Log Aggregation)하여 분석 | ELK (Stack), Loki, Fluentd 등과 연동 |
|
| 리소스 최적화 | 각 컨테이너별 리소스 제한 (--cpus, --memory)을 설정해 서버 자원 경쟁 방지 |
컨테이너간 격리 강화 | |
| 보안 운용 | 루트 사용자 제한 | 보안 강화 | |
| 최소 권한 원칙 적용 | |||
| 이미지 취약점 점검 및 서명 관리 | |||
| 배포 및 스케줄링 | 컨테이너를 지속적으로 업데이트하고 롤링 배포 또는 블루 - 그린 배포 방식으로 중단 없는 서비스 운영 |
CI / CD 환경과 연계 | |
| 운용 자동화 | 시스템 헬스 체크 (Health Check) | Orchestrator (Docker Swarm, Kubernetes) 이용 |
|
| 모니터링 기반 스케일링 | |||
| 장애 감지 후 자동 재시작 | |||
| 백업 및 복구 | 볼륨, 설정 파일, 환경 변수 등 컨테이너 상태 백업 및 복원 프로세스 구축 |
Snapshot | |
| Volume Copy | |||
| 운용 도구 | Docker Compose, Docker Swarm, Kubernetes, Watchtower 등 | 다중 컨테이너 환경 관리용 |

# testos 컨테이너 생성 및 실행
docker container run --name testos ubuntu 명령을 통해 Ubuntu 이미지 사용하여 testos 컨테이너 생성 및 실행
-it 옵션을 통해 testos 컨테이너 내부에 직접 접근할 수 있는 쉘 실행하도록 설정
-d 옵션을 통해 testos 컨테이너를 백그라운드로 구동
docker container ls –a 명령을 통해 컨테이너가 잘 생성되었는지 확인
# testos 컨테이너 진입
docker container attach testos 명령을 통해 testos 컨테이너 진입
ps –ef 명령을 통해 컨테이너 내부에서 현재 실행 중인 프로세스 목록 자세히 확인
exit 명령을 통해 testos 컨테이너 내부에서 나옴
# testos 컨테이너 재시작
docker container start testos 명령을 통해 종료된 testos 컨테이너 다시 시작
docker container ls –a 명령을 통해 testos 컨테이너가 실행 중임 확인
# testos 컨테이너 진입
docker container attach testos 명령을 통해 testos 컨테이너 진입
ps –ef 명령을 통해 컨테이너 내부에서 현재 실행 중인 프로세스 목록 다시 자세히 확인
ctrl + p + q 통해 testos 컨테이너 내부에서 나옴
docker container ls –a 명령을 통해 testos 컨테이너가 정상적으로 실행 중임 확인

# testos 컨테이너 삭제
docker container rm –f testos 명령을 통해 testos 컨테이너 삭제
docker container ls –a 명령을 통해 컨테이너가 잘 삭제되었는지 확인

# testweb 컨테이너 생성 및 실행
docker container run --name testweb nginx 명령을 통해 Nginx 이미지 사용하여 testweb 컨테이너 생성 및 실행
-it 옵션을 통해 testweb 컨테이너에 직접 접근할 수 있는 쉘 실행하도록 설정
-d 옵션을 통해 testweb 컨테이너를 백그라운드로 구동
docker container ls –a 명령을 통해 컨테이너가 잘 생성되었는지 확인
# testweb 컨테이너 진입
docker container attach testweb 명령을 통해 testweb 컨테이너에 진입하려 했지만 중단
docker container ls –a 명령을 통해 testweb 컨테이너의 실행이 중지된 것 확인

# testweb 컨테이너 재시작
docker container start testweb 명령을 통해 testweb 컨테이너 실행
docker container ls –a 명령을 통해 testweb 컨테이너가 실행 중인 것 확인
# testweb 컨테이너 진입
docker container attach testweb 명령을 통해 testweb 컨테이너 진입
docker container ls –a 명령을 통해 testweb 컨테이너가 실행 중인 것을 확인
# testweb 컨테이너 삭제
docker container rm –f testweb 명령을 통해 testweb 컨테이너 삭제
docker container ls –a 명령을 통해 컨테이너가 잘 삭제되었는지 확인

# testweb 컨테이너 생성 및 실행
docker container run --name testweb nginx 명령을 통해 Nginx 이미지 사용하여 testweb 컨테이너 생성 및 실행
-it 옵션을 통해 testweb 컨테이너에 직접 접근할 수 있는 쉘 실행하도록 설정
-d 옵션을 통해 testweb 컨테이너를 백그라운드로 구동
docker container ls –a 명령을 통해 컨테이너가 잘 생성되었는지 확인
# testweb 컨테이너 내부 동작
docker container exec testweb 명령을 통해 testweb 컨테이너 진입
-it /bin/bash 옵션을 통해 testweb 컨테이너 내부에 직접 접근할 수 있는 bash 쉘 실행하도록 설정
uname –a 명령을 통해 컨테이너 내부에서 작동 중인 리눅스 커널 및 시스템 정보 확인
cat /etc/os-release 명령을 통해 현재 컨테이너에 설치된 OS 정보 확인

apt update 명령을 통해 컨테이너 내에서 패키지 리스트 갱신 실행
apt –y install procps 명령을 통해 리눅스 시스템의 프로세스 및 메모리 상태를 확인하고
관리하는 유틸리티 모음인 procps 패키지 설치
ps –ef 명령을 통해 현재 실행 중인 프로세스 목록 확인
Ⅰ - Ⅰ. attach와 exec 차이점
| attach | exec |
| 컨테이너가 실행 중인 프로세스 (COMMAND)에 연결 | 컨테이너에 연결되며 특정 프로세스 실행 가능 |
| 컨테이너의 COMMAND가 /bin/bash로 설정되어 있는 경우, attach와 exec 둘 다 사용 가능 | |
| 컨테이너의 COMMAND가 /bin/bash로 설정되어 있지 않은 경우, exec 명령을 통해 bash 쉘을 실행하여 컨테이너의 bash 쉘 실행 | |
Ⅰ - Ⅱ. Docker 컨테이너 네트워크 testnet1, testnet2 설정

# testnet1 네트워크 생성
docker network create -d bridge testnet1 명령을 통해 bridge 드라이버 방식 사용하여 testnet1 네트워크 생성
# testnet2 네트워크 생성
docker network create -d bridge testnet2 명령을 통해 bridge 드라이버 방식 사용하여 testnet2 네트워크 설정
docker network ls 명령을 통해 네트워크가 잘 생성되었는지 확인

docker network inspect testnet1 명령을 통해 testnet1 브리지 네트워크의 상세 정보 확인
( Subnet : 172.18.0.0/16, Gateway : 172.18.0.1 )

docker network inspect testnet2 명령을 통해 testnet2 브리지 네트워크의 상세 정보 확인
( Subenet : 172.19.0.0/16, Gateway : 172.19.0.1 )

ip address 명령을 통해 br로 시작하는 사용자 네트워크 확인

# myweb1 컨테이너 생성 및 실행
docker container run --name myweb1 centos:8 명령을 통해
CentOS:8 이미지 사용하여 myweb1 컨테이너 생성 및 실행
-it 옵션을 통해 myweb1 컨테이너에 직접 접근할 수 있는 쉘 실행하도록 설정
-d 옵션을 통해 myweb1 컨테이너를 백그라운드로 구동
-p 8001:80 옵션을 통해 호스트의 8001번 포트와 컨테이너의 80번 포트 매핑
--network=testnet1 옵션을 통해 myweb1 컨테이너 실행할 때 testnet1 네트워크와 연결되도록 설정
# myweb2 컨테이너 생성 및 실행
docker container run --name myweb2 centos:8 명령을 통해
CentOS:8 이미지 사용하여 myweb2 컨테이너 생성 및 실행
-it 옵션을 통해 myweb2 컨테이너에 직접 접근할 수 있는 쉘 실행하도록 설정
-d 옵션을 통해 myweb2 컨테이너를 백그라운드로 구동
-p 8002:80 옵션을 통해 호스트의 8002번 포트와 컨테이너의 80번 포트 매핑
--network=testnet2 옵션을 통해 myweb1 컨테이너 실행할 때 testnet2 네트워크와 연결되도록 설정
docker container ls -a 명령을 통해 컨테이너가 잘 생성되었는지 확인

# myweb1 컨테이너 내부 동작
docker container exec myweb1 명령을 통해 myweb1 컨테이너로 진입
-it /bin/bash 옵션을 통해 myweb1 컨테이너 내부에 직접 접근할 수 있는 bash 쉘 실행하도록 설정
ip address 명령을 통해 myweb1 컨테이너 내부의 네트워크 인터페이스 상태와 IP 주소 정보 확인
ip route 명령을 통해 myweb1 컨테이너 내부의 라우팅 테이블 정보 확인

ping –c 3 172.18.0.1 명령을 통해 testnet1 네트워크의 Gateway IP 주소로 3번의 ping 테스트 전송
ping –c 3 168.126.63.1 명령을 통해 외부 인터넷 상의 IP 주소로 3번의 ping 테스트 전송
exit 명령을 통해 myweb1 컨테이너 내 bash 쉘에서 나옴

# myweb2 컨테이너 내부 동작
docker container exec myweb2 명령을 통해 myweb2 컨테이너로 진입
-it /bin/bash 옵션을 통해 myweb2 컨테이너 내부에 직접 접근할 수 있는 bash 쉘 실행하도록 설정
ip address 명령을 통해 myweb2 컨테이너 내부의 네트워크 인터페이스 상태와 IP 주소 정보 확인
ip route 명령을 통해 myweb2 컨테이너 내부의 라우팅 테이블 정보 확인

ping –c 3 172.19.0.1 명령을 통해 testnet2 네트워크의 Gateway IP 주소로 3번의 ping 테스트 전송
ping –c 3 168.126.63.1 명령을 통해 외부 인터넷 상의 IP 주소로 3번의 ping 테스트 전송
exit 명령을 통해 myweb2 컨테이너 내부 bash 쉘에서 나옴

# myweb1, myweb2 컨테이너 삭제
docker container rm –f myweb1 myweb2 명령을 통해 myweb1과 myweb2 컨테이너 삭제
# testnet1, testnet2 네트워크 삭제
docker network prune 명령을 통해 사용하지 않는 네트워크 testnet1과 testnet2 모두 삭제
'Docker' 카테고리의 다른 글
| Docker 이미지 생성 (0) | 2026.06.12 |
|---|---|
| Docker 리소스 제한 및 모니터링 (0) | 2026.06.12 |
| Docker 컨테이너 네트워크 관리 & Docker 네트워크 관리 (0) | 2026.06.12 |
| Docker 컨테이너 관리 & Docker 볼륨 관리 (0) | 2026.06.12 |
| Docker 이미지 관리 & Docker 이미지 업로드 (0) | 2026.06.12 |