LoginSignup
1
5

More than 5 years have passed since last update.

Laradockのワークスペースでデスクトップ環境(GUI)を使えるようにする

Last updated at Posted at 2019-03-15

この記事で行うこと

以前書いた記事 Dockerで開発用デスクトップ環境(GUI)を構築する の続きです。Laradockのworkspaceにリモートデスクトップで入ってデスクトップ環境(GUI)を使えるようにします。

※ Laradockとは

DockerでLaravelを動かすためのプロジェクトです。私はまだLaravelを使う予定がないにも関わらず、開発用にLaradockを使わせていただいております。Laravel以外の機能もてんこ盛りで、開発初期に手っ取り早く開発環境を構築するには便利です。

※ Laradock環境構築で参考にしたページ(感謝します)

Laravelの開発環境をLaradockを使って構築する

環境構築

導入

Laradockのダウンロード

cd ~
mkdir work
cd work
git clone https://github.com/laradock/laradock.git

Docker環境の設定

cd laradock
cp env-example .env

workspaceのベースイメージをビルド(ソフトウェアをバージョンアップするため)

ここで、インストールされるソフトウェア(PHP、workspaceのOS)のバージョンを調査する。記事に記載したのは執筆時点のバージョンです。

workspaceのベースイメージのバージョンを調べる:

grep FROM ~/work/laradock/workspace/Dockerfile

FROM letsdockerize/laradock-workspace:2.4-${LARADOCK_PHP_VERSION}

grep LARADOCK_PHP_VERSION ~/work/laradock/docker-compose.yml
  • LARADOCK_PHP_VERSION=${PHP_VERSION}
  • LARADOCK_PHP_VERSION=${PHP_VERSION}
grep PHP_VERSION ~/work/laradock/.env

PHP_VERSION=7.2

以上の情報から、PHPのバージョンは7.2、workspaceのベースイメージのバージョンは以下の通り。

FROM letsdockerize/laradock-workspace:2.4-7.2

ところが https://hub.docker.com/r/letsdockerize/laradock-workspace/tags を見ると「2.4-7.3」があるので、.envファイルのPHP_VERSIONを7.3に設定する等して、PHPを最新バージョンに上げられると期待できる。workspaceのベースイメージの候補は以下の通り。

FROM letsdockerize/laradock-workspace:2.4-7.3

この候補イメージのOSのバージョンを調べる。

docker run letsdockerize/laradock-workspace:2.4-7.3 cat /etc/issue

Ubuntu 16.04.6 LTS \n \l

バージョン調査の後始末。

docker rmi -f letsdockerize/laradock-workspace:2.4-7.3

LinuxのバージョンはUbuntu 16.04だった。workspaceにリモートデスクトップで入るには、Ubuntu 18.04の方が良いので、この候補をそのまま使わず、Ubuntuのバージョンを上げる。workspaceのベースイメージをgit cloneして、

cd ~/work
git clone https://github.com/LaraDock/workspace
cd workspace
cp Dockerfile-73 Dockerfile

workspaceのベースイメージのベースイメージ(ややこしい)を調査。

grep FROM Dockerfile

FROM phusion/baseimage:latest

workspaceのベースイメージのベースイメージのOSのバージョンを確認する。

docker run phusion/baseimage:latest cat /etc/issue

Ubuntu 16.04.3 LTS \n \l

調査の後始末。

docker rmi -f phusion/baseimage:latest

もし、より新しいphusion/baseimageがあれば、そのOSのバージョンを調べてみる。phusion/baseimageの情報:https://hub.docker.com/r/phusion/baseimage/tags

masterがlatestよりも新しいので、OSのバージョンを確認する。

docker run phusion/baseimage:master cat /etc/issue

Ubuntu 18.04.1 LTS \n \l

Ubuntu 18.04なので、これをworkspaceのベースイメージのベースイメージにする。phusion/baseimage:masterはベータ版っぽい?今回構築するのは開発環境なので、ベータ版でも良しとする。workspaceのベースイメージのDockerファイルを編集:

( ~/work/workspace/Dockerfile )

# workspaceのベースイメージのベースイメージをUbuntu 16.04 → 18.04のものに変更
- FROM phusion/baseimage:latest
+ FROM phusion/baseimage:master

workspaceのベースイメージをビルドする。イメージ名は「local/laradock-workspace:2.4-7.3」にした。

cd ~/work/workspace
docker build -t local/laradock-workspace:2.4-7.3 .

オリジナルworkspace(workspace_org)をビルド

workspaceのベースイメージがビルドできたら、workspaceをビルドする。ただし名前をworkspace_orgに変更した。理由は、workspaceにデスクトップの機能を追加したいので、オリジナルのworkspaceをworkspace_orgに名前変更して、新たなworkspaceのベースイメージにするため。

cd ~/work/laradock
mv workspace workspace_org
mkdir workspace_desktop

.envファイルを以下のように編集する。

~/work/laradock/.env
( ~/work/laradock/.env )

# コンテナ内に作られるlaradockユーザのuidとgidを、ホスト側のユーザに合わせると良い
- WORKSPACE_PUID=1000
- WORKSPACE_PGID=1000
+ WORKSPACE_PUID=[id -uの値]
+ WORKSPACE_PGID=[id -gの値]

- PHP_WORKER_PUID=1000
- PHP_WORKER_PGID=1000
+ PHP_WORKER_PUID=[id -uの値]
+ PHP_WORKER_PGID=[id -gの値]

# PHPを最新バージョンにする
- PHP_VERSION=7.2
+ PHP_VERSION=7.3

workspace_orgのDockerfileを以下のように編集。

( ~/work/laradock/workspace_org/Dockerfile )

# workspaceのベースイメージをUbuntu 18.04ベースのものに変更
- FROM letsdockerize/laradock-workspace:2.4-${LARADOCK_PHP_VERSION}
+ FROM local/laradock-workspace:2.4-${LARADOCK_PHP_VERSION}

# Set Environment Variables
ENV DEBIAN_FRONTEND noninteractive
+ 
+ # proxy経由でインターネットに接続している場合、ビルドを通すために環境変数の設定が必要。proxy経由でなければ不要。
+ ENV http_proxy='http://proxy:8080'  \
+     https_proxy='http://proxy:8080'  \
+     no_proxy='127.0.0.1,localhost'

# pgsql clientの行入れ替え(Ubuntu 18.04では、これをしないとビルドエラーになった)
-     && add-apt-repository "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" \
-     && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \
+     && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \
+     && add-apt-repository "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" \

docker-compose.ymlを以下のように編集。

~/work/laradock/docker-compose.yml
( ~/work/laradock/docker-compose.yml )

- ### Workspace Utilities ##################################
-     workspace:
-       build:
-         context: ./workspace

+ ### Workspace Utilities (desktop) ##################################
+     workspace:
+       build:
+         context: ./workspace_desktop
+       volumes:
+         - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG}
+         #- ${DATA_PATH_HOST}/home:/home
+       extra_hosts:
+         - "dockerhost:${DOCKER_HOST_IP}"
+       ports:
+         - "${WORKSPACE_SSH_PORT}:22"
+         - "3389:3389"
+         # RDPのポートを公開する
+       expose:
+         - "3389"
+       tty: true
+       environment:
+         - PHP_IDE_CONFIG=${PHP_IDE_CONFIG}
+         - DOCKER_HOST=tcp://docker-in-docker:2375
+       networks:
+         - frontend
+         - backend
+       links:
+         - docker-in-docker
+     # XRDPサーバを起動する
+       command: >
+         sudo bash -c "[ -e /var/run/xrdp/xrdp.pid ] && rm /var/run/xrdp/xrdp.pid ;
+             /etc/init.d/xrdp restart && tail -F /var/log/xrdp-sesman.log"
+ 
+ ### Workspace Utilities (org) ##################################
+     workspace_org:
+       build:
+         context: ./workspace_org

workspace_orgをビルドする。

cd ~/work/laradock
docker-compose build workspace_org

ビルドできたら、試しにworkspace_orgを立ち上げてみる。以下を1行ずつ実行。

docker-compose up -d workspace_org
docker-compose ps
docker-compose exec --user=laradock workspace_org bash
php -v
cat /etc/issue
exit
docker-compose down -v

以下のように表示され、PHPとUbuntuのバージョンが上がっているのが確認できた。

$ docker-compose ps
           Name                      Command          State          Ports        
----------------------------------------------------------------------------------
laradock_docker-in-docker_1   dockerd-entrypoint.sh   Up      2375/tcp            
laradock_workspace_org_1      /sbin/my_init           Up      0.0.0.0:2222->22/tcp

/var/www$ php -v
PHP 7.3.3-1+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Mar  7 2019 20:31:49) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.3, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.3-1+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies

/var/www$ cat /etc/issue
Ubuntu 18.04.2 LTS \n \l

オリジナルworkspceをベースイメージにして、デスクトップworkspace(workspace_desktop)をビルド

次に、workspace_orgをベースイメージにして、デスクトップ機能を追加したworkspaceをビルドする。新規Dockerfileを編集。

( ~/work/laradock/workspace_desktop/Dockerfile )

FROM laradock_workspace_org

ARG PASSWD=laradock

# xrdp、lxde、日本語環境等をインストール
RUN apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y \
      sudo \
      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/*

RUN echo "startlxde" > /etc/skel/.xsession

# リモートデスクトップのログイン用に、laradockユーザのパスワードを設定する
RUN echo laradock:${PASSWD} | sudo chpasswd

# sudoを使用できるようにする
RUN echo "ALL ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/ALL

# 日本語ロケールを設定する
RUN locale-gen ja_JP.UTF-8
ENV LANGUAGE=ja_JP:ja  \
    LC_ALL=ja_JP.UTF-8 \
    LC_CTYPE=ja_JP.UTF-8 \
    LANG=ja_JP.UTF-8
RUN apt-get update \
    && apt-get install -y tzdata
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 'LC_CTYPE=ja_JP.UTF-8' > /etc/default/locale \
    && echo 'LANG=ja_JP.UTF-8' >> /etc/default/locale

workspaceをビルドする。

cd ~/work/laradock
docker-compose build workspace

workspaceを立ち上げる。

docker-compose up -d workspace
docker-compose ps

以下のように表示された。

           Name                          Command               State                      Ports                    
-------------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1   dockerd-entrypoint.sh            Up      2375/tcp                                    
laradock_workspace_1          sudo bash -c [ -e /var/run ...   Up      0.0.0.0:2222->22/tcp, 0.0.0.0:3389->3389/tcp

workspaceが正常に上がったか確認。

docker-compose logs workspace

以下のように表示された。

Attaching to laradock_workspace_1
workspace_1            |  * Restarting Remote Desktop Protocol server           xrdp-sesman[29]: (29)(140060462175552)[DEBUG] libscp initialized
workspace_1            | 
workspace_1            | xrdp-sesman[29]: (29)(140060462175552)[DEBUG] Testing if xrdp-sesman can listen on 127.0.0.1 port 3350.
workspace_1            | 
workspace_1            | xrdp-sesman[30]: (30)(140060462175552)[INFO ] starting xrdp-sesman with pid 30
workspace_1            | 
workspace_1            | xrdp-sesman[29]: (29)(140060462175552)[DEBUG] Closed socket 4 (AF_INET6 ::ffff:127.0.0.1 port 3350)
workspace_1            | 
workspace_1            | xrdp-sesman[30]: (30)(140060462175552)[INFO ] listening to port 3350 on 127.0.0.1
workspace_1            | 
workspace_1            | [20190315-23:28:00] [DEBUG] Testing if xrdp can listen on 0.0.0.0 port 3389.
workspace_1            | [20190315-23:28:00] [DEBUG] Closed socket 6 (AF_INET6 :: port 3389)
workspace_1            |                                                 [ OK ]
workspace_1            | [20190315-23:28:00] [DEBUG] libscp initialized
workspace_1            | [20190315-23:28:00] [DEBUG] Testing if xrdp-sesman can listen on 127.0.0.1 port 3350.
workspace_1            | [20190315-23:28:00] [DEBUG] Closed socket 4 (AF_INET6 ::ffff:127.0.0.1 port 3350)
workspace_1            | [20190315-23:28:00] [INFO ] starting xrdp-sesman with pid 30
workspace_1            | [20190315-23:28:00] [INFO ] listening to port 3350 on 127.0.0.1

リモートデスクトップで入れるか、確認する。マイクロソフトリモートデスクトップの設定例:

Connection name     container_laradock
PC name             localhost
User name           laradock
Password            laradock

以上で、Laradockのワークスペースでデスクトップ環境(GUI)が使えるようになりました。

(オプション)デスクトップworkspaceをベースイメージにして、更に新たなworkspace(workspace_python)をビルド

このデスクトップworkspaceをベースイメージにして、更に機能を付け加えることも可能です。
例として、Pythonインストールを加えてみます。

新たなworkspaceを作る場合、そのベースイメージのコンテナは不要なので、落として消しておく。

cd ~/work/laradock
docker-compose down -v

workspaceをworkspace_desktopに名前変更。laradock_workspaceのIMAGE IDを調べて、

docker images

以下のように表示された。

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
laradock_workspace         latest              9a03ce6de32f        14 minutes ago      2.43GB
laradock_workspace_org     latest              97321b240e0b        33 minutes ago      901MB
(後略)

Dockerイメージの名前変更。

docker tag [laradock_workspaceのIMAGE ID] laradock_workspace_desktop
docker rmi laradock_workspace
docker images

以下のように、laradock_workspaceからlaradock_workspace_desktopに名前変更された。

REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
laradock_workspace_desktop   latest              9a03ce6de32f        18 minutes ago      2.43GB
laradock_workspace_org       latest              97321b240e0b        36 minutes ago      901MB
(後略)

新workspace用ディレクトリを作成する。

mkdir workspace_python

docker-compose.ymlを以下のように編集する。

~/work/laradock/docker-compose.yml
( ~/work/laradock/docker-compose.yml )

- ### Workspace Utilities (desktop) ##################################
-     workspace:

+ ### Workspace Utilities (Python) ##################################
+     workspace:
+       build:
+         context: ./workspace_python
+       volumes:
+         - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG}
+         #- ${DATA_PATH_HOST}/home/laradock:/home/laradock
+       extra_hosts:
+         - "dockerhost:${DOCKER_HOST_IP}"
+       ports:
+         - "${WORKSPACE_SSH_PORT}:22"
+         - "3389:3389"
+         # RDPのポートを公開する
+       expose:
+         - "3389"
+       tty: true
+       environment:
+         - PHP_IDE_CONFIG=${PHP_IDE_CONFIG}
+         - DOCKER_HOST=tcp://docker-in-docker:2375
+       networks:
+         - frontend
+         - backend
+       links:
+         - docker-in-docker
+     # XRDPサーバを起動する
+       command: >
+         sudo bash -c "[ -e /var/run/xrdp/xrdp.pid ] && rm /var/run/xrdp/xrdp.pid ;
+             /etc/init.d/xrdp restart && tail -F /var/log/xrdp-sesman.log"
+ 
+ 
+ ### Workspace Utilities (desktop) ##################################
+     workspace_desktop:

workspace_desktopをベースイメージにして、Pythonを追加したworkspaceをビルドする。新規Dockerfileの例は以下の通り。

※ VSCodeをインストールしているので、Laradlckのcodeというエイリアスをwwwに変更しています。

( ~/work/laradock/workspace_python/Dockerfile )

FROM laradock_workspace_desktop

RUN apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y \
      curl \
      wget \
      git \
      python3-distutils \
      llvm \
      sqlite3 \
      libssl-dev \
      libbz2-dev \
      libreadline-dev \
      libsqlite3-dev \
      libncurses5-dev \
      libncursesw5-dev \
      python-tk \
      python3-tk \
      tk-dev \
      aria2 \
      ccache \
    && apt-get clean \
    && rm -rf /var/cache/apt/archives/* \
    && rm -rf /var/lib/apt/lists/*

USER laradock

ENV HOME="/home/laradock"
ENV PYENV_ROOT="/home/laradock/.anyenv/envs/pyenv" \
    PYENV_SHELL="bash" \
    PATH="$HOME/.local/bin:$HOME/.anyenv/envs/pyenv/shims:$HOME/.anyenv/envs/pyenv/bin:$HOME/.anyenv/bin:$HOME/.yarn/bin:$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$HOME/.nvm/versions/node/v11.11.0/bin:/var/www/vendor/bin:$HOME/.composer/vendor/bin:/sbin:/bin:/usr/bin:/usr/local/bin:/snap/bin"

RUN cd $HOME \
    && git clone https://github.com/riywo/anyenv $HOME/.anyenv \
    && echo '' >> $HOME/.bashrc \
    && echo '# anyenv' >> $HOME/.bashrc \
    && echo 'if [ -d $HOME/.anyenv ]' >> $HOME/.bashrc \
    && echo 'then' >> $HOME/.bashrc \
    && echo '    export PATH="$HOME/.anyenv/bin:$PATH"' >> $HOME/.bashrc \
    && echo '    eval "$(anyenv init -)"' >> $HOME/.bashrc \
    && echo 'fi' >> $HOME/.bashrc \
    && anyenv install --force-init \
    && mkdir -p $(anyenv root)/plugins \
    && git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update \
    && anyenv install pyenv \
    && git clone https://github.com/yyuu/pyenv-pip-rehash $(pyenv root)/plugins/pyenv-pip-rehash \
    && git clone https://github.com/yyuu/pyenv-virtualenv $(pyenv root)/plugins/pyenv-virtualenv \
    && git clone https://github.com/yyuu/pyenv-ccache $(pyenv root)/plugins/pyenv-ccache \
    && git clone https://github.com/massongit/pyenv-pip-update $(pyenv root)/plugins/pyenv-pip-update \
    && sudo groupadd developer \
    && sudo gpasswd --add $(whoami) developer

USER root
RUN sudo echo 'Defaults exempt_group="developer"' > /etc/sudoers.d/developer

USER laradock
RUN pyenv install 3.7.2 \
    && pyenv global 3.7.2 \
    && pyenv versions \
    && pip install --upgrade pip \
    && pip install --user pipenv \
    && echo '' >> $HOME/.bashrc \
    && echo '# pipenv' >> $HOME/.bashrc \
    && echo 'export PATH=$HOME/.local/bin:$PATH' >> $HOME/.bashrc

RUN mkdir -p $HOME/Downloads \
    && cd $HOME/Downloads \
    && wget https://download.jetbrains.com/python/pycharm-community-2018.3.3.tar.gz \
    && wget -O code-stable-1546901613.tar.gz https://go.microsoft.com/fwlink/?LinkID=620884 \
    && mkdir -p $HOME/opt \
    && cd $HOME/opt \
    && tar xf $HOME/Downloads/pycharm-community-2018.3.3.tar.gz \
    && tar xf $HOME/Downloads/code-stable-1546901613.tar.gz \
    && sed -i -e 's/ code=/ www=/g' $HOME/aliases.sh \
    && echo '' >> $HOME/.bashrc \
    && echo '# PyCharm' >> $HOME/.bashrc \
    && echo 'export PATH=$HOME/opt/pycharm-community-2018.3.3/bin:$PATH' >> $HOME/.bashrc \
    && echo '' >> $HOME/.bashrc \
    && echo '# VSCode' >> $HOME/.bashrc \
    && echo 'export PATH=$HOME/opt/VSCode-linux-x64/bin:$PATH' >> $HOME/.bashrc

workspaceをビルドする。

docker-compose build workspace

workspaceを立ち上げる。

docker-compose up -d workspace
docker-compose ps

以下のように表示された。

           Name                          Command               State                      Ports                    
-------------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1   dockerd-entrypoint.sh            Up      2375/tcp                                    
laradock_workspace_1          sudo bash -c [ -e /var/run ...   Up      0.0.0.0:2222->22/tcp, 0.0.0.0:3389->3389/tcp

workspaceが正常に上がったか確認する。

docker-compose logs workspace

以下のように表示された。

Attaching to laradock_workspace_1
workspace_1            |  * Restarting Remote Desktop Protocol server           xrdp-sesman[29]: (29)(140680654812480)[DEBUG] libscp initialized
workspace_1            | 
workspace_1            | xrdp-sesman[29]: (29)(140680654812480)[DEBUG] Testing if xrdp-sesman can listen on 127.0.0.1 port 3350.
workspace_1            | 
workspace_1            | xrdp-sesman[30]: (30)(140680654812480)[INFO ] starting xrdp-sesman with pid 30
workspace_1            | 
workspace_1            | xrdp-sesman[29]: (29)(140680654812480)[DEBUG] Closed socket 4 (AF_INET6 ::ffff:127.0.0.1 port 3350)
workspace_1            | 
workspace_1            | xrdp-sesman[30]: (30)(140680654812480)[INFO ] listening to port 3350 on 127.0.0.1
workspace_1            | 
workspace_1            | [20190316-00:12:08] [DEBUG] Testing if xrdp can listen on 0.0.0.0 port 3389.
workspace_1            | [20190316-00:12:08] [DEBUG] Closed socket 6 (AF_INET6 :: port 3389)
workspace_1            |                                                 [ OK ]
workspace_1            | [20190316-00:12:08] [DEBUG] libscp initialized
workspace_1            | [20190316-00:12:08] [DEBUG] Testing if xrdp-sesman can listen on 127.0.0.1 port 3350.
workspace_1            | [20190316-00:12:08] [DEBUG] Closed socket 4 (AF_INET6 ::ffff:127.0.0.1 port 3350)
workspace_1            | [20190316-00:12:08] [INFO ] starting xrdp-sesman with pid 30
workspace_1            | [20190316-00:12:08] [INFO ] listening to port 3350 on 127.0.0.1

リモートデスクトップで入って、python3.7.2やpycharm.shやcodeが立ち上がるか確認する。

作業が終わってコンテナを落とす時:

cd ~/work/laradock
docker-compose stop

作業を再開する時:

cd ~/work/laradock
docker-compose up -d workspace
docker-compose ps
1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5