One place for hosting & domains

      2004へのDockerのインストールおよび使用方法

      Ubuntu 20.04へのDockerのインストールおよび使用方法


      はじめに

      Dockerは、コンテナでアプリケーションプロセスを管理する過程を簡単にするアプリケーションです。コンテナを使用すると、リソースを分離したプロセスでアプリケーションを実行できます。 VM(仮想マシン)に似ていますが、コンテナはより移植性が高く、リソースにやさしく、ホストオペレーティングシステムに依存します。

      Dockerコンテナのさまざまなコンポーネントの詳細な紹介については、Docker Ecosystem: 共通コンポーネントの紹介をご覧ください。

      このチュートリアルでは、Ubuntu 20.04にDocker Community Edition (CE) をインストールして使用します。Docker自体をインストールし、コンテナとイメージを操作し、イメージをDockerリポジトリにプッシュします。

      必要条件

      このチュートリアルを実行するには、次のものが必要です。

      • Ubuntu 20.04初期サーバーセットアップガイドに従ってセットアップされたUbuntu 20.04サーバー1台、sudo非 root ユーザー、ファイアウォール。
      • ステップ7および8に示すように、独自のイメージを作成してDocker Hubにプッシュする場合は、Docker Hubのアカウント。

      ステップ1— Dockerをインストールする

      公式Ubuntuリポジトリで利用可能なDockerインストールパッケージは最新バージョンではない可能性があります。最新バージョンを確実に取得するために、公式DockerリポジトリからDockerをインストールします。そのためには、新しいパッケージソースを追加し、DockerからGPGキーを追加してダウンロードが有効であることを確認してから、パッケージをインストールします。

      まず、既存のパッケージのリストを更新します。

      次に、 aptがHTTPS経由でパッケージを使用できるようにするいくつかの必要条件パッケージをインストールします。

      • sudo apt install apt-transport-https ca-certificates curl software-properties-common

      次に、公式DockerリポジトリのGPGキーをシステムに追加します。

      • curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

      DockerリポジトリをAPTソースに追加します。

      • sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

      次に、追加されたリポジトリからDockerパッケージでパッケージデータベースを更新します。

      デフォルトのUbuntuリポジトリではなく、Dockerリポジトリからインストールしようとしていることを確認してください。

      • apt-cache policy docker-ce

      次のような出力が表示されますが、Dockerのバージョン番号は異なる場合があります。

      Output of apt-cache policy docker-ce

      docker-ce:
        Installed: (none)
        Candidate: 5:19.03.9~3-0~ubuntu-focal
        Version table:
           5:19.03.9~3-0~ubuntu-focal 500
              500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
      

      docker-ceはインストールされていませんが、インストールの候補はUbuntu 20.04(focal)のDockerリポジトリからのものです。

      最後に、Dockerをインストールします。

      • sudo apt install docker-ce

      これでDockerはインストールされ、デーモンが起動し、プロセスがプート時に起動できるようになりました。実行されていることを確認します。

      • sudo systemctl status docker

      出力は次のようになり、サービスがアクティブで実行中であることが示されます。

      Output

      ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-05-19 17:00:41 UTC; 17s ago TriggeredBy: ● docker.socket Docs: https://docs.docker.com Main PID: 24321 (dockerd) Tasks: 8 Memory: 46.4M CGroup: /system.slice/docker.service └─24321 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

      Dockerをインストールすると、Dockerサービス(デーモン)だけでなく、dockerコマンドラインユーティリティ、またはDockerクライアントも提供されます。このチュートリアルの後半で、dockerコマンドの使用方法を見ていきます。

      ステップ2— SudoなしでDockerコマンドを実行する(オプション)

      デフォルトでは、dockerコマンドは root *ユーザーまたはDockerのインストールプロセス中に自動的に作成される *docker グループのユーザーのみが実行できます。 sudoを前に付けずに、またはdockerグループに属さずにdockerコマンドを実行しようとすると、次のような出力が表示されます。

      Output

      docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help'.

      dockerコマンドを実行するたびに sudoを入力しないようにするには、ユーザー名をdockerグループに追加します。

      • sudo usermod -aG docker ${USER}

      新しいグループメンバーシップを適用するには、サーバーからログアウトして再度ログインするか、次のように入力します。

      続行するには、ユーザーのパスワードを入力するよう求められます。

      次のように入力して、ユーザーがdockerグループに追加されたことを確認します。

      Output

      sammy sudo docker

      ログインしていないdockerグループにユーザーを追加する必要がある場合は、次を使用して明示的にそのユーザー名を宣言します。

      • sudo usermod -aG docker username

      この記事の残りの部分では、dockerグループユーザーとしてdockerコマンドを実行していることを前提としています。選択しない場合は、コマンドの先頭にsudoを付けてください。

      次にdockerコマンドを見ていきましょう。

      ステップ3— Dockerコマンドの使用

      dockerを使用するには、一連のオプションとコマンドの後に引数を続けて渡します。構文は次の形式を取ります。

      • docker [option] [command] [arguments]

      使用可能なすべてのサブコマンドを表示するには、次を入力します。

      Docker 19現在、使用可能なサブコマンドの完全なリストには次のものが含まれます。

      Output

      attach Attach local standard input, output, and error streams to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes to files or directories on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes

      特定のコマンドで使用可能なオプションを表示するには、次を入力します。

      • docker docker-subcommand --help

      Dockerに関するシステム全体の情報を見るには、次を入力します。

      コマンドをいくつか見ていきましょう。まずイメージの操作から始めます。

      ステップ4— Docker イメージの操作

      DockerコンテナはDockerイメージから構築されいます。デフォルトでは、Dockerはこれらのイメージを、Dockerプロジェクトの背後にある会社、すなわちDockerが管理するDockerレジストリであるDocker Hubから取得します。誰でもDocker イメージ をDocker Hubでホストできるため、必要なほとんどのアプリケーションやLinuxディストリビューションでは、イメージをホストできます。

      Docker Hubからイメージにアクセスしダウンロードできるかどうかを確認するには、次を入力します。

      出力は、Dockerが正常に機能していることを示します。

      Output

      Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 0e03bdcc26d7: Pull complete Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ...

      当初、Dockerはローカルで hello-worldイメージを見つけることができなかったため、デフォルトのリポジトリであるDocker Hubからイメージをダウンロードしました。 イメージがダウンロードされると、Dockerはイメージからコンテナを作成し、コンテナ内のアプリケーションを実行してメッセージを表示しました。

      Docker Hubで利用可能なイメージを検索するには、docker コマンドとsearch サブコマンドを使用します。たとえば、Ubuntu イメージを検索するには、次のように入力します。

      スクリプトはDocker Hubをクロールし、名前が検索文字列と一致するすべてのイメージのリストを返します。この場合、出力は以下のようになります。

      Output

      NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating sys… 10908 [OK] dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 428 [OK] rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 244 [OK] consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 218 [OK] ubuntu-upstart Upstart is an event-based replacement for th… 108 [OK] ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ...

      OFFICIAL列のOKは、プロジェクトの背後にある会社によって構築およびサポートされているイメージを示します。使用するイメージを特定したら、pullサブコマンドを使用してコンピュータにダウンロードできます。

      次のコマンドを実行して公式のubuntu イメージをコンピュータにダウンロードします。

      次の出力が表示されます。

      Output

      Using default tag: latest latest: Pulling from library/ubuntu d51af753c3d3: Pull complete fc878cd0a91c: Pull complete 6154df8ff988: Pull complete fee5db0ff82f: Pull complete Digest: sha256:747d2dbbaaee995098c9792d99bd333c6783ce56150d1b11e333bbceed5c54d7 Status: Downloaded newer image for ubuntu:latest docker.io/library/ubuntu:latest

      イメージがダウンロードされると、runサブコマンドでダウンロードしたイメージを使用してコンテナを実行できます。hello-worldの例で見たように、dockerrunサブコマンドで実行されたときにイメージがダウンロードされていない場合、Dockerクライアントは最初にイメージをダウンロードし、それを使用してコンテナを実行します。

      コンピュータにダウンロードされたイメージを表示するには、次を入力します。

      出力は次のようになります。

      Output

      REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 1d622ef86b13 3 weeks ago 73.9MB hello-world latest bf756fb1ae65 4 months ago 13.3kB

      このチュートリアルの後半で説明するように、コンテナを実行するために使用するイメージを変更し、新しいイメージを生成するために使用できます。その後、Docker Hubまたはその他のDockerレジストリにアップロードできます(技術用語ではpushedといいます)。

      コンテナを実行する方法を詳しく見てみましょう。

      ステップ5— Dockerコンテナの実行

      前のステップで実行したhello-worldコンテナは、テストメッセージを発信した後実行および終了するコンテナの例です。コンテナはそれよりもはるかに便利であり、インタラクティブにすることができます。 結局のところ、それらはVM(仮想マシン)に似ており、リソースにやさしいだけです。

      例として、Ubuntuの最新のイメージを使用してコンテナを実行してみましょう。-i スイッチと -t スイッチの組み合わせにより、コンテナへのインタラクティブなシェルアクセスが可能になります。

      コマンドプロンプトは、コンテナ内で現在作業している事実を反映するように変更され、次の形式を取ります。

      Output

      root@d9b100f2f636:/#

      コマンドプロンプトのコンテナ IDを書き留めてください。この例では 、d9b100f2f636 です。コンテナを削除するときに、コンテナを識別するために、後でそのコンテナIDが必要になります。

      これで、コンテナ内で任意のコマンドを実行できます。例として、コンテナ内のパッケージデータベースを更新しましょう。コンテナ内で root ユーザーとして操作しているため、コマンドの前に sudo を付ける必要はありません。

      次に、アプリケーションをインストールします。Node.jsをインストールしましょう。

      これにより、公式のUbuntuリポジトリからNode.jsがコンテナにインストールされます。インストールが完了したら、Node.jsがインストールされていることを確認します。

      ターミナルにバージョン番号が表示されます。

      Output

      v10.19.0

      コンテナ内で行った変更は、そのコンテナにのみ適用されます。

      コンテナを終了するには、プロンプトでexit と入力します。

      次に、システム上のコンテナの管理を見てみましょう。

      ステップ6— Dockerコンテナの管理

      Dockerをしばらく使用すると、コンピュータ上に多くのアクティブ(実行中)および非アクティブのコンテナができます。アクティブなコンテナを表示するには、次を使用します。

      次のような出力が表示されます。

      Output

      CONTAINER ID IMAGE COMMAND CREATED

      このチュートリアルでは、2つのコンテナを開始しました。 1つは hello-world イメージから、もう1つは ubuntu イメージからです。これらのコンテナはもう実行されていませんが、システムにはまだ存在しています。

      すべてのコンテナ(アクティブおよび非アクティブ)を表示するには、-a スイッチを付けてdocker ps を実行します。

      次のような出力が表示されます。

      1c08a7a0d0e4        ubuntu              "/bin/bash"         2 minutes ago       Exited (0) 8 seconds ago                       quizzical_mcnulty
      a707221a5f6c        hello-world         "/hello"            6 minutes ago       Exited (0) 6 minutes ago                       youthful_curie
      
      

      作成した最新のコンテナを表示するには、-l スイッチを渡します。

      • CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
      • 1c08a7a0d0e4 ubuntu "/bin/bash" 2 minutes ago Exited (0) 40 seconds ago quizzical_mcnulty

      停止したコンテナを開始するには、 docker start を使用し、その後にコンテナIDまたはコンテナの名前を続けます。IDが 1c08a7a0d0e4 のUbuntuベースのコンテナを起動しましょう。

      • docker start 1c08a7a0d0e4

      コンテナが起動し、 docker psを使用してそのステータスを確認できます。

      Output

      CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1c08a7a0d0e4 ubuntu "/bin/bash" 3 minutes ago Up 5 seconds quizzical_mcnulty

      実行中のコンテナを停止するには、 docker stop に続けてコンテナIDまたは名前を使用します。 今回は、Dockerがコンテナに割り当てた名前、quizzical_mcnultyを使用します。

      • docker stop quizzical_mcnulty

      コンテナが不要になったら、 docker rm コマンドでコンテナIDまたは名前を使用して削除します。 hello-world イメージに関連付けられたコンテナのコンテナIDまたは名前を見つけて削除するには、 docker ps -a コマンドを使用します。

      新しいコンテナを開始して、--nameスイッチでコンテナに名前を付けられます。また、 -rm スイッチで、停止時に自己消去するコンテナを作成することもできます。 これらのオプションおよびその他の詳細については、 docker run helpコマンドを参照してください。

      コンテナは、新しいコンテナの構築に使えるイメージに変換できます。それがどのように機能するか見てみましょう。

      ステップ7— コンテナ内の変更をDocker イメージへ適用する

      Dockerイメージを起動すると、VM(仮想マシン)でできるようにファイルを作成、変更、削除できます。加えた変更は、そのコンテナにのみ適用されます。起動と停止はできますが、 docker rm コマンドで破棄すると、変更は永久に失われます。

      このセクションでは、コンテナの状態を新しいDockerイメージとして保存する方法を示します。

      Node.jsをUbuntuコンテナ内にインストールすると、イメージからコンテナが実行されますが、コンテナは作成に使用したイメージとは異なります。 ただし、このNode.jsコンテナを後で新しいイメージの基盤として再利用したい場合があります。

      これを行うには、次のコマンド構造を使用して、新しいDockerイメージインスタンスへの変更をコミットします。

      • docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

      -m スイッチは、作成者を指定するために -a が使用されている間に、あなたや他のユーザーがあなたが行った変更を知るのに役立つコミットメッセージ用です。 container_idは、チュートリアルの前半でインタラクティブDockerセッションを開始したときに書き留めたものです。Docker Hubで追加のリポジトリを作成しない限り、リポジトリは通常Docker Hubユーザー名です。

      たとえば、コンテナIDが d9b100f2f636,のユーザー sammy の場合、コマンドは次のようになります。

      • docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs

      イメージをコミットすると、新しいイメージはコンピュータのローカルに保存されます。このチュートリアルの後半で、他のユーザーがアクセスできるように、Docker HubのようなDockerレジストリにイメージをプッシュする方法を学びます。

      Dockerイメージを一覧表示すると、新しいイメージと、その派生元の古いイメージが表示されます。

      出力は次のようになります。

      Output

      REPOSITORY TAG IMAGE ID CREATED SIZE sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB ...

      この例では、 ubuntu-nodejsは、Docker Hubから既存の ubuntuイメージから派生した新しいイメージです。サイズの違いは、行われた変更を反映しています。この例では、変更はNodeJSがインストールされたことです。今後Node.jsが事前にインストールされたUbuntuを使用してコンテナを実行する必要がある場合、新しいイメージを使用できます。

      Dockerfileからイメージを構築することもできます。これにより、新しいイメージでのソフトウェアのインストールを自動化できます。 ただし、これはこのチュートリアルの範囲外です。

      次に、新しいイメージを他のユーザーと共有して、そこからコンテナを作成できるようにします。

      ステップ8— DockerイメージをDockerリポジトリにプッシュする

      既存のイメージから新しいイメージを作成した後の次の論理的なステップは、限定した友人、Docker Hubの全世界、またはアクセス可能な他のDockerレジストリと共有することです。 イメージ をDocker Hubまたはその他のDockerレジストリにプッシュするには、そこにアカウントが必要です。

      このセクションでは、DockerイメージをDocker Hubにプッシュする方法を示します。独自のプライベートDockerレジストリを作成する方法については、Ubuntu 14.04でプライベートDockerレジストリを設定する方法 をご覧ください。

      イメージをプッシュするには、まずDocker Hubにログインします。

      • docker login -u docker-registry-username

      Docker Hubのパスワードを使用して認証するように求められます。正しいパスワードを指定した場合、認証は成功するはずです。

      注: Docker レジストリ名がイメージを作成した際のローカルユーザー名と異なる場合、イメージにレジストリ名をタグ付けする必要があります。前回のステップの例では、次のようになります。

      • docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs

      次に、以下を使用して独自のイメージをプッシュできます。

      • docker push docker-registry-username/docker-image-name

      ubuntu-nodejs イメージを sammy リポジトリにプッシュするには、コマンドは次のようになります。

      • docker push sammy/ubuntu-nodejs

      このプロセスは イメージ をアップロードするため、完了するのに時間がかかる場合がありますが、完了すると、出力は次のようになります。

      Output

      The push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Pushed 5f70bf18a086: Pushed a3b5c80a4eba: Pushed 7f18b442972b: Pushed 3ce512daaf78: Pushed 7aae4540b42d: Pushed ...

      イメージをレジストリにプッシュすると、下のイメージに示すように、アカウントのダッシュボードに表示されるはずです。

      New Docker image listing on Docker Hub

      プッシュを試みても次のエラーが発生する場合は、ログインしていない可能性があります。

      Output

      The push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Preparing 5f70bf18a086: Preparing a3b5c80a4eba: Preparing 7f18b442972b: Preparing 3ce512daaf78: Preparing 7aae4540b42d: Waiting unauthorized: authentication required

      docker login でログインしてから、プッシュ試行を繰り返します。次に、Docker Hub リポジトリページに存在するかどうかを確認します。

      これでdocker pull sammy/ubuntu-nodejsを使用して新しいマシンにイメージを取り込んで新しいコンテナを実行できます。

      まとめ

      このチュートリアルでは、Dockerをインストールし、イメージやコンテナを操作し、変更したイメージをDocker Hubにプッシュしました。基本を理解したら、DigitalOcean Communityの他のDockerチュートリアル をご覧ください。



      Source link