優れたソフトウェアと実用的なチュートリアル
Dockerの過去と現在
ドッカー コアとなるコンセプトは、「あらゆるアプリをどこでもビルド、出荷、実行」、つまり一度パッケージ化すればどこでも実行できることです。
従来、サーバー上でアプリケーションの動作環境を構成する際には、様々なコンポーネントをインストールする必要がありました。例えば、JavaWeb環境ではTomcatをインストールする必要がありました。MySQL などなど。これらのインストールや設定は簡単ではなく、クロスプラットフォームではありません。これらの環境をWindowsにインストールすると、 リナックス たとえオペレーティングシステムがクロスオペレーティングシステムでなかったとしても、同じオペレーティングシステムを搭載した別のサーバーにアプリケーションを移植するのは非常に面倒です。
Linuxコンテナ技術の登場によりこの問題は解決され、それに基づいてDockerが開発されました。アプリケーションはDockerコンテナ内で実行でき、あらゆるオペレーティングシステムで一貫性を保つことで、クロスプラットフォームおよびクロスサーバーのサポートを実現します。環境を一度設定するだけで、ワンクリックで他のマシンにデプロイできるため、運用が大幅に簡素化されます。
Dockerのインストールと設定
ここでは主にUbuntuとWindowsへのDockerのインストール方法を紹介します。他のOSについては、インストールチュートリアルを検索してください。
中国ではDocker公式サイトのアクセス速度が良くないので、非常に高速なDaoCloudからイメージをダウンロードすることをお勧めします。
ウィンドウズ
まず、Docker のダウンロード ページにアクセスします。
の場合 ウィンドウズ10 Docker for Windowsを直接ダウンロードしてください。Windows 10より前のシステムをお使いの場合は、Docker Toolboxをダウンロードしてください。ダウンロードが完了したら、デフォルトで「次へ」をクリックしてインストールを完了します。
知らせ:WindowsでDockerを実行するには、BIOSでIntel Virtual Technologyを有効にする必要があります。Dockerが起動せずエラーメッセージが表示される場合は、お使いのコンピューターのモデルに応じた関連チュートリアルを検索してください。
ウブントゥ
- 次の 2 つのコマンドを実行すると、Ubuntu インストール ソースを使用して Docker をインストールできます。
$ sudo apt-get update
$ sudo apt-get install docker.io
- ただし、独自のインストールソースでインストールされたDockerは最新バージョンではありません。以下の方法で最新バージョンをインストールすることをお勧めします。
$ curl -sSL https://get.daocloud.io/docker | sh
- インストールが完了したら、docker version コマンドを使用して docker のバージョン情報を表示できます。
知らせ:通常、クライアントとサーバーの情報が表示されます。サーバー情報が表示されない場合は、サービスが開始されていないことを意味します。その場合は、service docker start コマンドを使用してサービスを開始する必要があります。
UbuntuでのDockerのアンインストール
間違ったバージョンをインストールした場合は、アンインストールして再インストールすることができます。
$ sudo apt-get 削除 --purge docker.io
$ rm -rf /var/lib/docker
Docker コアコンセプト
Docker には 3 つのコア概念があります。
- リポジトリ
- 画像
- 容器
Dockerのイメージ管理にウェアハウスを使用する設計はGitと非常に似ています。設定したいアプリケーション実行環境は、例えば次のようなイメージです。 nginx ローカルにイメージがない場合は、リモートリポジトリからプルする必要があります。イメージを起動すると、イメージのコピーがコンテナ内でコピーされ、実行されます。コンテナの内容を変更した場合は、コミットして新しいイメージとして保存することもできます。
最初のDockerインスタンス
ここでは、Nginx を例に、Docker でアプリケーションを起動するプロセスを説明します。
Nginx の起動は 3 つのステップに分かれています。
- nginxイメージをプルする
- nginxコンテナを実行する
- nginxポートのマッピング
画像をプル
まず、Docker 公式リポジトリで nginx を検索し、「official」という単語が含まれているものを見つけてクリックし、pull コマンドをコピーします。
このコマンドを実行すると、イメージがローカルにプルされます。ローカルイメージを表示するには、「docker images」を実行してください。
実際、docker pull nginxコマンドは短縮形です。完全なコマンドは以下のようになります。
$ docker pull registry.hub.docker.com/library/nginx
completeコマンドは、nginxの前に登録サーバーのアドレスを追加します。docker pullのデフォルトアドレスはこれなので、アドレスは省略できます。
なぜこんなことを言うかというと、公式リポジトリからイメージをダウンロードするのは非常に遅く、時にはダウンロードできないこともあるからです。登録サーバーのアドレスを国内のものに変更すれば、速度が上がるはずです。
ミラー加速
中国には多くの画像リポジトリがあります。この記事では、Alibaba Cloudの使い方を紹介します。後ほど、ご自身の画像をAlibaba Cloudにアップロードする方法もご紹介します。このサービスは無料です。
このアドレスにアクセスしてください:
Alibaba Cloudアカウントをお持ちでない場合は、ご自身で登録してください。上記のページで、お客様専用のアクセラレーションアドレスと、システムごとのインストール方法を確認できます。チュートリアルに従ってインストールしてください。
nginxコンテナを実行する
イメージをプルした後、以下のコマンドを実行して起動します。
$ docker run -d nginx
このコマンドはnginxをバックグラウンドで起動します。-dオプションを指定しないと、フォアグラウンドで起動します。起動後、しばらくはnginxにアクセスできません。アクセスするには、コンテナ内のnginxポートをコンテナ外にマッピングする必要があります。
nginxポートのマッピング
$ docker run -d -p 8080:80 nginx
前のコマンドと比較すると、1つだけ追加されます -p
パラメータに続けてポート番号を指定します。ここでは、ローカルマシンのポート8080をコンテナのポート80にマッピングしています。ブラウザでlocalhost:8080にアクセスすると、nginxのウェルカムページが表示されます。
イメージとコンテナの基本操作
ミラー操作
- ローカル画像を表示
$ Dockerイメージ
- 画像にタグを追加する
$ docker タグ 古いタグ 新しいタグ
新しいタグ画像IDは元のタグ画像IDと全く同じです。実際には同じ画像ファイルを指していますが、エイリアスが異なります。
- 画像の削除
$ docker rmi イメージID/イメージタグ
知らせ:イメージを削除するには、まずそのイメージを使用しているコンテナを削除する必要があります。強制削除も可能ですが、推奨されません。また、タグまたはIDでイメージを削除することもできます。IDが同じ場合は、タグで削除してください。
コンテナ操作
- 実行中のコンテナを表示する
$ ドッカー PS
- 実行中のコンテナを停止する
$ docker stop コンテナID
2 つのコンテナを区別できる限り、コンテナ ID を完全に入力する必要はありません。
- すべてのコンテナを表示
$ docker ps -a
- コンテナの削除
$ docker rm コンテナID
コンテナを削除する前に、まずコンテナを停止する必要があります。
- 実行中のコンテナをイメージとして保存する
$ docker コミット コンテナID イメージタグ
特記事項:コンテナを変更した後、新しいイメージとして保存しないと、コンテナを削除した際にすべての変更が保存されません。次の記事では、この問題を解決できるDockerデータ保存の代替方法を紹介します。また、このコマンドの後にタグを指定せずに名前を指定することもできます。デフォルトは「latest」です。
- コンテナに入る
$ docker exec -it コンテナ bash
DockerコンテナはLinuxのようなファイルシステムを持ち、いくつかのLinuxコマンドを使用できます。コンテナを終了するには、次のように入力します。
知らせ:一部のイメージにはbashがありません。例えば、docker pull daocloud.io/library/nginx:1.13.8-alpine-perlを実行すると、エラーが発生します。この場合、shを使用して接続を確立できます。
$ docker exec -it コンテナ /bin/sh
- コンテナにファイルをコピーする
$ docker cp ファイル コンテナID:newfile
- コンテナ内のファイルをコンテナ外にコピーする
$ docker cp コンテナID:ファイル newfile
コンテナからコンテナ外にファイルをコピーするコマンドはコンテナ外で実行される
イメージとコンテナのインポートとエクスポート
画像のインポートとエクスポート
- 画像のエクスポート
$ docker save -o 名前.tar イメージタグ
- 画像のインポート
$ docker load --input name.tar
コンテナの輸入と輸出
- コンテナのエクスポート
$ docker export -o 名前.tar コンテナID
- コンテナをインポートします (docker import name.tar image-tag)
コンテナのインポートでは実際にイメージがインポートされます。
独自のイメージをリモートウェアハウスにプッシュする
まず、Docker がリポジトリとイメージをどのように管理するかを理解しましょう。
ウェアハウスは登録サーバー上に配置されます。1つのウェアハウスは1つのイメージのみを管理し、1つのイメージには複数のバージョンが存在する場合があります。
イメージをDocker Hubにプッシュする
- Docker Hub(登録サーバー)にアクセスします。
- アカウントをお持ちでない場合は、自分で登録し、次のページで「リポジトリの作成」をクリックしてリポジトリを作成します。
- たとえば、私の名前はweb-serverで、倉庫の名前は
stormxing/ウェブサーバー
- 次に、次のコマンドを使用してローカルでDocker Hubにログインします。
- Docker Hubにイメージをアップロードする場合、イメージ名とリポジトリ名を一致させる必要があります。そのためには、イメージに新しいタグを作成します。例えば、nginxイメージにstormxing-webserverという新しいタグを作成します。バージョンを空白のままにすると、デフォルトで最新のバージョンが使用されます。
- 最後にプッシュするだけです。完了すると、リポジトリページのタグオプションに画像が表示されます。
イメージをAlibaba Cloudリポジトリにプッシュする
Docker Hubはイメージのプッシュはできますが、速度が遅すぎます。Alibaba Cloudなど、より高速な国内のものを使う方が良いでしょう。
- まずこのアドレスにログインし、倉庫を作成してからログインパスワードを設定します。
- 倉庫を作成し、ローカル倉庫を選択する
- 最後に、Alibaba Cloud の操作ガイドは非常に詳細で、基本的に上記の手順と同じなので、ここでは詳細には触れません。
要約する
この記事では主にDockerの役割について紹介します。Dockerの3つのコアコンポーネント
また、独自のイメージをリモート リポジトリにプッシュする方法も紹介します。