MLやってる人向けに最低限理解してほしいDocker勉強会

5.3K Views

October 25, 23

スライド概要

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

MLやってる人向けに 最低限理解してほしいDocker勉強会

2.

目次 01 環境構築に意識を向けよう 02 Dockerの概要 03 Dockerの使い方 04 Dockerのデモ 05 備考

3.

① 環境構築に 意識を向けよう

4.

意識してほしいポイント 開発者がプロジェクトの環境を100%理解していないと 利用者は環境を再現できない

5.

例えば, python で opencv を使いたい場合 Ubuntu20.04だと,ligGL.so が無いとエラーを吐く libgl1-mesa-dev を入れれば動いてくれる じゃあ README に libgl1-mesa-dev が必要だとメモしておこう

6.

半年後... 同じPC内の別プロジェクトでopencvを使いたい すでに libgl1-mesa-dev が入っているのでエラーが起こらない libgl1-mesa-dev が必要であることに気づかない (忘れてしまっている) README にメモし忘れる 利用者が開発環境を再現出来ない

7.

じゃあどうすれば良い? python 環境の再現であれば venv で 仮想化 し パッケージのインストールをrequirements.txt にまとめておけば良い それ以外の環境の場合は? 環境を仮想化し (Docker Engine ) パッケージのインストールをどっかに書いてまとめよう ( Dockerfile )

8.

全然分かんないけど,パッケージのインストールを ------Debian こんな感じに書けたら良いな...と普通思うはず

9.

全然分かんないけど,パッケージのインストールを こんな感じに書けたら良いな...と普通思うはず 偶然にも, Docker はこういう感じに書く!

10.

② Dockerの概要 ちょっと①と内容が被る

11.

面白そうなプロジェクトがあるので試してみたい...

12.

まず環境を用意してみよう → ??? + ceres-solver (クラッシュする) + COLMAP (バージョンいくつやねん)

13.

まず環境を用意してみよう → ??? + ceres-solver いや,知らんわ + COLMAP (バージョンいくつやねん) (クラッシュする)

14.

リポジトリをよく見てみると... Dockerfile を発見! とってもうれしい

15.

Docker 環境が用意されていると... 面倒な環境設定を ① ビルド ② 起動 の2ステップで済ませられる

16.

③ Dockerの使い方

17.

Dockerの仕組みは? コンテナの中に環境を作る コンテナは小さいOSみたいなもの Docker Engine上にコンテナを作る 開発者

18.

Dockerを使うと,プロジェクト利用者がいる場合に... 開発者 利用者

19.

利用者のOSに環境をそのまま移動できる 開発者 利用者

20.

コンテナが立ち上がるまで ① Dockerfileを書く ------Debian 書き方はなんとなく察するはず

21.

Dockerfileからコンテナを起動? これではコンテナを起動するたびにインストールが実行されてしまう!

22.

Dockerイメージからコンテナを起動! ② Dockerfile から Docker イメージをビルドする ③ Docker イメージからコンテナを起動する ① Dockerfile ②ビルド Docker イメージ ③起動 実際にコマンドが走るので遅い イメージからコンテナを起動するのは速い

23.

環境は出来た.しかし,ホストOSのファイルを参照するには? 仮想化によってホストのファイルが見えない これでは,ホストにあるコードを コンテナ内で動かせない 3つのアプローチがあるが (ホストOS) 今回は bindマウント のみ紹介する

24.

bindマウント ホストのディレクトリ ( pwd ) を コンテナ内のディレクトリ ( /app ) に マウントする bind (ホストOS) つまり,変更が双方向に即座に反映される 仮想化を気にせずファイルを変更できる

25.

④ Dockerのデモ

26.

内容 Dockerfileの書き方 (キャッシュが作られることを確認) コンテナのビルド・起動 VSCodeにアタッチ パッケージのインストール確認 bindマウントの確認

27.

⑤ 備考

28.

Dockerイメージのキャッシュ 一部のコマンド (RUN, COPY, ADD句など)はイメージのキャッシュが作られる キャッシュが作られるので 変更が少ないコマンドは上のほうに書く 諸説あるが,RUN句は1コマンドでまとめる

29.

build context Dockerイメージのビルドにはcontextが必要 (ここでは ”.”) contextはビルド時のルートディレクトリとなる ホストの ./requirements.txt を コンテナ内の /app にコピーする

30.

build contextと.dockerignore Docker Engine はビルド開始時にcontext配下のファイルを収集する コンテキスト配下に data/ のような大きいディレクトリがあるとビルド出来ない (確か) コンテキスト配下に .dockerignore を作成し data/ をエスケープする ( .gitignore と同じ書き方)

31.

ファイルのパーミッション 配布されているイメージの多くはコンテナ内で root ユーザーになっている コンテナ内で作成したファイルはホスト側でも root でしか開けない 対処 ① コンテナ内でホスト側のユーザーと同じUID, GIDを持つユーザーを作成する ② chmodコマンド (基本は①で良い)

32.

Docker Compose docker build, docker runは結構長いコマンドになる Docker Compose は docker-compose.yml にコンテナの構成を記述し, docker compose upするだけでコンテナのビルド・起動ができる 複数コンテナを一度に立ち上げられたりとか色々できるので便利 (コンテナを1つしか立ち上げない場合は使わなくて良いと思う)