Dockerは、コンテナー内のアプリケーションプロセスを管理するプロセスを簡素化するアプリケーションです。コンテナを使用すると、リソースが分離されたプロセスでアプリケーションを実行できます。これらは仮想マシンに似ていますが、コンテナーは移植が容易で、使用するリソースが少なく、ホストシステムのリソースへの依存度が高くなります。
この記事では、Docker Community Edition(CE)がUbuntu20.04にインストールされて使用されます。コンテナとイメージを同時に使用し、最後にイメージをDockerリポジトリにプッシュします。
この記事では、sudoグループ権限を持つユーザーアカウントを持っているが、rootは持っていないことを前提としています。
そうでない場合は、ルートの下に作成します
adduser sammy
usermod -aG sudo sammy
これにより、sudo権限を持つユーザーが作成されます
1:Dockerをインストールします
まず、すべてのインストールパッケージを更新します。
sudo apt update
次に、HTTPS経由でパッケージを使用するためのいくつかの前提条件パッケージをインストールします
。sudoaptinstall 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 focusstable"
新しく追加されたウェアハウスのDockerパッケージでパッケージデータベースを更新します:
sudo apt update
デフォルトのUbuntuリポジトリではなくDockerリポジトリからインストールすることを確認してください:
apt-cache policy docker-ce
最後に、dockerが実際にインストールされます
sudo apt install docker-ce
これでdockerがインストールされ、デーモンが開始され、次にシステムが有効になったときにプロセスが開始されます。実行されているかどうかを確認します。
sudo systemctl status docker
見られます:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-02-20 18:05:52 UTC; 5min ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 11985 (dockerd)
Tasks: 8
Memory: 39.4M
CGroup: /system.slice/docker.service
└─11985 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
...
2:sudoを使用せずにDockerコマンドを実行する
デフォルトでは、dockerコマンドはrootユーザーまたはdockerグループのユーザーとしてのみ実行でき、dockerグループはDockerのインストールプロセス中に自動的に作成されます。sudoプレフィックスを使用しないようにするには、docckerグループに参加する必要があります。
sudo usermod -aG docker $ {USER}
を有効にするには、このグループ情報にログアウトしてからログインする必要があります。またはこれも問題ありません。ログアウトしてからログインしました。以下の方法は試していません。
su- $ {USER}
現在のグループを確認するコマンドは
次のとおりです。id-nG
次の情報が表示されます
sammy sudo docker
dockerグループに誰かを追加する場合は、次のコマンドを使用します。ここで、usernameは他の誰かのユーザー名です
。sudousermod-aG docker username
この記事の後半で使用されるdockerコマンドは、dockerグループに属していることを前提としています。そうでない場合はsudoです。
3:Dockerコマンドを使用する
dockerを使用するには、一連のオプションとコマンドを渡し、その後にパラメーターを渡す必要があります。文法は次の形式を取ります。
docker [オプション] [コマンド] [引数]
使用可能なすべてのサブコマンドを表示するには、次のように入力します:
docker
特定のコマンドで使用できるオプションを確認するには、次のように入力します
。dockerdocker-subcommand --help
Dockerシステム情報を表示するための次のコマンド:
docker info
4:Dockerイメージ
Dockerコンテナーは、Dockerイメージから構築されます。デフォルトでは、Dockerは、Dockerプロジェクトの背後にある会社であるDockerによって管理されるDockerレジストリであるDockerHubからこれらのイメージをプルします。誰でもDockerHubでDockerイメージをホストできるため、必要なアプリケーションとLinuxディストリビューションのほとんどがイメージをホストします。
簡単なhello-worldをテストしてみましょう。
docker run hello-world
次のような情報が表示されます。
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イメージをローカルで見つけることができなかったため、デフォルトのリポジトリであるDockerHubからイメージをダウンロードしました。イメージをダウンロードした後、Dockerはイメージに基づいてコンテナーを作成し、コンテナー内でアプリケーションを実行して、メッセージを表示します。
dockerコマンドとsearchサブコマンドを使用して、DockerHubで利用可能なイメージを検索できます。たとえば、Ubuntuイメージを検索するには、次のように入力します。
docker search ubuntu
[公式]列の[OK]は、プロジェクトの背後にある会社によって作成およびサポートされているイメージを表します。使用するイメージを決定したら、pullサブコマンドを使用してイメージをコンピューターにダウンロードできます。
次のコマンドを実行して、公式のubuntuイメージをローカルにダウンロードします。
docker pull ubuntu
イメージをダウンロードした後、ダウンロードしたイメージをrunサブコマンドで使用して、コンテナーを実行できます。hello-worldの例に見られるように、runサブコマンドを使用してdockerを実行するときにイメージがダウンロードされない場合、Dockerクライアントは最初にイメージをダウンロードし、次にイメージを使用してコンテナーを実行します。
コンピューターにダウンロードされたイメージを表示するには、次のように入力します。
Docker画像
表示情報は以下のとおりです。
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest f63181f19b2f 4 weeks ago 72.9MB
hello-world latest bf756fb1ae65 13 months ago 13.3kB
5: Docker 容器
前の手順で実行されているhello-worldコンテナーは、テストメッセージの発行後に実行および終了するコンテナーの例です。コンテナはこれよりもはるかに便利で、インタラクティブにすることができます。結局のところ、これらは仮想マシンに似ていますが、よりリソースに優しいものです。
たとえば、Ubuntuの最新のイメージを使用してコンテナーを実行してみましょう。-iスイッチと-tスイッチの組み合わせにより、シェルにインタラクティブにアクセスできます。
docker run -it ubuntu
次に、次の表示があり、コンテナのubuntuを入力します
leon@ubuntu-s-1vcpu-1gb-tor1-01:~$ docker run -it ubuntu
root@bd612e776819:/#
最初にパッケージリストを更新します。
root@bd612e776819:/# apt update
Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [109 kB]
たとえば、nodejsをインストールします
root@bd612e776819:/# apt install nodejs
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
次に、ノードのバージョンを確認します。
root@bd612e776819:/# node -v
v10.19.0
すべての操作はこのコンテナ専用です。
終了するには、次のように入力します。
出口
root@bd612e776819:/# exit
exit
leon@ubuntu-s-1vcpu-1gb-tor1-01:~$
6:Dockerコンテナを管理する
Dockerをしばらく使用すると、コンピューター上にアクティブな(実行中の)コンテナーと非アクティブなコンテナーが多数存在します。アクティビティを表示するには、次を使用します。
docker ps
ここではアクティビティがないため、次のように表示されます。
leon@ubuntu-s-1vcpu-1gb-tor1-01:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
すべてのコンテナーを表示するには、次のようにします
。dockerps -a
表示は次のようになります。
leon@ubuntu-s-1vcpu-1gb-tor1-01:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd612e776819 ubuntu "/bin/bash" 53 minutes ago Exited (0) 22 minutes ago gallant_visvesvaraya
bdbf06b1c3bc hello-world "/hello" About an hour ago Exited (0) About an hour ago nifty_benz
最近作成されたコンテナを表示するには、-l
docker ps-lを使用します
停止したコンテナーを開始するには、docker startを使用してから、コンテナーIDまたはコンテナーの名前を使用します。IDbdbf06b1c3bcでUbuntuベースのコンテナを起動しましょう:docker
start bdbf06b1c3bc
このIDは異なります。これは、docker ps -aビューで確認できます。以下は起動後のものであり、dockerpsを使用して表示します。
docker start bd612e776819
bd612e776819
leon@ubuntu-s-1vcpu-1gb-tor1-01:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd612e776819 ubuntu "/bin/bash" About an hour ago Up 7 seconds gallant_visvesvaraya
実行中のコンテナーを停止するには、dockerstopの後にコンテナーIDまたは名前を使用します。今回は、Dockerによって割り当てられたコンテナ名gallant_visvesvarayaを使用します。
docker stop gallant_visvesvaraya
コンテナーが不要になったことを確認したら、docker rmコマンドを使用して、コンテナーIDまたは名前を使用してコンテナーを再度削除します。docker ps -aコマンドを使用して、hello-worldイメージに関連付けられているコンテナーIDまたはコンテナーの名前を見つけて削除します。
docker rm nifty_benz
以下は、最初にps -aでチェックし、rmの後でチェックするプロセスです。nifty_benzはpsが見る名前で、それぞれが異なります。
leon@ubuntu-s-1vcpu-1gb-tor1-01:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd612e776819 ubuntu "/bin/bash" 6 hours ago Exited (0) About a minute ago gallant_visvesvaraya
bdbf06b1c3bc hello-world "/hello" 6 hours ago Exited (0) 5 hours ago nifty_benz
leon@ubuntu-s-1vcpu-1gb-tor1-01:~$ docker rm nifty_benz
nifty_benz
leon@ubuntu-s-1vcpu-1gb-tor1-01:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd612e776819 ubuntu "/bin/bash" 6 hours ago Exited (0) 2 minutes ago gallant_visvesvaraya
leon@ubuntu-s-1vcpu-1gb-tor1-01:~$
新しいコンテナを開始し、-nameスイッチを使用して名前を付けることができます。--rmスイッチを使用してコンテナを作成することもできます。コンテナは停止すると削除されます。これらおよびその他のオプションの詳細については、docker runhelpコマンドを参照してください。
コンテナはイメージに変換でき、新しいコンテナを構築するために使用できます。それがどのように機能するか見てみましょう。
7:コンテナへの変更をコミットします
Dockerイメージを起動すると、仮想マシンを使用するのと同じように、ファイルを作成、変更、および削除できます。加えられた変更は、そのコンテナにのみ適用されます。開始および停止できますが、docker rmコマンドで破棄すると、変更は永久に失われます。
このセクションでは、コンテナの状態を新しいDockerイメージとして保存する方法について説明します。
Node.jsをUbuntuコンテナーにインストールすると、イメージを実行するためのコンテナーが作成されますが、コンテナーは作成に使用されたイメージとは異なります。ただし、将来的には、このNode.jsコンテナーを新しいイメージのベースとして再利用することをお勧めします。
次に、次のコマンドを使用して、新しいDockerイメージインスタンスへの変更をコミットします。
docker commit -m "イメージに対して行ったこと" -a "作成者名" container_id repository / new_image_name
-mスイッチはメッセージを送信するために使用され、あなたや他の人があなたが行った変更を知るのに役立ちます。-aは作成者を指定するために使用されます。container_idは、このチュートリアルの前半でインタラクティブなDockerセッションを開始したときにメモしたものです。Docker Hubで別のリポジトリが作成されない限り、リポジトリは通常DockerHubのユーザー名です。
たとえば、sammyユーザーで、コンテナーIDがd9b100f2f636の場合、コマンドは次のようになります。
docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy / ubuntu-nodejs
画像が送信されると、新しい画像がローカルコンピュータに保存されます。このチュートリアルの後半では、他のユーザーがアクセスできるように、DockerHubなどのDockerリポジトリにイメージをプッシュする方法を学習します。
Dockerイメージを再度リストすると、古いイメージだけでなく、新しいイメージも表示されます。
Docker画像
操作プロセスは次のとおりです。
leon@ubuntu-s-1vcpu-1gb-tor1-01:~$ docker commit -m "added Node.js" -a "leon" bd612e776819 leon/ubuntu-nodejs
sha256:e5120a19cee69adfa4ea83f9e97934aa0ba33624ce4230b92a999c4cb4d2f75d
leon@ubuntu-s-1vcpu-1gb-tor1-01:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
leon/ubuntu-nodejs latest e5120a19cee6 About a minute ago 167MB
ubuntu latest f63181f19b2f 4 weeks ago 72.9MB
hello-world latest bf756fb1ae65 13 months ago 13.3kB
leon@ubuntu-s-1vcpu-1gb-tor1-01:~$
8:DockerイメージをDockerリポジトリにプッシュする
既存のイメージから新しいイメージを作成したら、次のステップは、そのイメージを友人、Docker Hub上の全世界、またはアクセス可能な他のDockerライブラリと共有することです。イメージをDockerHubまたはその他のDockerレジストリにプッシュするには、そのイメージにアカウントが必要です。
最初のステップは、アカウントにログインすることです。
docker login -u docker-registry-username
ユーザー名とログインアカウントに一貫性がない場合:
docker tag sammy / ubuntu-nodejs docker-registry-username / ubuntu-nodejs
次にプッシュします。
docker push docker-registry-username / docker-image-name
ユーザー名がsammyで、イメージがubuntu-nodejsの場合は、次のコマンドを使用します。
docker push sammy / ubuntu-nodejs
9:CcontainerとImagesのいくつかのコマンド
すべてのコンテナIDを一覧表示します
docker ps -aq
すべてのコンテナを停止します
docker stop $(docker ps -aq)
すべてのコンテナを削除します
docker rm $(docker ps -aq)
すべてのミラーを削除します
dockerrmi $(docker images -q)
この記事は、Ubuntu20.04にDockerをインストールして使用する方法を学習することで完了し ます 。
紹介は以上です。