読者です 読者をやめる 読者になる 読者になる

osechiman’s blog

開発備忘録

Docker+MobaXtermで持ち運び出来る開発環境を作る

Docker MobaXterm

Docker+MobaXtermで持ち運び出来る開発環境を作る

やりたかったこと

WindowsPCを新しいマシンに替える時に毎回環境構築するのがめんどくさいと思いませんか。

私は思います。

すごい思ってます。

なのでDockerでimageを構築しておけば取り込むだけで「はい環境構築完了」の状態にできるのではと思ってました。

ただGUI系のツールも一緒に入れておいて使いたいので

今回はそこら辺も含め出来たことを備忘録にします。

できたこと

  • Dockerコンテナ内のGUIツールをMobaXterm経由で起動する
材料
作り方

材料にあるツールはすでにインストールされている事を前提とします。

それとツールの使い方も検索すれば出て来るので端折ります。

1.自分のお好みの環境が構築出来るDockerfileを用意します(↓は私が使いたいやつです)

# 僕の考えた最強の開発環境
FROM ubuntu:16.04

# 最強の作者名
MAINTAINER osechiman

# デフォがdashなんでぇシンボリックリンク書き換えてbashでいくんでよろしくぅ!!
RUN ln -fs bash /bin/sh

# packageのupdateしてやる!!
RUN echo '==========パッケージのアップデート開始...==========' && \
apt-get update && \
echo '==========...パッケージのアップデート終了=========='

# ついでにアップグレードお前もだ!!
RUN echo '==========パッケージのアップグレード開始...==========' && \
apt-get -y upgrade && \
apt-get -f install && \
echo '==========...パッケージのアップグレード終了=========='

# 日本仕様に改造してくれるわっ!
RUN echo '==========日本仕様に変更中...==========' && \
apt-get install -y language-pack-ja-base language-pack-ja && \
update-locale LANG=ja_JP.utf8 LANGUAGE=ja_JP.utf8 LC_ALL=ja_JP.utf8 && \
source /etc/default/locale && \
apt-get install -y man manpages-ja manpages-ja-dev && \
echo '==========...日本仕様に変更完了=========='

# 必要なモジュールインストールしていくのだ
## apt-get編
RUN apt-get install -y make vim php bash-completion git git-flow tmux curl python wget nkf ctags golang ssh xorg openbox

## curlとかwgetで頑張る編
RUN echo '==========composerのインストール==========' && \
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin && \
echo '==========nodebrewのインストール==========' && \
curl -L git.io/nodebrew | perl - setup && \
export PATH=$HOME/.nodebrew/current/bin:$PATH && \
nodebrew -v && \
export NODEBREW_ROOT=$HOME/.nodebrew && \
echo '==========nodeのインストール==========' && \
nodebrew install-binary stable && \
nodebrew use stable && \
node -v

## 設定ファイルを作っていくのです
RUN cp /usr/share/bash-completion/completions/git-flow /etc/bash_completion.d

## .bashrcに色々書いてく...
RUN echo "export GOROOT=~/go" >> ~/.bashrc
RUN echo "export NODEBREW_ROOT=~/.nodebrew" >> ~/.bashrc
RUN echo "export PATH=$PATH:/usr/local/bin/go/bin:$GOROOT/bin:~/.nodebrew/current/bin" >> ~/.bashrc
RUN echo "export PS1='[\[\033[0;34m\]\u@\h \W\[\033[0m\]]$ '" >> ~/.bashrc
RUN echo "if [ -f /etc/bash_completion ] && ! shopt -oq posix; then" >> ~/.bashrc
RUN echo "    . /etc/bash_completion" >> ~/.bashrc
RUN echo "fi" >> ~/.bashrc
RUN source ~/.bashrc
# 使い方
#
## buildコマンド
### docker build -t my-env:1.0 [Dockerfile-DirPath]
#
## コンテナ起動コマンドサンプル
### docker run -itd -p 2022:22 -v [source-dir]:/source --name my-env my-env:1.0 

※割りとはっちゃけたコメントになっているのは深夜に作業した為です。

  • ポイント

Dockerコンテナに突っ込んだGUIツールを利用するために必要なのは

ssh xorg openbox

こちらになります。

他に入れたいコマンドやツールは適宜読み替えてください。

2.Dockerfileからimageを構築

MobaXtermを起動し「Start local terminal」を選択します。

そしたら

docker-machine start sandbox

で作成している仮想環境を立ち上げて

その中でimageを作ってコンテナを起動します。

docker build --no-cache=true -t my-env:1.0 .
・
・
・ //image作成中
docker run -itd -p 2022:22 --name my-env my-env:1.0

コンテナ起動時に-pで

-p 2022:22

しておいてください。

外からコンテナに接続する際に使います。

別に何番ポートでも構わないのですがsshで接続するのでわかりやすいように2022を設定しました。

3.コンテナでsshdを起動&rootでsshを許可する

vim /etc/ssh/sshd_config

 26 # Authentication:
 27 LoginGraceTime 120
 28 PermitRootLogin prohibit-password
 29 StrictModes yes

 26 # Authentication:
 27 LoginGraceTime 120
 28 PermitRootLogin yes // yesに書き換え
 29 StrictModes yes

rootのパスワードも変更

[root@79d7dbd28cb8 /]$ passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

そしたらsshd起動!

/etc/init.d/ssh start

これでコンテナへの接続準備は完了しました。

docker ps で確認するとこんな感じ。

docker@sandbox:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
79d7dbd28cb8        sandbox             "/bin/bash"         24 minutes ago      Up 24 minutes       0.0.0.0:2022->22/tcp   my-env

4.MobaXtermでDockerのコンテナに接続する

[osechiman.osechiman] ➤ ssh -p 2022 root@192.168.99.100 // passwordは先程変更したやつ
Warning: Permanently added '[192.168.99.100]:2022' (RSA) to the list of known hosts.
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.27-boot2docker x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
Last login: Mon Jan  9 08:03:37 2017 from 192.168.99.1
[root@79d7dbd28cb8 ~]$

docker-machineのIPに対して2022ポートでアクセスすると作成したコンテナにアクセスしにいきます。

ssh -p 2022 root@192.168.99.100

xmanを起動しているところが以下の画像です。

f:id:osechiman:20170109171347p:plain

これでDocker内のGUIツールをMobaXterm経由で起動する事が出来ました!

これならどこの現場に行ってもWindowsPCなら環境構築に苦労しないで済むはずっ...!

できなかったこと

この手順ではsshdのデーモン登録が出来ていないです。

今後対応するつもりだけど備忘録にするほどでもないかなぁ。