윈도우11 도커에 이식하기 » History » Version 1
상혁 손, 2025-10-22 21:10
| 1 | 1 | 상혁 손 | # 윈도우11 도커에 이식하기 |
|---|---|---|---|
| 2 | |||
| 3 | ### 1단계: Windows 11에 Docker Desktop 설치 |
||
| 4 | |||
| 5 | 이미 설치되어 있다고 가정하겠습니다. |
||
| 6 | |||
| 7 | ### 2단계: WSL 2 터미널 준비 |
||
| 8 | |||
| 9 | Windows에서 `PowerShell`이나 `터미널`을 열고 `wsl` 명령어를 입력하여 WSL 2 리눅스 환경으로 들어갑니다. |
||
| 10 | |||
| 11 | `wsl` |
||
| 12 | |||
| 13 | WSL 2 환경에 `docker-compose` (v2)와 `pigz`, `nano`를 설치합니다. |
||
| 14 | |||
| 15 | `# WSL 2 터미널 내부` |
||
| 16 | `sudo apt update` |
||
| 17 | `sudo apt install pigz nano docker-compose` |
||
| 18 | |||
| 19 | ### 3단계: 백업 파일 복사 및 이미지 로드 |
||
| 20 | |||
| 21 | 1. Windows 탐색기 주소창에 `\\wsl$\`를 입력하면 WSL 2의 파일 시스템이 열립니다. |
||
| 22 | |||
| 23 | 2. `home/<username>/` (예: `home/birdhead/`) 안에 `docker_restore` 같은 새 폴더를 만듭니다. |
||
| 24 | |||
| 25 | 3. 백업한 `.tar.gz` 파일 5개(`postgres_image.tar.gz` 등)를 모두 `~/docker_restore` 폴더에 복사합니다. |
||
| 26 | |||
| 27 | 4. WSL 2 터미널에서 `docker`로 이미지 4개를 로드합니다. |
||
| 28 | |||
| 29 | |||
| 30 | `# WSL 2 터미널 내부` |
||
| 31 | `cd ~/docker_restore` |
||
| 32 | |||
| 33 | `# pigz로 압축 풀고 | docker로 로드` |
||
| 34 | `pigz -d -c postgres_image.tar.gz | docker load` |
||
| 35 | `pigz -d -c base_server_image.tar.gz | docker load` |
||
| 36 | `pigz -d -c pgadmin_image.tar.gz | docker load` |
||
| 37 | `pigz -d -c base-server-base_image.tar.gz | docker load` |
||
| 38 | |||
| 39 | `# docker 이미지 목록 확인` |
||
| 40 | `docker images` |
||
| 41 | |||
| 42 | ### 4단계: 데이터 복원 및 `docker-compose.yml` 수정 |
||
| 43 | |||
| 44 | **이 단계가 가장 중요합니다.** |
||
| 45 | |||
| 46 | 1. 데이터 백업 파일의 압축을 풉니다. `sudo`를 사용해야 리눅스 파일 권한이 그대로 보존됩니다. |
||
| 47 | |||
| 48 | `# 현재 위치: ~/docker_restore` |
||
| 49 | `sudo tar -xvzf postgresql-server-data-backup.tar.gz` |
||
| 50 | |||
| 51 | `# postgresql-server 폴더가 생성됨` |
||
| 52 | `cd postgresql-server` |
||
| 53 | |||
| 54 | 2. `docker-compose.yml` 파일을 수정합니다. `network_mode: "host"`를 제거하고 `ports:`를 추가해야 합니다. |
||
| 55 | |||
| 56 | `# 현재 위치: ~/docker_restore/postgresql-server` |
||
| 57 | `nano docker-compose.yml` |
||
| 58 | |||
| 59 | **[수정 전]** (대략 이런 모습일 겁니다) |
||
| 60 | |||
| 61 | `services:` |
||
| 62 | `base-server:` |
||
| 63 | `...` |
||
| 64 | `image: localhost/postgresql-server_base-server:latest` |
||
| 65 | `network_mode: "host" # <--- 문제` |
||
| 66 | `...` |
||
| 67 | `postgres:` |
||
| 68 | `...` |
||
| 69 | `image: localhost/postgresql-server_postgres:latest` |
||
| 70 | `network_mode: "host" # <--- 문제` |
||
| 71 | `command: postgres -c port=15432 ...` |
||
| 72 | `volumes:` |
||
| 73 | `- ./data/postgresql:/var/lib/postgresql/data` |
||
| 74 | `...` |
||
| 75 | `pgadmin:` |
||
| 76 | `...` |
||
| 77 | `image: docker.io/dpage/pgadmin4:latest` |
||
| 78 | `network_mode: "host" # <--- 문제` |
||
| 79 | `environment:` |
||
| 80 | `PGADMIN_LISTEN_PORT: 14011` |
||
| 81 | `volumes:` |
||
| 82 | `- ./data/pgadmin:/var/lib/pgadmin` |
||
| 83 | |||
| 84 | **[수정 후]** (`network_mode` 삭제, `ports` 추가) |
||
| 85 | |||
| 86 | `services:` |
||
| 87 | `base-server:` |
||
| 88 | `...` |
||
| 89 | `image: localhost/postgresql-server_base-server:latest` |
||
| 90 | `# network_mode: "host" # <--- 삭제` |
||
| 91 | `ports: # <--- 추가` |
||
| 92 | `- "14010:22" # podman ps에서 확인된 base-server 포트` |
||
| 93 | `...` |
||
| 94 | `postgres:` |
||
| 95 | `...` |
||
| 96 | `image: localhost/postgresql-server_postgres:latest` |
||
| 97 | `# network_mode: "host" # <--- 삭제` |
||
| 98 | `ports: # <--- 추가` |
||
| 99 | `- "15432:15432" # command의 포트와 동일하게 매핑` |
||
| 100 | `command: postgres -c port=15432 ...` |
||
| 101 | `volumes:` |
||
| 102 | `- ./data/postgresql:/var/lib/postgresql/data # <-- WSL2 내부라 그대로 작동` |
||
| 103 | `...` |
||
| 104 | `pgadmin:` |
||
| 105 | `...` |
||
| 106 | `image: docker.io/dpage/pgadmin4:latest` |
||
| 107 | `# network_mode: "host" # <--- 삭제` |
||
| 108 | `ports: # <--- 추가` |
||
| 109 | `- "14011:14011" # PGADMIN_LISTEN_PORT와 동일하게 매핑` |
||
| 110 | `environment:` |
||
| 111 | `PGADMIN_LISTEN_PORT: 14011` |
||
| 112 | `volumes:` |
||
| 113 | `- ./data/pgadmin:/var/lib/pgadmin # <-- WSL2 내부라 그대로 작동` |
||
| 114 | |||
| 115 | **참고:** `base-server`가 `podman ps`에서 `14010->22/tcp`로 매핑된 것을 기반으로 `ports: ["14010:22"]`를 추가했습니다. |
||
| 116 | |||
| 117 | ### 5단계: Docker Compose 실행 |
||
| 118 | |||
| 119 | 이제 모든 준비가 끝났습니다. `docker-compose`로 실행합니다. |
||
| 120 | |||
| 121 | `# 현재 위치: ~/docker_restore/postgresql-server` |
||
| 122 | `docker-compose up -d` |
||
| 123 | |||
| 124 | `docker-compose`는 수정된 `yml` 파일을 읽고, `docker load`로 불러온 이미지 4개와 `tar`로 압축 해제한 `./data` 폴더(리눅스 권한이 보존된)를 사용하여 Windows 11에서 컨테이너를 완벽하게 실행시킵니다. |