1台のCentOSマシンを使って複数人で開発するのだ(Docker+VSCode)
基本的にWindowsPCを使うので、CentOS含め他のOSなPCはそんなに転がってない。が、3人でCentOS上で開発する案件が決まってしまったのでPCどうしようかと考えていたところ、「Dockerでそれぞれの環境作ればいいんじゃね?」と思った次第でござる。
CentOSなんだから普通に複数人でログインして使えば?と言いたいのだが、
- /var 以下に設定ファイルを作ったり、共有メモリを使ったりするのでCentOSをそのまま使うと同時に動かせない。
のである。
で、目論見としては
どやぁ。
って後輩に言ったら
後「GUIいるんすか?」
俺「検索とか置換とか、面倒やん」
後「viでできますよ」
俺「・・・関数の定義位置にジャンプとか要るやん」
後「viでできますよ」
俺「・・・・・シンタックスの色わ」
後「vid
Dockerインストール
(略)
docker-ceいれてね
ネットワーク設定
要件としては、
なので、
- コンテナに固定IPを割り当てる
- コンテナへのルートを設定する
が必要。
コンテナへの固定IP割り当て
標準では172.17.0.1/16がブリッジネットワークになっているけど、固定IPにしたいので競合しないよう別サブネット 172.20.0.1/16 にする。
# docker network create --subnet=172.20.0.1/16 devel_nw
で、コンテナを起動するときに
# docker run --net devel_nw --ip 172.20.0.11 なんちゃらかんちゃら
--netと--ipで指定する。
WindowsPCからコンテナへのルーティング
WindowsPCからは172.*は見えないので、選択肢としては
- DockerホストPCに別IPを割り当ててiptablesで変換
- WindowsPCにrouteを設定して172.*をDockerホストにルーティング
前者のほうが完全にDockerを隠蔽しててWindowsPC側に設定が要らないのでステキなのだが、いかんせん面倒そう。なので後者。
WindowsPC側:
> route add 172.20.0.0 mask 255.255.0.0 192.168.0.10
※ ルーティングを保存しておきたい時は -p オプションをつける。
コンテナ作る
Dockerfile
FROM nvidia/cuda:10.0-devel-centos7
RUN yum -y groupinstall 'Development tools'
RUN yum -y install openssh-server bind-utils tcpdump iproute sudo
CUDA使う予定なので。その他必要なものはよしなに。
んで、ビルド。
# docker build -t hogehoge-devel .
コンテナ起動
# docker run --privileged \
-d \
--gpus all \
--net devel_nw --ip 172.20.0.11 \
--name hogehoge \
hogehoge-devel \
/sbin/init
- --privileged は /sbin/init からsystemdを起動してもらうのに必要。
- -d は実行後デタッチを指示。
- --gpus all はCUDAを使うのに必要。
- --net, --ip は固定IP指定。前述のとおり。
- --name はコンテナのID。あとで docker exec とかする時にわかりやすいように。
- hogehoge-devel は Dockerfileで作ったイメージ名。
んで、/sbin/init を実行することでコンテナ内の systemd が起動してくれてSSHデーモンが動く。
あとは、ユーザーがないとSSHでログインできないのでアカウントを追加してパスワード設定。
# docker exec hogehoge adduser hoge -G 10
# docker exec -it hogehoge passwd hoge
Changing password for user hoge.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
adduserの引数 -G 10 はユーザーをwheelグループに入れてsudoできるようにしてる。
Windowsからつないでみる
192.168.0.11 のPCから ssh で 172.20.0.11 につないで、hogeユーザーでログイン!
あれ。VSCodeの話は。。ま、いいか。