윈도우11 도커에 이식하기¶
1단계: Windows 11에 Docker Desktop 설치¶
이미 설치되어 있다고 가정하겠습니다.
2단계: WSL 2 터미널 준비¶
Windows에서 PowerShell이나 터미널을 열고 wsl 명령어를 입력하여 WSL 2 리눅스 환경으로 들어갑니다.
wsl
WSL 2 환경에 docker-compose (v2)와 pigz, nano를 설치합니다.
# WSL 2 터미널 내부
sudo apt update
sudo apt install pigz nano docker-compose
3단계: 백업 파일 복사 및 이미지 로드¶
-
Windows 탐색기 주소창에
\\wsl$\를 입력하면 WSL 2의 파일 시스템이 열립니다. -
home/<username>/(예:home/birdhead/) 안에docker_restore같은 새 폴더를 만듭니다. -
백업한
.tar.gz파일 5개(postgres_image.tar.gz등)를 모두~/docker_restore폴더에 복사합니다. -
WSL 2 터미널에서
docker로 이미지 4개를 로드합니다.
# WSL 2 터미널 내부
cd ~/docker_restore
# pigz로 압축 풀고 | docker로 로드
pigz -d -c postgres_image.tar.gz | docker load
pigz -d -c base_server_image.tar.gz | docker load
pigz -d -c pgadmin_image.tar.gz | docker load
pigz -d -c base-server-base_image.tar.gz | docker load
# docker 이미지 목록 확인
docker images
4단계: 데이터 복원 및 docker-compose.yml 수정¶
이 단계가 가장 중요합니다.
- 데이터 백업 파일의 압축을 풉니다.
sudo를 사용해야 리눅스 파일 권한이 그대로 보존됩니다.
# 현재 위치: ~/docker_restore
sudo tar -xvzf postgresql-server-data-backup.tar.gz
# postgresql-server 폴더가 생성됨
cd postgresql-server
-
docker-compose.yml파일을 수정합니다.network_mode: "host"를 제거하고ports:를 추가해야 합니다.
# 현재 위치: ~/docker_restore/postgresql-server
nano docker-compose.yml
[수정 전] (대략 이런 모습일 겁니다)
services:
base-server:
...
image: localhost/postgresql-server_base-server:latest
network_mode: "host" # <--- 문제
...
postgres:
...
image: localhost/postgresql-server_postgres:latest
network_mode: "host" # <--- 문제
command: postgres -c port=15432 ...
volumes:
- ./data/postgresql:/var/lib/postgresql/data
...
pgadmin:
...
image: docker.io/dpage/pgadmin4:latest
network_mode: "host" # <--- 문제
environment:
PGADMIN_LISTEN_PORT: 14011
volumes:
- ./data/pgadmin:/var/lib/pgadmin
[수정 후] (network_mode 삭제, ports 추가)
services:
base-server:
...
image: localhost/postgresql-server_base-server:latest
# network_mode: "host" # <--- 삭제
ports: # <--- 추가
- "14010:22" # podman ps에서 확인된 base-server 포트
...
postgres:
...
image: localhost/postgresql-server_postgres:latest
# network_mode: "host" # <--- 삭제
ports: # <--- 추가
- "15432:15432" # command의 포트와 동일하게 매핑
command: postgres -c port=15432 ...
volumes:
- ./data/postgresql:/var/lib/postgresql/data # <-- WSL2 내부라 그대로 작동
...
pgadmin:
...
image: docker.io/dpage/pgadmin4:latest
# network_mode: "host" # <--- 삭제
ports: # <--- 추가
- "14011:14011" # PGADMIN_LISTEN_PORT와 동일하게 매핑
environment:
PGADMIN_LISTEN_PORT: 14011
volumes:
- ./data/pgadmin:/var/lib/pgadmin # <-- WSL2 내부라 그대로 작동
참고: base-server가 podman ps에서 14010->22/tcp로 매핑된 것을 기반으로 ports: ["14010:22"]를 추가했습니다.
5단계: Docker Compose 실행¶
이제 모든 준비가 끝났습니다. docker-compose로 실행합니다.
# 현재 위치: ~/docker_restore/postgresql-server
docker-compose up -d
docker-compose는 수정된 yml 파일을 읽고, docker load로 불러온 이미지 4개와 tar로 압축 해제한 ./data 폴더(리눅스 권한이 보존된)를 사용하여 Windows 11에서 컨테이너를 완벽하게 실행시킵니다.
Updated by 상혁 손 about 2 months ago · 1 revisions