2020/04/06

Dockerの導入方法

背景


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

記事の目的


UbuntuにDockerを導入する

Dockerの導入


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

Dockerとは


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

利点

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


導入方法

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

使用方法

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

アンインストール方法

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

備考


  • Dockerコマンド一覧
  • Dockerコマンド
    # コンテナ作成
    run image - コンテナを作成する(起動状態で)
    create image - コンテナを作成する(停止状態で)
    
    # コンテナ一覧
    ps - コンテナの一覧を表示する
    stats - コンテナのリソース使用状況一覧を表示する
    
    # コンテナ操作(1)
    rm container - コンテナを削除する
    start container - コンテナを開始する
    stop container - コンテナを停止する
    kill container - コンテナを強制停止する
    restart container - コンテナを再起動する
    pause container - コンテナ上のプロセスを一時停止する
    unpause container - コンテナ上のプロセスを再開始する
    
    # コンテナ操作(2)
    exec container - コンテナ内でプロセスを起動する
    attach container - コンテナに標準入出力をアタッチする
    
    # コンテナ操作(3)
    cp srcfile dstfile - コンテナに(から)ファイルをコピーする
    rename container newname - コンテナ名を変更する
    update container - コンテナの設定(CPU数等)を変更する
    
    # コンテナ詳細
    logs container - コンテナのログを表示する
    port container - コンテナのポートマッピングを表示する
    top container - コンテナ内のプロセスの一覧を表示する
    
    # Dockerレジストリ関連
    pull name - レジストリからイメージをダウンロードする
    push name - レジストリにイメージをアップロードする
    search term - Dockerレジストリからイメージを検索する
    login - Dockerレジストリにログインする
    logout - Dockerレジストリからログアウトする
    
    # イメージ管理
    images - イメージの一覧を表示する
    rmi images - イメージを削除する
    history image - イメージのヒストリを表示する
    commit container - コンテナからイメージを作成する
    tag image NEWimage - イメージにタグをつける
    build dockerfile - イメージをビルドする
    trust - イメージに署名する
    
    # ボリューム管理
    volume - Dockerボリュームを管理する
    
    # ネットワーク管理
    network - Dockerネットワークを管理する
    
    # インポート/エクスポート/セーブ/ロード
    export container - コンテナをファイルにエクスポートする
    import file - エクスポートファイルをイメージとしてインポートする
    save image - イメージをファイルにセーブする
    load file - セーブファイルをイメージとしてロードする
    
    # Docker Swarm(クラスタリング)関連
    swarm - Swarmを管理する
    node - Swarmノードを管理する
    stack - Swarmスタックを管理する
    secret - Swarmシークレットを管理する
    service - Swarmサービスを管理する
    
    # その他
    version - バージョンを表示する
    help - ヘルプを表示する
    info - Dockerに関するシステム情報を表示する
    inspect - 様々なDockerオブジェクトの詳細情報を表示する
    diff container - コンテナ生成後の更新ファイルを表示する
    wait container - コンテナの停止を待ち合わせる
    events - Dockerエンジンのイベントを監視・表示する
    image - イメージ管理系コマンドを実行する
    container - コンテナ管理系コマンドを実行する
    builder - イメージビルド系コマンドを実行する
    system - システム管理系コマンドを実行する
    config - コンフィグを管理する
    context - ビルド時のコンテキストを管理する
    engine - Dockerエンジンを管理する
    plugin - プラグインを管理する
    オプション(OPTIONS)
    --config string
    -c, --context string
    -D, --debug
    -H, --host list
    -l, --log-level string
    -v, --version
    --tls
    --tlscacert string
    --tlscert string
    --tlskey string
    --tlsverify
  • コンテナの一括削除コマンド
  • $ sudo docker rm $(sudo docker ps -aq)
  • イメージの一括削除コマンド
  • $ 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...