Project

General

Profile

Actions

윈도우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단계: 백업 파일 복사 및 이미지 로드

  1. Windows 탐색기 주소창에 \\wsl$\를 입력하면 WSL 2의 파일 시스템이 열립니다.

  2. home/<username>/ (예: home/birdhead/) 안에 docker_restore 같은 새 폴더를 만듭니다.

  3. 백업한 .tar.gz 파일 5개(postgres_image.tar.gz 등)를 모두 ~/docker_restore 폴더에 복사합니다.

  4. 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 수정

이 단계가 가장 중요합니다.

  1. 데이터 백업 파일의 압축을 풉니다. sudo를 사용해야 리눅스 파일 권한이 그대로 보존됩니다.

# 현재 위치: ~/docker_restore
sudo tar -xvzf postgresql-server-data-backup.tar.gz

# postgresql-server 폴더가 생성됨
cd postgresql-server

  1. 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-serverpodman 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