2020/04/06

Dockerの導入方法

背景


仕事で、複数のエッジコンピュータにデプロイを行うにあたり、Dockerイメージを利用する必要があった

記事の目的


UbuntuにDockerを導入する

Dockerの導入


ここでは、Dockerの導入方法と使用方法について記載する。

Dockerとは


Dockerはコンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンソースソフトウェアあるいはオープンプラットフォームである。 Dockerはコンテナ仮想化を用いたOSレベルの仮想化(英語版)によりアプリケーションを開発・実行環境から隔離し、アプリケーションの素早い提供を可能にする。かつその環境自体をアプリケーションと同じようにコード(イメージ)として管理可能にする。Dockerを開発・テスト・デプロイに用いることで「コードを書く」と「コードが製品として実行される」間の時間的ギャップを大きく短縮できる。

利点

  • コンテナに再現性があり、どの環境下でも同じ動作をする
  • コンテナイメージはリポジトリ管理できるため、ロールバックが容易
  • イメージ内で環境が出来上がっているため、環境構築が容易になる


導入方法

Dockerの導入手順は、下記の通りである。ここを参照
  1. Dockerをインストールする(Ubuntuの場合)
    1. $ sudo apt update
    2. $ sudo apt install \
    3. apt-transport-https \
    4. ca-certificates \
    5. curl \
    6. gnupg-agent \
    7. software-properties-common
    8. $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    9. $ sudo apt-key fingerprint 0EBFCD88
    10. $ sudo add-apt-repository \
    11. "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    12. $(lsb_release -cs) \
    13. stable"
    14. $ sudo apt update
    15. $ sudo apt install docker-ce docker-ce-cli containerd.io
  2. プロキシ設定(オプション)
    1. $ sudo mkdir -p /etc/systemd/system/docker.service.d/
    2. $ sudo nano /etc/systemd/system/docker.service.d/10_docker_proxy.conf
    10_docker_proxy.conf
    1. [service]
    2. Environment=HTTP_PROXY=http://your.proxy.com:8080
    3. Environment=HTTPS_PROXY=http://your.proxy.com:8080
    1. $ sudo systemctl daemon-reload
    2. $ sudo systemctl restart docker
  3. 動作確認
    1. $ sudo docker run hello-world
    2. ...
    3. Hello from docker
    4. ...

使用方法

Dockerの使用手順は、下記の通りである。
  1. DockerイメージをDocker Hubで探す
  2. 以下のコマンドでも検索可能(nvidiaを検索)
    1. $ sudo docker search nvidia | more
  3. Dockerイメージをpullする
    1. $ sudo docker pull nvidia/cuda
  4. Dockerイメージを確認する
    1. $ sudo docker images
  5. Dockerイメージの詳細を確認する
    1. $ sudo docker inspect nvidia/cuda
  6. Dockerイメージを起動する
    1. $ sudo docker run nvidia/cuda:latest echo "Hello World"
    2. $ sudo docker run nvidia/cuda:latest -d echo "Hello World" #バックグラウンド実行
    3. $ sudo docker attach --sig-proxy=false id(コンテナID) #フォアグラウンド実行に変更
  7. 実行中のコンテナを確認する
    1. $ sudo docker ps
  8. 実行中のコンテナ一時中断、再開
    1. $ sudo docker kill id(コンテナID) #中断
    2. $ sudo docker start id(コンテナID) #再開
  9. 実行中のコンテナを削除する
    1. $ sudo docker rm id(コンテナID)
  10. コンテナの中で作業する
    1. $ sudo docker run -i -t nvidia/cuda /bin/bash
  11. コンテナからイメージを作成する
    1. $ sudo docker run -i -t nvidia/cuda /bin/bash #コンテナに入る
    2. $ root@7432974# 作業をする
    3. ...
    4. $ root@7432974# exit
    5. $ sudo docker ps -a #先ほどのコンテナを探す
    6. $ sudo docker commit id(コンテナID) emptySet/sample
  12. Dockerイメージを削除する
    1. $ sudo docker rmi nvidia/cuda

アンインストール方法

Dockerのアンインストール手順は、下記の通りである。
  1. docker docker-engine containerd.ioを削除する
    1. $ sudo apt remove docker docker-engine containerd.io
  2. イメージ・コンテナを削除する
    1. # Docker CEを削除
    2. $ sudo apt-get purge docker-ce docker-ce-cli
    3. # dockerイメージやコンテナも削除
    4. sudo rm -rf /var/lib/docker
    5. # 不要なパッケージの削除
    6. sudo apt autoremove

備考


  • Dockerコマンド一覧
  • Dockerコマンド
    1. # コンテナ作成
    2. run image - コンテナを作成する(起動状態で)
    3. create image - コンテナを作成する(停止状態で)
    4. # コンテナ一覧
    5. ps - コンテナの一覧を表示する
    6. stats - コンテナのリソース使用状況一覧を表示する
    7. # コンテナ操作(1)
    8. rm container - コンテナを削除する
    9. start container - コンテナを開始する
    10. stop container - コンテナを停止する
    11. kill container - コンテナを強制停止する
    12. restart container - コンテナを再起動する
    13. pause container - コンテナ上のプロセスを一時停止する
    14. unpause container - コンテナ上のプロセスを再開始する
    15. # コンテナ操作(2)
    16. exec container - コンテナ内でプロセスを起動する
    17. attach container - コンテナに標準入出力をアタッチする
    18. # コンテナ操作(3)
    19. cp srcfile dstfile - コンテナに(から)ファイルをコピーする
    20. rename container newname - コンテナ名を変更する
    21. update container - コンテナの設定(CPU数等)を変更する
    22. # コンテナ詳細
    23. logs container - コンテナのログを表示する
    24. port container - コンテナのポートマッピングを表示する
    25. top container - コンテナ内のプロセスの一覧を表示する
    26. # Dockerレジストリ関連
    27. pull name - レジストリからイメージをダウンロードする
    28. push name - レジストリにイメージをアップロードする
    29. search term - Dockerレジストリからイメージを検索する
    30. login - Dockerレジストリにログインする
    31. logout - Dockerレジストリからログアウトする
    32. # イメージ管理
    33. images - イメージの一覧を表示する
    34. rmi images - イメージを削除する
    35. history image - イメージのヒストリを表示する
    36. commit container - コンテナからイメージを作成する
    37. tag image NEWimage - イメージにタグをつける
    38. build dockerfile - イメージをビルドする
    39. trust - イメージに署名する
    40. # ボリューム管理
    41. volume - Dockerボリュームを管理する
    42. # ネットワーク管理
    43. network - Dockerネットワークを管理する
    44. # インポート/エクスポート/セーブ/ロード
    45. export container - コンテナをファイルにエクスポートする
    46. import file - エクスポートファイルをイメージとしてインポートする
    47. save image - イメージをファイルにセーブする
    48. load file - セーブファイルをイメージとしてロードする
    49. # Docker Swarm(クラスタリング)関連
    50. swarm - Swarmを管理する
    51. node - Swarmノードを管理する
    52. stack - Swarmスタックを管理する
    53. secret - Swarmシークレットを管理する
    54. service - Swarmサービスを管理する
    55. # その他
    56. version - バージョンを表示する
    57. help - ヘルプを表示する
    58. info - Dockerに関するシステム情報を表示する
    59. inspect - 様々なDockerオブジェクトの詳細情報を表示する
    60. diff container - コンテナ生成後の更新ファイルを表示する
    61. wait container - コンテナの停止を待ち合わせる
    62. events - Dockerエンジンのイベントを監視・表示する
    63. image - イメージ管理系コマンドを実行する
    64. container - コンテナ管理系コマンドを実行する
    65. builder - イメージビルド系コマンドを実行する
    66. system - システム管理系コマンドを実行する
    67. config - コンフィグを管理する
    68. context - ビルド時のコンテキストを管理する
    69. engine - Dockerエンジンを管理する
    70. plugin - プラグインを管理する
    オプション(OPTIONS)
    1. --config string
    2. -c, --context string
    3. -D, --debug
    4. -H, --host list
    5. -l, --log-level string
    6. -v, --version
    7. --tls
    8. --tlscacert string
    9. --tlscert string
    10. --tlskey string
    11. --tlsverify
  • コンテナの一括削除コマンド
    1. $ sudo docker rm $(sudo docker ps -aq)
  • イメージの一括削除コマンド
    1. $ sudo docker rmi $(sudo docker images -aq)


まとめ


  • Dockerの導入方法について調査、記載した


参考文献




変更履歴


  1. 2020/04/08: 新規作成
  2. 2020/05/04: アンインストール方法追記
  3. 2020/05/13: Dockerイメージの一括削除方法追記

0 件のコメント:

コメントを投稿

MQTTの導入

背景 IoTデバイスの接続環境構築のため、MQTT(mosquitto)の導入を行った。 記事の目的 MQTT(mosquitto)をUbuntuに導入する mosquitto ここではmosquittoについて記載する。 MQTT MQTT(Message Qu...