Docker에서 sudo와 함께 사용할 데스크톱 환경 만들기(XRDP 편)
16294 단어 RemoteDesktopDockerXRDP
이 보도의 내용을 바탕으로 한 그림이 docker hub에 로그인되었습니다.
아래 표시가 있습니다.pull을 사용하십시오.
ubuntu16.04_ja
: Ubuntu16.04 베이스(xrdp/Dockerfile.ubuntu16.04)ubuntu18.04_ja
: Ubuntu18.04 베이스(xrdp/Dockerfile.ubuntu18.04)ubuntu18.04-pulseaudio_ja
: 사운드 전송이 가능한 Ubuntu18.04 베이스(xrdp/Dockerfile.ubuntu18.04_pulseaudio)https://github.com/yama07/docker-ubuntu-lxde/tree/master/xrdp
또 이 기사 자체의 내용은 다소 낡았지만 그대로 남아 있다.
다음 기사의 속편.
Docker에서 컨테이너를 지정하고 실행 가능한 사용자로 시작
개시하다
이전 기사 Docker 컨테이너에 있는 CUI의 쾌적한 환경을 구축했다.
이번에는 GUI의 편안한 환경을 구축하겠습니다.
여기서 말하는 편안함은 다음과 같은 조건을 만족시키는 환경을 가리킨다.(언제나 내겐 편해.)
데스크톱 환경은 Docker+XRDP+XLDE로 구성됩니다.
원격 데스크탑으로 XRDP를 선택한 이유는 다음과 같습니다.
배경.
최근 안드로이드 앱을 개발하면서 회사에서 제공하는 노트북으로 안드로이드 스튜디오를 시작하기가 힘들어졌다
각양각색의 부하 감소 설정을 시도했지만 모바일 메일 애플리케이션과 안드로이드스튜디오를 동시에 이용하는 상태에서 메모리 사용률이 90%를 넘어 전체적인 움직임이 흐릿했다.
그리고 최근에는 부화면에 안드로이드 스튜디오를 띄우면 화면이 보이지 않는 현상이 나타나기 시작했다.
다행히도 개인 노트북 외에도 해당 설정 공유 서버를 제공해 포장을 마음대로 추가할 수는 없지만 docker를 사용할 수 있다.
이런 이유로 컨테이너 안에 데스크톱 환경을 만들고 손 옆에 있는 노트북으로 접근하는 곳으로 왔다.
또 이 글은 일반적인 데스크톱 환경 구축을 썼기 때문에 안드로이드 스튜디오 설치를 쓰지 않았다.
(마음에 걸리거나 필요하면 기사를 쓸 수도 있다.)
Docker 호스트 환경 $ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"
$ docker --version
Docker version 1.13.1, build 092cba3
Docker 이미지 만드는 법
Docker file 같은 거.
Doke rfile과 endpoint 두 개의 조개 스크립트로 구성되어 있습니다.
DockerfileFROM ubuntu:16.10
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
lxde \
xrdp \
ibus \
ibus-mozc \
language-pack-ja-base \
language-pack-ja \
fonts-ipafont-gothic \
fonts-ipafont-mincho \
&& apt-get clean \
&& rm -rf /var/cache/apt/archives/* \
&& rm -rf /var/lib/apt/lists/*
# RDPのポートを公開する
EXPOSE 3389
RUN echo "startlxde" > /etc/skel/.xsession
# 日本語ロケールを設定する
RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
&& echo 'Asia/Tokyo' > /etc/timezone
RUN locale-gen ja_JP.UTF-8 \
&& echo 'LC_ALL=ja_JP.UTF-8' > /etc/default/locale \
&& echo 'LANG=ja_JP.UTF-8' >> /etc/default/locale
ENV LANG=ja_JP.UTF-8 \
LANGUAGE=ja_JP:ja \
LC_ALL=ja_JP.UTF-8
# デフォルトのユーザ名とパスワード
ENV DEFAULT_USER=developer \
DEFAULT_PASSWD=xrdppasswd
# sudoを使用できるようにする
RUN echo "ALL ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/ALL
# 一般ユーザがユーザ/グループを追加できるようにする
RUN chmod u+s /usr/sbin/useradd \
&& chmod u+s /usr/sbin/groupadd
# XRDPのendpointスクリプトを配置する
COPY endpoint.sh /opt/
RUN chmod +x /opt/endpoint.sh
CMD ["/opt/endpoint.sh"]
endpoint.sh#!/bin/bash -e
USER_ID=$(id -u)
GROUP_ID=$(id -g)
PASSWD=${PASSWD:-${DEFAULT_PASSWD}}
USER=${USER:-${DEFAULT_USER}}
# グループを作成する
echo "GROUP_ID: $GROUP_ID"
if [ x"$GROUP_ID" != x"0" ]; then
groupadd -g $GROUP_ID $USER
fi
# ユーザを作成する
echo "USER_ID: $USER_ID"
if [ x"$USER_ID" != x"0" ]; then
export HOME=/home/$USER
useradd -d ${HOME} -m -s /bin/bash -u $USER_ID -g $GROUP_ID $USER
fi
# パーミッションを元に戻す
sudo chmod u-s /usr/sbin/useradd
sudo chmod u-s /usr/sbin/groupadd
# ログインユーザ名を設定する
USER=$(whoami)
echo "USER: $USER"
# ログインパスワードを設定する
echo "PASSWD: $PASSWD"
echo ${USER}:${PASSWD} | sudo chpasswd
[ ! -e ${HOME}/.xsession ] && cp /etc/skel/.xsession ${HOME}/.xsession
echo "#############################"
# XRDPサーバを起動する
sudo bash -c "/etc/init.d/xrdp start && tail -F /var/log/xrdp-sesman.log"
하는 일은 이전 기사 쓴 것과 기본적으로 같다.
xrdp와 lxde의 설치와 일본어 환경 설정이 추가되었습니다.
16.10 기반 이미지로 우분투:14.04, 16.04도 사용 가능.그러나 Ubuntu:16.04 이전에 xrdp는 v0이었다.6이므로 일본어 키보드 레이아웃이 지원되지 않습니다. 키보드 변경여기.을 참조하십시오.또한 Ubuntu:16.10의 xrdp는 v0입니다.9인 만큼 추가 절차 없이 일본어 키보드를 사용할 수 있다.
xrdp의 설정은 보시다시피 기본 상태입니다.
취향에 따라 xrdp 서버의 설정을 하십시오. (xrdp.ini와sesman.ini에 기술되어 있습니다.)
docker build
일반 진행docker build
.## Dockerfileを作成
$ vi Dockerfile
## endpointスクリプトを作成
$ vi endpoint.sh
$ docker build -t lxde_xrdp:ubuntu16.10_ja .
Docker 컨테이너 사용 방법
docker run
XRDP 서버를 시작하는 컨테이너입니다.$ docker run --rm -it \
--privileged \
-p 3389:3389 \
-u $(id -u):$(id -g) \
-e USER=yama \
-e PASSWD=yamapasswd \
lxde_xrdp:ubuntu16.10_ja
옵션은 다음과 같습니다.
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"
$ docker --version
Docker version 1.13.1, build 092cba3
Docker 이미지 만드는 법
Docker file 같은 거.
Doke rfile과 endpoint 두 개의 조개 스크립트로 구성되어 있습니다.
DockerfileFROM ubuntu:16.10
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
lxde \
xrdp \
ibus \
ibus-mozc \
language-pack-ja-base \
language-pack-ja \
fonts-ipafont-gothic \
fonts-ipafont-mincho \
&& apt-get clean \
&& rm -rf /var/cache/apt/archives/* \
&& rm -rf /var/lib/apt/lists/*
# RDPのポートを公開する
EXPOSE 3389
RUN echo "startlxde" > /etc/skel/.xsession
# 日本語ロケールを設定する
RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
&& echo 'Asia/Tokyo' > /etc/timezone
RUN locale-gen ja_JP.UTF-8 \
&& echo 'LC_ALL=ja_JP.UTF-8' > /etc/default/locale \
&& echo 'LANG=ja_JP.UTF-8' >> /etc/default/locale
ENV LANG=ja_JP.UTF-8 \
LANGUAGE=ja_JP:ja \
LC_ALL=ja_JP.UTF-8
# デフォルトのユーザ名とパスワード
ENV DEFAULT_USER=developer \
DEFAULT_PASSWD=xrdppasswd
# sudoを使用できるようにする
RUN echo "ALL ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/ALL
# 一般ユーザがユーザ/グループを追加できるようにする
RUN chmod u+s /usr/sbin/useradd \
&& chmod u+s /usr/sbin/groupadd
# XRDPのendpointスクリプトを配置する
COPY endpoint.sh /opt/
RUN chmod +x /opt/endpoint.sh
CMD ["/opt/endpoint.sh"]
endpoint.sh#!/bin/bash -e
USER_ID=$(id -u)
GROUP_ID=$(id -g)
PASSWD=${PASSWD:-${DEFAULT_PASSWD}}
USER=${USER:-${DEFAULT_USER}}
# グループを作成する
echo "GROUP_ID: $GROUP_ID"
if [ x"$GROUP_ID" != x"0" ]; then
groupadd -g $GROUP_ID $USER
fi
# ユーザを作成する
echo "USER_ID: $USER_ID"
if [ x"$USER_ID" != x"0" ]; then
export HOME=/home/$USER
useradd -d ${HOME} -m -s /bin/bash -u $USER_ID -g $GROUP_ID $USER
fi
# パーミッションを元に戻す
sudo chmod u-s /usr/sbin/useradd
sudo chmod u-s /usr/sbin/groupadd
# ログインユーザ名を設定する
USER=$(whoami)
echo "USER: $USER"
# ログインパスワードを設定する
echo "PASSWD: $PASSWD"
echo ${USER}:${PASSWD} | sudo chpasswd
[ ! -e ${HOME}/.xsession ] && cp /etc/skel/.xsession ${HOME}/.xsession
echo "#############################"
# XRDPサーバを起動する
sudo bash -c "/etc/init.d/xrdp start && tail -F /var/log/xrdp-sesman.log"
하는 일은 이전 기사 쓴 것과 기본적으로 같다.
xrdp와 lxde의 설치와 일본어 환경 설정이 추가되었습니다.
16.10 기반 이미지로 우분투:14.04, 16.04도 사용 가능.그러나 Ubuntu:16.04 이전에 xrdp는 v0이었다.6이므로 일본어 키보드 레이아웃이 지원되지 않습니다. 키보드 변경여기.을 참조하십시오.또한 Ubuntu:16.10의 xrdp는 v0입니다.9인 만큼 추가 절차 없이 일본어 키보드를 사용할 수 있다.
xrdp의 설정은 보시다시피 기본 상태입니다.
취향에 따라 xrdp 서버의 설정을 하십시오. (xrdp.ini와sesman.ini에 기술되어 있습니다.)
docker build
일반 진행docker build
.## Dockerfileを作成
$ vi Dockerfile
## endpointスクリプトを作成
$ vi endpoint.sh
$ docker build -t lxde_xrdp:ubuntu16.10_ja .
Docker 컨테이너 사용 방법
docker run
XRDP 서버를 시작하는 컨테이너입니다.$ docker run --rm -it \
--privileged \
-p 3389:3389 \
-u $(id -u):$(id -g) \
-e USER=yama \
-e PASSWD=yamapasswd \
lxde_xrdp:ubuntu16.10_ja
옵션은 다음과 같습니다.
FROM ubuntu:16.10
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
lxde \
xrdp \
ibus \
ibus-mozc \
language-pack-ja-base \
language-pack-ja \
fonts-ipafont-gothic \
fonts-ipafont-mincho \
&& apt-get clean \
&& rm -rf /var/cache/apt/archives/* \
&& rm -rf /var/lib/apt/lists/*
# RDPのポートを公開する
EXPOSE 3389
RUN echo "startlxde" > /etc/skel/.xsession
# 日本語ロケールを設定する
RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
&& echo 'Asia/Tokyo' > /etc/timezone
RUN locale-gen ja_JP.UTF-8 \
&& echo 'LC_ALL=ja_JP.UTF-8' > /etc/default/locale \
&& echo 'LANG=ja_JP.UTF-8' >> /etc/default/locale
ENV LANG=ja_JP.UTF-8 \
LANGUAGE=ja_JP:ja \
LC_ALL=ja_JP.UTF-8
# デフォルトのユーザ名とパスワード
ENV DEFAULT_USER=developer \
DEFAULT_PASSWD=xrdppasswd
# sudoを使用できるようにする
RUN echo "ALL ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/ALL
# 一般ユーザがユーザ/グループを追加できるようにする
RUN chmod u+s /usr/sbin/useradd \
&& chmod u+s /usr/sbin/groupadd
# XRDPのendpointスクリプトを配置する
COPY endpoint.sh /opt/
RUN chmod +x /opt/endpoint.sh
CMD ["/opt/endpoint.sh"]
#!/bin/bash -e
USER_ID=$(id -u)
GROUP_ID=$(id -g)
PASSWD=${PASSWD:-${DEFAULT_PASSWD}}
USER=${USER:-${DEFAULT_USER}}
# グループを作成する
echo "GROUP_ID: $GROUP_ID"
if [ x"$GROUP_ID" != x"0" ]; then
groupadd -g $GROUP_ID $USER
fi
# ユーザを作成する
echo "USER_ID: $USER_ID"
if [ x"$USER_ID" != x"0" ]; then
export HOME=/home/$USER
useradd -d ${HOME} -m -s /bin/bash -u $USER_ID -g $GROUP_ID $USER
fi
# パーミッションを元に戻す
sudo chmod u-s /usr/sbin/useradd
sudo chmod u-s /usr/sbin/groupadd
# ログインユーザ名を設定する
USER=$(whoami)
echo "USER: $USER"
# ログインパスワードを設定する
echo "PASSWD: $PASSWD"
echo ${USER}:${PASSWD} | sudo chpasswd
[ ! -e ${HOME}/.xsession ] && cp /etc/skel/.xsession ${HOME}/.xsession
echo "#############################"
# XRDPサーバを起動する
sudo bash -c "/etc/init.d/xrdp start && tail -F /var/log/xrdp-sesman.log"
## Dockerfileを作成
$ vi Dockerfile
## endpointスクリプトを作成
$ vi endpoint.sh
$ docker build -t lxde_xrdp:ubuntu16.10_ja .
docker run
XRDP 서버를 시작하는 컨테이너입니다.
$ docker run --rm -it \
--privileged \
-p 3389:3389 \
-u $(id -u):$(id -g) \
-e USER=yama \
-e PASSWD=yamapasswd \
lxde_xrdp:ubuntu16.10_ja
옵션은 다음과 같습니다.-p port:3389
고객이 접속한 포트를 port
로 설정하십시오.-u user:group
부트 컨테이너의 UIDuser
를 GIDgroup
로 설정하십시오.지정하지 않으면 루트 사용자(UID=0, GID=0)로 시작합니다.
또한 루트 사용자로서 시작할 때 일본어 입력(mozc)을 사용할 수 없습니다.
-e USER=loginUser
RDP 기반 로그인 사용자를 loginUser
로 설정하십시오.지정하지 않으면 '개발자' 가 됩니다.단, 루트 사용자로서 컨테이너를 시작할 때 '루트' 입니다.
-e PASSWD=loginPasswd
RDP의 로그인 암호를 loginPasswd
로 설정하십시오.지정하지 않으면 "xrdppasswd"입니다.
--privileged
동작 환경에 따라 옵션이 필요하지 않습니다.mozc에서 "엔진 프로그램 변환에 실패했습니다."오류가 발생했을 때 이 옵션을 선택하십시오.
클라이언트에서 연결
Windows를 사용할 때 제공된 원격 데스크탑이 있으면 클라이언트 소프트웨어를 설치할 필요가 없습니다.
Mac의 경우'Microsoft Remote Desktop', Linux의 경우'FreerDP','rdesktop','Remmina'등의 연결을 사용하십시오.
연결 방법은 원격 데스크톱 클라이언트를 시작하여 Docker 호스트의 IP와
docker run
에 설정된 연결 포트, 로그인 사용자/비밀번호를 사용하여 로그인하는 것이다.용기를 시작할 때 사용자/비밀번호의 정보는 다음과 같이 출력되며 거기에서도 확인할 수 있습니다.
-d
옵션 실행 배경은 docker logs
에서 확인할 수 있습니다.$ docker run ...オプション省略...
GROUP_ID: 1000
USER_ID: 1000
USER: yama
PASSWD: yamapasswd
#############################
* Starting Remote Desktop Protocol server
...
로그인에 성공하면 "Nosession for pid(프로세스 ID)"및 오류 대화 상자가 나타날 수 있지만 아무 문제가 없을 것 같으니 "OK"를 클릭하십시오.(현재 동작에 문제가 없기 때문에 원인을 깊이 조사하지 않았습니다.또한 클립보드 관리 소프트웨어 "Clippit"에 히스토리 스토리지가 활성화되어 있는지 묻습니다.
"히스토리 데이터는 암호처럼 민감한 데이터라도 명문으로 저장할 수 있을까요?"이렇게 말해.괜찮으시다면 "Yes"를 클릭하세요.
용도
배경에서도 서술한 바와 같이 개인 개발 환경으로 사용할 수 있다.
또 갑자기 개발자를 늘릴 때도 Docker 이미지를 사용해 바로 개발 환경을 제공할 수 있다.
이번 Docker의 이미지는 통용되기 때문에 그렇게 하면 할 수 있는 일은 한계가 있다.따라서 별도의 포장이 설치된 이미지를 제작할 필요가 있다고 본다.저는 이번 이미지를 기본 이미지(Docker fileFROM
로 JDK와 안드로이드 스튜디오 등 개발에 필요한 소프트웨어를 설치한 이미지를 제작해 사용하고 있습니다.
기타
Docker 호스트 버전 정보
Docker version 17.06.0-ce
와 Ubuntu:16.10(호스트 OS가 아닌 기본 이미지)의 조합은 내가 준비한 검증 환경에서 실행되지 않습니다.XRDP 서버를 시작하는 동안 오류가 발생했습니다.
IPv6 주변의 설정이 맞지 않는 것 같습니다. Docker 호스트의 설정에 따라 순조롭게 작동할 수 있습니다.
제가 평소에 사용하는 서버가 Docker version 1.13.1
라서 너무 번거로워서 깊이 조사하지 못했습니다.
또한 xrdp의 버전은 v0입니다.6의 ubuntu:14.04 또는 ubuntu:16.04라면 Docker version 17.06.0-ce
라도 일할 수 있습니다.
제가 평소에 쓰는 방법.
아래와 같이 용기를 시작할 때-v
에 옵션을 부여하고 메인 디렉터리를 마운트해서 사용합니다.$ docker run --rm -it \
--privileged \
-p 3389:3389 \
-u $(id -u):$(id -g) \
-e USER=yama \
-e PASSWD=yamapasswd \
-v ${HOME}/container_home:/home/yama \
lxde_xrdp:ubuntu16.10
컨테이너 내의 데스크톱 환경에서는 대부분의 개인 설정이 홈 디렉토리에 저장되므로 홈 디렉토리를 마운트하면 컨테이너를 닫거나 시작해도 개인 설정이 그대로 유지됩니다.
또한 용기 안에서 오래 지속되는 데이터도 메인 디렉터리 아래에 놓으려면 용기를 멈추는 것도 문제없고 호스트와의 데이터 교환도 편리하다.
물론 호스트의 uid/gid를 계승했기 때문에 파일 권한 때문에 파일/디렉터리를 삭제할 수 없는 문제도 없습니다.
Reference
이 문제에 관하여(Docker에서 sudo와 함께 사용할 데스크톱 환경 만들기(XRDP 편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yama07/items/b905ceff0498e52b00cb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Docker 호스트 버전 정보
Docker version 17.06.0-ce
와 Ubuntu:16.10(호스트 OS가 아닌 기본 이미지)의 조합은 내가 준비한 검증 환경에서 실행되지 않습니다.XRDP 서버를 시작하는 동안 오류가 발생했습니다.IPv6 주변의 설정이 맞지 않는 것 같습니다. Docker 호스트의 설정에 따라 순조롭게 작동할 수 있습니다.
제가 평소에 사용하는 서버가
Docker version 1.13.1
라서 너무 번거로워서 깊이 조사하지 못했습니다.또한 xrdp의 버전은 v0입니다.6의 ubuntu:14.04 또는 ubuntu:16.04라면
Docker version 17.06.0-ce
라도 일할 수 있습니다.제가 평소에 쓰는 방법.
아래와 같이 용기를 시작할 때
-v
에 옵션을 부여하고 메인 디렉터리를 마운트해서 사용합니다.$ docker run --rm -it \
--privileged \
-p 3389:3389 \
-u $(id -u):$(id -g) \
-e USER=yama \
-e PASSWD=yamapasswd \
-v ${HOME}/container_home:/home/yama \
lxde_xrdp:ubuntu16.10
컨테이너 내의 데스크톱 환경에서는 대부분의 개인 설정이 홈 디렉토리에 저장되므로 홈 디렉토리를 마운트하면 컨테이너를 닫거나 시작해도 개인 설정이 그대로 유지됩니다.또한 용기 안에서 오래 지속되는 데이터도 메인 디렉터리 아래에 놓으려면 용기를 멈추는 것도 문제없고 호스트와의 데이터 교환도 편리하다.
물론 호스트의 uid/gid를 계승했기 때문에 파일 권한 때문에 파일/디렉터리를 삭제할 수 없는 문제도 없습니다.
Reference
이 문제에 관하여(Docker에서 sudo와 함께 사용할 데스크톱 환경 만들기(XRDP 편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yama07/items/b905ceff0498e52b00cb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)