Dockerは、仮想マシンと同じように、コンテナー内でアプリケーションプロセスを簡単に実行できるようにするアプリケーションですが、より移植性が高く、リソースに優しく、ホストオペレーティングシステムへの依存度が高くなります。
Ubuntu16.04にDockerをインストールするには2つの方法があります。 1つの方法は、オペレーティングシステムの既存のインストールにインストールすることです。もう1つは、Dockerを自動的にインストールするツールを使用してサーバーを起動することです。
このチュートリアルでは、既存のUbuntu16.04インストールにインストールして使用する方法を学習します。
このチュートリアルに従うには、次の条件が必要です。
注: Dockerには、64ビットバージョンと、カーネルバージョンが3.10以上のUbuntuが必要です。デフォルトの64ビットUbuntu16.04サーバーは、これらの要件を満たしています。
このチュートリアルのすべてのコマンドは、root以外のユーザーとして実行する必要があります。コマンドでルートアクセスが必要な場合は、先頭に「sudo」が表示されます。 [Ubuntu 16.04初期インストールチュートリアル](https://cloud.tencent.com/developer/article/1007167?from=10680)では、ユーザーを追加してsudoアクセスを提供する方法について説明しています。
公式のUbuntu16.04リポジトリで提供されているDockerインストールパッケージは、最新バージョンではない可能性があります。最新かつ最高のバージョンを入手するには、公式のDockerリポジトリからDockerをインストールしてください。このセクションでは、これを行う方法を説明します。
まず、公式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 $(lsb_release -cs) stable"
次に、新しく追加されたリポジトリのDockerパッケージでパッケージデータベースを更新します。
sudo apt-get update
デフォルトのUbuntu16.04リポジトリではなく、Dockerリポジトリからインストールすることを確認してください。
apt-cache policy docker-ce
次のような出力が表示されます。
docker-ce:
Installed:(none)
Candidate:17.03.1~ce-0~ubuntu-xenial
Version table:17.03.1~ce-0~ubuntu-xenial 500500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
17.03.0~ ce-0~ubuntu-xenial 500500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce
はインストールされていませんが、インストールの候補はUbuntu16.04のDockerリポジトリからのものであることに注意してください。 docker-ce
のバージョン番号は異なる場合があります。
最後に、Dockerをインストールします。
sudo apt-get install -y 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 Sun 2016-05-0106:53:52 CDT;1 weeks 3 days ago
Docs: https://docs.docker.com
Main PID:749(docker)
今すぐDockerをインストールすると、Dockerサービス(デーモン)が提供されるだけでなく、 docker
コマンドラインユーティリティまたはDockerクライアントも提供されます。このチュートリアルの後半で、 docker
コマンドの使用方法について説明します。
デフォルトでは、 docker
コマンドを実行するにはroot権限が必要です。つまり、コマンドの前に sudo
を追加する必要があります。また、Dockerのインストール中に自動的に作成される** docker **グループのユーザーが実行することもできます。 「sudo」を使用せずに、またはdockerグループのプレフィックスとして使用せずに「docker」コマンドを実行しようとすると、次の出力が得られます。
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}
新しいグループメンバーシップを適用するには、サーバーからログアウトして再度ログインするか、次のように入力します。
su - ${USER}
続行するには、ユーザーパスワードの入力を求められます。その後、次のように入力して、ユーザーが docker
グループに追加されたことを確認できます。
id -nG
出力は次のようになります。
sammy sudo docker
ログインしていない docker
グループにユーザーを追加する必要がある場合は、次の方法を使用してユーザー名を明確に宣言してください。
sudo usermod -aG docker username
この記事の残りの部分では、dockerユーザーグループのユーザーとして docker
コマンドを実行していることを前提としています。これを選択しない場合は、コマンド sudo
を前に追加してください。
Dockerがインストールされて機能しているので、コマンドラインユーティリティに慣れましょう。 docker
を使用して、一連のオプションとコマンドを渡し、その後にパラメーターを渡します。構文は次の形式を取ります。
docker [option][command][arguments]
使用可能なすべてのサブコマンドを表示するには、次のように入力します。
docker
Docker 1.11.1以降、使用可能なサブコマンドの完全なリストは次のとおりです。
attach Attach to a running container
build Build an image from a Dockerfile
commit Create a newimagefrom a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a newcontainer
diff Inspect changes 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 a container or image
kill Kill a running container
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
network Manage Docker networks
pause Pause all processes within a container
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 a container
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a newcontainer
save Save one or more images to a tar archive
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream ofcontainer(s) resource usage statistics
stop Stop a running container
tag Tag an image into a repository
top Display the running processes of a container
unpause Unpause all processes within a container
update Update configuration of one or more containers
version Show the Docker version information
volume Manage Docker volumes
wait Block until a container stops, then print its exit code
特定のコマンドで使用可能なスイッチを表示するには、次のように入力します。
docker docker-subcommand --help
Dockerに関するシステム全体の情報を表示するには、次を使用します。
docker info
DockerコンテナはDockerイメージから実行されます。デフォルトでは、これらのイメージは、Dockerプロジェクトの背後にある会社であるDockerによって管理されるDockerレジストリであるDockerHubからフェッチされます。誰でもDockerHubでDockerイメージを構築してホストできるため、Dockerコンテナーの実行に必要なほとんどのアプリケーションとLinuxディストリビューションでは、DockerHubでイメージがホストされています。
Docker Hubから画像にアクセスしてダウンロードできるかどうかを確認するには、次のように入力します。
docker run hello-world
出力には次のものが含まれ、Dockerが正しく機能していることを示している必要があります。
Hello from Docker.
This message shows that your installation appears to be working correctly....
search
コマンドを docker
コマンドと一緒に使用して、DockerHubで利用可能な画像を検索できます。たとえば、Ubuntuイメージを検索するには、次のように入力します。
docker search ubuntu
スクリプトはDockerHubをクロールし、名前が検索文字列と一致するすべてのイメージのリストを返します。この場合、出力は次のようになります。
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating s...3808[OK]
ubuntu-upstart Upstart is an event-based replacement for...61[OK]
torusware/speedus-ubuntu Always updated official Ubuntu docker imag...25[OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top ofof...24[OK]
ubuntu-debootstrap debootstrap --variant=minbase --components...23[OK]
nickistre/ubuntu-lamp LAMP server on Ubuntu 6[OK]
nickistre/ubuntu-lamp-wordpress LAMP on Ubuntu with wp-cli installed 5[OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images...4[OK]
nimmis/ubuntu This is a docker images different LTS vers...4[OK]
maxexcloo/ubuntu Docker base image built on Ubuntu with Sup...2[OK]
admiringworm/ubuntu Base ubuntu images based on the official u...1[OK]
...
** OFFICIAL 列の OK **は、プロジェクトの背後にある会社によって作成およびサポートされているイメージを表します。使用する画像を決定したら、次に示すように、 pull
サブコマンドを使用して画像をコンピューターにダウンロードできます。
docker pull ubuntu
イメージをダウンロードした後、 run
サブコマンドでダウンロードしたイメージを使用してコンテナを実行できます。 run
サブコマンドで docker
を実行したときにイメージがダウンロードされない場合、Dockerクライアントは最初にイメージをダウンロードし、次にそれを使用してコンテナーを実行します。
docker run ubuntu
コンピューターにダウンロードされた画像を表示するには、次のように入力します。
docker images
出力は次のようになります。
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest c5f1cf30c96b 7 days ago 120.8 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B
このチュートリアルの後半で説明するように、コンテナの実行に使用されるイメージを変更して新しいイメージを生成するために使用できます。このイメージは、Docker Hubまたは他のDockerレジストリにアップロードできます(* push *は技術用語です)。
hello-world
コンテナを実行して実行および終了する前に、テストメッセージが表示された後のコンテナの例。ただし、コンテナはこれよりも便利で、インタラクティブにすることができます。結局のところ、これらは仮想マシンに似ていますが、よりリソースに優しいものです。
例として、Ubuntuの最新のイメージを使用してコンテナを実行してみましょう。 **-i スイッチと-t **スイッチの組み合わせにより、コンテナへのインタラクティブなシェルアクセスが可能になります。
docker run -it ubuntu
コマンドプロンプトは、コンテナで作業しているという事実を反映するように変更され、次の形式になります。
root@d9b100f2f636:/#
**重要:**コマンドプロンプトのコンテナIDに注意してください。上記の例では、 d9b100f2f636
です。
これで、コンテナ内で任意のコマンドを実行できます。たとえば、コンテナ内のパッケージデータベースを更新してみましょう。 root権限を持つコンテナで操作しているため、コマンドの前に sudo
を付ける必要はありません。
apt-get update
次に、その中にアプリケーションをインストールします。たとえば、NodeJSをインストールしましょう。
apt-get install -y nodejs
Dockerイメージを起動すると、仮想マシンを使用するのと同じように、ファイルを作成、変更、および削除できます。行った変更は、このコンテナにのみ適用されます。開始および停止できますが、 docker rm
コマンドで破棄すると、変更は永久に失われます。
このセクションでは、コンテナの状態を新しいDockerイメージとして保存する方法について説明します。
nodejsをUbuntuコンテナーにインストールすると、イメージを実行するコンテナーが作成されますが、コンテナーは、作成に使用したイメージとは異なります。
コンテナの状態を新しいイメージとして保存するには、最初にコンテナを終了します。
exit
次に、次のコマンドを使用して、新しいDockerイメージインスタンスへの変更をコミットします。 **-m スイッチは送信情報であり、あなたや他の人があなたが行った変更を知るのに役立ちます。-a **は作成者を指定するために使用されます。インタラクティブセッションを開始する場合、コンテナIDは、このチュートリアルで前述したコンテナIDです。 Docker Hubで他のリポジトリを作成していない限り、リポジトリは通常、DockerHubのユーザー名です。
docker commit -m "What did you do to the image"-a "Author Name" container-id repository/new_image_name
例えば:
docker commit -m "added node.js"-a "Sunday Ogwu-Chinuwa" d9b100f2f636 finid/ubuntu-nodejs
**注:**送信*すると、新しい画像はローカル、つまりコンピューターに保存されます。このチュートリアルの後半では、Docker HubなどのDockerレジストリにイメージをプッシュして、自分や他の人がイメージを評価して使用できるようにする方法を学習します。
操作が完了したら、すぐにコンピューターにDockerイメージをリストすると、新しいイメージとそれから派生した古いイメージが表示されます。
docker images
出力は次のようになります。
finid/ubuntu-nodejs latest 62359544c9ba 50 seconds ago 206.6 MB
ubuntu latest c5f1cf30c96b 7 days ago 120.8 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B
上記の例では、** ubuntu-nodejs **は新しいイメージであり、DockerHubの既存のubuntuイメージから派生しています。サイズの違いは、加えられた変更を反映しています。この例では、NodeJSがすでにインストールされているという変更があります。したがって、次にNodeJSがプリインストールされたUbuntuでコンテナを実行する必要があるときは、新しいイメージを使用できます。イメージは、いわゆるDockerfileから作成することもできます。しかし、これは非常に複雑なプロセスであり、この記事の範囲を超えています。
Dockerをしばらく使用すると、コンピューター上にアクティブな(実行中の)コンテナーと非アクティブなコンテナーが多数あります。 アクティブを表示するには、次を使用します。
docker ps
次のような出力が表示されます。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7c79cc556dd ubuntu "/bin/bash"3 hours ago Up 3 hours silly_spence
すべてのコンテナ(アクティブおよび非アクティブ)を表示するには、それを -a
スイッチに渡します。
docker ps -a
作成した最新のコンテナを表示するには、それを -l
スイッチに渡します。
docker ps -l
実行中またはアクティブなコンテナの停止は、次のように入力するだけです。
docker stop container-id
container-id
は、 dockerps
コマンドの出力にあります。
既存のイメージから新しいイメージを作成した後の次の論理的な手順は、いくつかの選択肢、Docker Hubの領域全体、またはアクセス可能な他のDockerレジストリと共有することです。イメージをDockerHubまたはその他のDockerレジストリにプッシュするには、そこにアカウントが必要です。
このセクションでは、DockerイメージをDockerHubにプッシュする方法について説明します。
Docker Hubでアカウントを作成するには、[Docker Hub](https://hub.docker.com/)に登録してください。次に、イメージをプッシュするために、最初にDockerHubにログインします。本人確認を求めるメッセージが表示されます。
docker login -u docker-registry-username
正しいパスワードを指定した場合、認証は成功するはずです。次に、次の方法を使用して独自の画像をプッシュできます
docker push docker-registry-username/docker-image-name
完了するまでに少し時間がかかります。完了すると、出力は次のようになります。
The push refers to a repository [docker.io/finid/ubuntu-nodejs]
e3fbbfb44187: Pushed
5 f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7 f18b442972b: Pushed
3 ce512daaf78: Pushed
7 aae4540b42d: Pushed
...
画像をレジストリにプッシュすると、下の画像に示すように、アカウントのダッシュボードに表示されます。
プッシュを試みた結果、このタイプのエラーが発生した場合は、ログインしていない可能性があります。
The push refers to a repository [docker.io/finid/ubuntu-nodejs]
e3fbbfb44187: Preparing
5 f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7 f18b442972b: Preparing
3 ce512daaf78: Preparing
7 aae4540b42d: Waiting
unauthorized: authentication required
ログインして、プッシュの試行を繰り返します。
Dockerは、この記事に記載されているものをはるかに超えていますが、Ubuntu16.04でDockerを使い始めるには十分です。ほとんどのオープンソースプロジェクトと同様に、Dockerは急速に開発されているコードベースから構築されているため、最新情報についてはプロジェクト[ブログページ](https://blog.docker.com/)にアクセスしてください。
DOコミュニティの[その他のDockerチュートリアル](https://cloud.tencent.com/developer/column/1417/tag-10318?from=10680)も参照してください。
Linuxオープンソース情報チュートリアルの詳細については、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細をご覧ください。
参照:「Ubuntu16.04にDockerをインストールして使用する方法」
Recommended Posts