본문 바로가기
IT/Linux

[Docker] 실무 심화: 이미지 관리, 네트워크 및 HAProxy 로드밸런싱

by Archiver Jun 2026. 3. 10.

1. 컨테이너 파일 관리 (docker cp)

호스트 OS와 컨테이너 내부 간에 파일을 자유롭게 주고받는 방법임. vi 편집기가 없는 경량 이미지(nginx, httpd 등)에서 설정을 수정할 때 유용함.

  • 호스트 → 컨테이너: docker cp index.html n1:/usr/share/nginx/html/index.html
  • 컨테이너 → 호스트: docker cp n1:/etc/nginx/nginx.conf ./nginx_backup.conf

2. HAProxy를 이용한 도커 컨테이너 로드밸런싱

하나의 호스트(9-1)에서 돌아가는 여러 개의 컨테이너(httpd 2대, nginx 2대)를 외부 로드밸런서(9-4)에서 하나로 묶어 서비스하는 실무 구성임.

  • HAProxy 설정 (/etc/haproxy/haproxy.cfg):
    • 서버 9-1의 공인 IP와 컨테이너별로 포트 포워딩된 포트(60080~60380)를 연결함.
    Bash
     
    server w1 10.0.0.11:60080 check
    server w2 10.0.0.11:60180 check
    server w3 10.0.0.11:60280 check
    server w4 10.0.0.11:60380 check
    

3. 이미지 관리 기술: Save vs Export

이미지를 파일(.tar)로 만들어 다른 서버로 옮길 때 사용하는 두 가지 방식의 차이점을 명확히 알아야 함.

구분 save / load export / import
대상 이미지 (Image) 컨테이너 (Container)
메타데이터 레이어, 환경변수, CMD 등 보존 파일 시스템만 추출 (환경변수 등 삭제)
용도 이미지 전체 이식 컨테이너의 특정 시점 스냅샷 추출
특이사항 용량이 상대적으로 큼 import 시 --change 옵션으로 환경변수 재설정 필요

export된 파일을 import 할 때 주의사항

환경변수가 날아가기 때문에 아래와 같이 실행 명령(CMD)과 경로(Env PATH)를 수동으로 넣어줘야 정상 작동함.

Bash
 
docker import --change 'CMD ["httpd-foreground"]' --change 'Env PATH=...' 4.tar httpd:1.0

4. 도커 네트워크 (Docker Network) 심화

컨테이너 간의 통신 대역을 분리하거나 호스트의 네트워크를 직접 사용하는 방법임.

  • 사용자 정의 네트워크 생성:
    • docker network create --subnet 192.168.0.0/24 --gateway 192.168.0.254 babo
  • 네트워크 연결 및 끊기:
    • docker network connect babo a1: 실행 중인 컨테이너에 새로운 네트워크 대역 추가 (NIC 추가 개념).
    • docker network disconnect babo a1: 연결 해제.
  • Host 네트워크 모드:
    • --net host: 별도의 포트 포워딩 없이 호스트의 포트를 그대로 사용함. 보안상 주의가 필요하지만 성능은 가장 좋음.

5. 실무 응용: WordPress + MySQL 컨테이너 연동

환경변수(-e)를 사용하여 컨테이너 실행 시점에 DB 접속 정보를 주입함.

  1. MySQL 컨테이너: 루트 패스워드 설정 및 실행.
    • docker run -itd -e MYSQL_ROOT_PASSWORD=It12345! --name m2 mysql:8.0
  2. WordPress 컨테이너: DB 호스트 IP와 계정 정보를 환경변수로 전달.
    • docker run -itd -p 65080:80 -e WORDPRESS_DB_HOST=[DB_IP] -e WORDPRESS_DB_USER=root ... wordpress

[tip]

  • docker commit: 현재 컨테이너의 변경 사항을 새 이미지로 저장할 때 사용함. 태그를 누락하지 않도록 주의할 것.
  • docker save -o all.tar [이미지들...]: 여러 개의 이미지를 하나의 파일로 묶어 효율적으로 전송 가능함.
  • 컨테이너 일괄 삭제: docker rm -f $(docker ps -aq)
반응형