2021年1月3日日曜日

仕事でも使うので、Dockerを使ってみました。

 Docker Desktop 

 

リソースモード 

  • WSL2モード(LinuxコンテナでWSL2を有効にする) 

  • Hyper-Vモード(LinuxコンテナでWSL2を無効にする) 

    • リソースは、Docker Desktopで管理可能 

  • Windowsコンテナモード 

    • リソースはWindowsによって管理されている。 

⇒LinuxコンテナのWSL2モードを使用するの一番いい。 

理由は、 

  • 圧倒的にリソース消費を大幅に抑えられる。 

  • 通常のLinuxコンテナ起動は、1分かかっていたが、WSL2を有効にすると、10秒でコンテナが起動する。 

 

 

Linuxコンテナ 

WSL2 

Linuxコンテナ 

非WSL2 

Windowsコンテナ 

起動時間 

10秒 

実測は3秒 

60秒 

?? 

ホストとのファイル共有 

自動共有 

自分でファイル共有する 

自動共有 

消費リソース量 

 

 

 

ボリューム 

(Docker管理でおすすめ) 

○(動いた) 

 

○(動いた)

バインドマウント 

Windowsコンテナでは有りだ 

○(動いた) 

 

○(動いた) 

ファイル共有 

(阿部 非推奨) 

× 

○(動いた) 

Settings⇒Resource⇒File Sharing 

× 

Kubernetes 

 

 

× 

AKS(Azure Kubernetes Service)が対応 

Cloudでの使用方法 

ECR(Elastic Container Registory) 

ECR(Elastic Container Registory) 

Azure Container Registry 

Windows/Windows Server Core/NanoServer.NET/Windows 10 IoT 

× 

× 

○(ライセンスは??) 

 

 

 

 

ファイル共有の問題点は、 

  • 必要なディレクトリのみを共有すること。理由は変更はLinuxVMへ通知しているため。 

  • Windows側は大文字小文字を区別しないので、本稼働時にエラーになることがある。 

    • Linux Containerから、testを作って、Testを作って、testを読むとエラーになる。 

 


Docker 

ドキュメント 

コマンドリファレンス(ちと古いですが日本語です。) 

 

Dockerにおけるデータ管理 

データ管理の2つの方法 

  1. ボリューム・・利点は、Dockerのみがファイルを修正可能。 

    1. データボリューム、名前付きボリュームとも言う。 

    2. 完全にDockerによって管理されている。 

    3. Linuxコンテナ 

      1. ボリュームを使用する場合 
        docker run -it --rm -v myvol:/workspace docker/getting-started ash 
        ボリュームは名前をつけると自動的に作成される。 

      2. 既存のディレクトリを使用する場合 
        docker run -it --rm -v d:\dev:/workspace docker/getting-started ash 

    4. Windowsコンテナ 
      docker pull mcr.microsoft.com/windows/nanoserver:1903 

      1. ボリュームを使用する場合 
        docker run -it -v myvol:c:\workspace --rm mcr.microsoft.com/windows/nanoserver:1903 cmd.exe 

      2. 既存のディレクトリを使用する場合 
        docker run -it -v d:\dev:c:\workspace --rm mcr.microsoft.com/windows/nanoserver:1903 cmd.exe 

    5. コンテナを作り直しても同じボリューム名であればデータは永続的に残っている。 

  2. バインドマウント・・利点は、誰でも修正可能。 

  3. tmpfsマウント(Linuxの場合のみ) 

    1. 非永続化データの場合は早い。 

  4. 名前付きパイプ(named pipe)(Windowsの場合のみ) 

  5. ファイル共有(Linuxコンテナの非WSLモードのみ) 

    1. docker run -v D:\dev\sample_gomi\docker_file_sharing:/workspace -d -p 81:80 docker/getting-started 

    2. 日本語も使えるが大文字小文字の件は気をつけること。 

  6. あとは、リモートホストやクラウドプロバイダーを使用する。(遅いけど) 

 
阿部の見解 

Dcokerはメリットがあるように思えて、OSの更新とアプリケーションを分離させていて、セキュリティの壁が出来ている。 

端的にいうと実行環境が保護される代わりに、セキュリティ更新がお座なりになってしまうという弊害を生むと考えています。 

 

Dockerのイメージ 

Buildイメージ 

Shipイメージ 

Runイメージ 

があり、 

CI/CDと相性が良く、 

開発でもDocker Desptopがあるので簡単に環境が用意できる。 

 

DockerFile 

ただ単に上から順にDockerに投げるコマンド集 

 

超軽量なAlpine Linuxについて(アルプスと読むらしい) 

組み込み系のLinuxでは、BusyBox(様々なコマンドを纏めて持っている。管理情報を一つにしたCommand Patternのデザイン。)とmusiをベースとしたLinuxディストリビューションがある。 

BusyBoxの主な内容は、 

シェル、エディタ(vi、sed、awkなど)、システム管理コマンド(coreutils、tar、bzipなど)、ネットワークコマンド(ping、ifconfig、wgetなど)、ユーザー管理コマンド(login、su、useraddなど)、各種デーモン(crond、syslogd、httpdなど)、SELinux管理コマンド(load_policy、restoreconなど)が用意されています。 

どのくらい軽量かというと、 

CentOS 約4GB 

Ubuntu 約700MB 

Alpine 約100MB 

 

Docker Composeとは、 

複数のコンテナで構成されるアプリケーションについて、Dockerイメージのビルドや各コンテナの起動・停止などをより簡単に行えるようにするツールです。 

 

Dockerコマンド集 

docker run -i ・・コンテナの STDIN にアタッチ。 
docker run -t ・・疑似ターミナル (pseudo-TTY) を割り当て。←? 

docker rum --rm ・・終了と同時にコンテナを削除する。 

docker run --name {string-name} ・・コンテナ名を指定する 

 

よく使うコマンド 

docker ps 

docker ps -a・・すべてのコンテナを確認する。 

docker exec -it aspnetcore_sample  /bin/bash・・コンテナの中でbashを使う。 

docker exec aspnetcore_sample ipconfig・・コンテナのIPアドレスを確認する。 

 

読みたい 

Docker Desktop for Windowsユーザマニュアル 

 

阿部所感 

難しそうだと思ったのは、 

  • Kurbanetesのオーケストレーションの対応 

  • Docker上で動作するサービスの作成と24h稼働。サービスを起動したままにする方法。 

  • Docker上で動作しているアプリケーションのリモートデバック 

  • Docker上のアプリで使用するDB以外の永続データ管理の方法 

  • Dockerコンテナの統一化。そもそも種類が多いことが敷居を上げている。 

 

私は、最初にVirtual Box(Oracleの仮想化ソフトウェア)とVagrant(仮想マシンの構築と管理ツール)を入れてDockerをやりました。 

このやり方とDocker Desktopはどちらが良いのか? 

 

Dockerは大いに遊んだ。LinuxとWindowsで動作させたり、アプリケーションを入れて動かしてみた。また、作成したImageはDocker Hubにもアップした。 

 

用語 

  • FHS(Filesystem Hierarchy Standard)・・階層型ファイルシステム 

 

 

0 件のコメント:

コメントを投稿