포트포워딩부터 Docker 개발 환경 구축(DooD), 그리고 무료 DDNS 설정까지. 고성능 데스크탑을 나만의 클라우드 서버로 만드는 전체 과정을 정리합니다.
좋은 데스크탑을 사놓고 집에서만 쓰기엔 아깝다. 회사에서도, 카페에서도 내 고성능 데스크탑에 접속해 개발할 수 있다면 얼마나 좋을까?
윈도우(Windows) 환경의 데스크탑을 24시간 돌아가는 리눅스 서버처럼 만드는 과정을 정리했다.
집에 있는 PC는 공유기 뒤에 숨어 있다. 외부에서 접속하려면 **"이 문(Port)으로 들어오면 내 PC로 보내줘"**라고 공유기에게 알려줘야 한다.
cmd 창을 열고 ipconfig를 입력하여 현재 PC의 IPv4 주소를 확인한다. (예: 192.168.0.10)
192.168.0.1 등)를 입력해 접속한다.8022 (외부에서 접속할 때 쓸 포트)8022 (Docker 컨테이너가 열어둘 포트)공유기 문을 열었어도 윈도우가 막으면 소용없다.
Windows Defender 방화벽 실행 → [고급 설정]8022 입력 → [연결 허용] → 이름 설정 후 마침.이제 접속해서 사용할 **"리눅스 개발 환경"**을 구축한다. 단순한 OS가 아니라, 컨테이너 안에서도 Docker 명령어를 쓸 수 있는 DooD (Docker Out of Docker) 환경을 만든다.
Ubuntu 22.04를 베이스로 SSH 서버와 Docker 클라이언트를 설치한다.
# 1. 베이스 이미지: Ubuntu 22.04 LTS
FROM ubuntu:22.04
# 2. 필수 패키지 설치
# openssh-server: 외부 접속용
# net-tools, iputils-ping: 네트워크 디버깅
RUN apt-get update && apt-get install -y \
openssh-server sudo curl git vim net-tools iputils-ping \
&& rm -rf /var/lib/apt/lists/*
# 3. Docker CLI 설치 (컨테이너 내부에서 도커 사용)
RUN curl -fsSL [https://get.docker.com](https://get.docker.com) -o get-docker.sh && \
sh get-docker.sh && \
rm get-docker.sh
# 4. SSHD 설정 및 사용자 계정 생성
RUN mkdir /var/run/sshd
# build args로 받은 username/password 설정
ARG username
ARG password
RUN useradd -m -s /bin/bash ${username} && \
echo "${username}:${password}" | chpasswd && \
adduser ${username} sudo && \
usermod -aG docker ${username}
# 5. SSH 보안 설정 (Root 로그인 차단)
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && \
sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config
EXPOSE 22
# SSH 데몬 실행
CMD ["/usr/sbin/sshd", "-D"]
컨테이너 내부에서 또 다른 컨테이너를 실행해야 할 때가 있습니다. (예: dev-box 안에서 docker run redis 실행)
이때 DooD 방식(-v /var/run/docker.sock:/var/run/docker.sock)을 사용하면, 컨테이너가 호스트 PC의 Docker 데몬을 직접 제어하여 성능 저하 없이 도커를 사용할 수 있습니다.
가정용 인터넷 IP는 주기적으로 바뀐다(Dynamic IP). 어제는 접속되던 123.45.67.89가 오늘은 접속이 안 될 수 있다.
이를 해결하기 위해 DuckDNS 서비스를 사용하여 고정된 도메인 주소를 확보하자.
seungwon-server) -> add domain 클릭내 컴퓨터가 켜져 있는 동안 주기적으로 "나 IP 이거야!"라고 DuckDNS에게 알려주는 봇을 실행한다.
version: '3.8'
services:
duckdns:
image: lscr.io/linuxserver/duckdns:latest
container_name: duckdns
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Seoul
- SUBDOMAINS=seungwon-server # .duckdns.org 앞부분만 입력
- TOKEN=abc12345-xxxx-xxxx-xxxx-xxxxxxxx # 발급받은 토큰
- LOG_FILE=true
restart: always
모든 설정이 끝났다. 이제 회사나 카페에서 터미널을 열고 접속해 보자.
# ssh {사용자ID}@{내도메인}.duckdns.org -p {포트번호}
ssh seungwon@seungwon-server.duckdns.org -p 8022