Ubuntu Image 다운로드 및 실행
--net=host를 옵션에 꼭 넣어줘야 외부포트 접속이 가능하다.
docker run -it --net=host --name ubuntu-desktop ubuntu:22.04 /bin/bash
컨테이너 접속 명령어
- 만약 컨테이너에서 나왔다면 아래 명령어로 다시 들어갈 수 있다.
docker exec -it ubuntu-desktop bash
Install Dependencies
- 컨테이너 안으로 들어왔다면 아래 명령어들을 터미널에 실행 및 설치해준다
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y sudo vim wget curl dbus-x11 \
openssh-server tightvncserver \
xfce4 xfce4-goodies xtermr
사용자 계정만들기
- Root계정으로 GUI를 사용하면 문제가 발생할 수 있으니 사용자를 만든다.
# 사용자 생성 (비밀번호: YOUR_PASSWORD_HERE 를 원하는 걸로 수정 - 아래 명령어는 1)
useradd -m -s /bin/bash dockeruser
echo 'dockeruser:1' | chpasswd
echo 'dockeruser ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/dockeruser
chmod 0440 /etc/sudoers.d/dockeruser
# root 상태에서 실행
chown -R dockeruser:dockeruser /home/dockeruser
SSH 서버 설정(Optional)
mkdir /var/run/sshd
# SSH 포트를 2022로 변경
sed -i 's/#Port 22/Port 2022/' /etc/ssh/sshd_config
sed -i 's/Port 22/Port 2022/' /etc/ssh/sshd_config
# 비밀번호 인증 허용 및 루트 로그인 제한
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
echo "PermitRootLogin no" >> /etc/ssh/sshd_config
# SSH 서비스 시작
service ssh start
- 접속방법
ssh dockeruser@localhost -p 2022
VNC Server 환경설정
# 사용자로 전환
su - dockeruser
# VNC 비밀번호 설정 (명령어 입력 후 8자 이내 비밀번호 설정하세요)
vncserver
# 설정을 위해 서버 잠시 종료
vncserver -kill :1
# 설정 파일 수정 (기존 내용 삭제 후 GUI 로드 스크립트 삽입)
cat <<EOT > ~/.vnc/xstartup
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r \$HOME/.Xresources ] && xrdb \$HOME/.Xresources
# XFCE4 실행
startxfce4 &
EOT
# 실행 권한 부여
chmod +x ~/.vnc/xstartup
VNC 서버 실행
su - dockeruser
vncserver :2 -geometry 1280x800 -depth 24
VNC Viewer(Client) 접속
- Remmina를 사용하여 VNC로 바꾸고 아래 주소를 입력한다.
- 또는 VNC Viewer를 키고 아래 명령어를 입력하여 접속한다.
localhost:5902
VNC에 브라우저 설치
- docker에서 켜진 GUI는 브라우저 실행이 불가하다.
sudo apt-get update
sudo apt-get install -y software-properties-common
# 2. Chromium 전용 PPA 추가 (애플리케이션 저장소)
sudo add-apt-repository -y ppa:xtradeb/apps
sudo apt-get update
# 3. Chromium 설치
sudo apt-get install -y chromium
# 실행
sudo chromium --no-sandbox
# Chromium 설정 수정
sudo sed -i 's|CHROME_EXE_PATH "$@"|CHROME_EXE_PATH "--no-sandbox" "$@"|g' /usr/bin/X11/chromium
- root 계정으로 아래 명령어 실행
exit
service dbus start
- dockeruser로 아래 명령어 실행
su - dockeruser
# 1. 화면 변수 강제 지정 (VNC가 :1번이면 :1, :2번이면 :2)
export DISPLAY=:2
# 2. 브라우저 실행 (sudo 사용X)
chromium --no-sandbox
Direct 접속: PC1 → Server PC + Docker
- MAC + AnyDesk → Server + Docker의 상황이라면 애니데스크로 또 서버의 화면을 보기 불편하다.
- 같은 망에 있다면 맥에서 다이렉트로 서버의 도커 화면을 볼 수 있다.
- 아래처럼 설정해준다.
SSH 터널링으로 맥과 서버와 포트연결(5902번 포트사용)
- 만약 VNC가 3번이면 5903번 사용해야함
ssh -L 5902:localhost:5902 -p 22 jj@192.168.0.210
- 서버 PC에서 아래명령어로 테이블확인
# 5902 포트로 들어오는 패킷이 DROP 되고 있는지 확인
sudo iptables -L INPUT -n | grep 5902
만약 아무것도 안 나오거나 DROP이라고 되어 있다면, 아래 명령어로 강제로 길을 여세요:
sudo iptables -I INPUT -p tcp --dport 5902 -j ACCEPT
- 맥에서 VNC Viewer로 바로 접속
localhost:5902
오류 해결
한글깨짐이 있다면
apt-get install -y fonts-nanum fonts-nanum-coding fonts-nanum-extra
Comment