1.0 はじめに1.1 Docker とは何ですか? Docker はもともと、dotCloud の創設者 Solomon Hykes 氏がフランスにいた頃に始めた社内プロジェクトでした。2013 年 3 月に Apache 2.0 ライセンスの下でオープンソース化され、プロジェクトのメイン コードは GitHub で管理されています。 Docker は、Google がリリースした Go 言語を使用して開発および実装されています。 Docker は Linux コンテナのパッケージであり、シンプルで使いやすいコンテナ インターフェイスを提供します。これは最も人気のある Linux コンテナ ソリューションです。 docker インターフェースは非常にシンプルで、ユーザーは簡単にコンテナを作成および破棄できます。 Docker はアプリケーションとその依存関係を 1 つのファイルにパッケージ化します。このファイルを実行すると、仮想コンテナが生成されます。 プログラムは、実際の物理マシン上で実行されるのと同じように、仮想コンテナ内で実行されます。Docker を使用すると、環境の問題を心配する必要がありません。 1.2アプリケーションシナリオ
1.3相違点 1. 物理マシン 2. 仮想マシン 3. Dockerコンテナ 1.4 Dockerの3つの主要な概念と利点 1. 画像 Dockerは使いやすい 1. システム リソースのより効率的な使用 コンテナーではハードウェア仮想化や完全なオペレーティング システムを実行するための追加のオーバーヘッドが不要なため、Docker はシステム リソースをより効率的に使用します。 2. 起動時間の短縮 従来の仮想マシン技術では、アプリケーション サービスの起動に数分かかることがよくありますが、Docker コンテナー アプリケーションは、完全なオペレーティング システムを起動せずにホスト カーネル上で直接実行されるため、数秒または数ミリ秒で起動できます。開発、テスト、展開にかかる時間を大幅に節約できます。 3. 一貫した動作環境 開発プロセスにおける一般的な問題は、環境の一貫性の問題です。開発環境、テスト環境、本番環境間の不整合により、開発プロセス中にいくつかのバグが検出されませんでした。 4. 継続的デリバリーとデプロイメント 開発者と運用者 (DevOps) にとって最も望ましいのは、一度作成または構成すれば、どこでも正常に実行できることです。 5. 移行が容易 Docker は実行環境の一貫性を保証するため、アプリケーションの移行が容易になります。 Docker は、物理マシン、仮想マシン、パブリック クラウド、プライベート クラウド、さらにはラップトップなど、さまざまなプラットフォームで実行でき、実行結果は一貫しています。 2.0 Dockerのインストールシステム環境: Docker は少なくとも Centos7 をサポートし、64 ビット プラットフォームではカーネル バージョンが 3.10 以上です。 バージョン: コミュニティ エディション、エンタープライズ エディション (一部有料サービスを含む) 公式バージョンのインストールチュートリアル(英語) Blogger バージョンのインストール チュートリアル: # Dockerをインストールする yumでdockerをインストール # Dockerを起動する systemctl 開始/ステータス docker # docker の起動ステータスと docker のバージョンを表示する アクセラレータを設定する はじめに: DaoCloud Accelerator は、国内ユーザーの Docker Hub へのアクセスが遅い問題を解決する人気の Docker ツールです。 DaoCloud アクセラレータは、国内の CDN サービスとプロトコル レイヤーの最適化を組み合わせて、ダウンロード速度を飛躍的に向上させます。 DaoCloud公式サイト # スピードアップのためのコマンド 1 つ (docker を再起動することを忘れないでください) curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io 3.0基本的なDockerコマンドdocker --ヘルプ 使用法: docker [オプション] コマンド [引数...] docker デーモン [ --help | ... ] docker [ --help | -v | --version ] あ コンテナ用の自己完結型ランタイム。 オプション: --config=~/.docker クライアント設定ファイルの場所 # クライアント設定ファイルの場所 -D, --debug=false デバッグ モードを有効にする # デバッグ モードを有効にする -H, --host=[] 接続するデーモン ソケット # デーモン プロセスのソケット接続 -h, --help=false 使用方法を表示する # 使用方法を表示する -l, --log-level=info ログ レベルを設定する # ログ レベルを設定する --tls=false TLS を使用する (--tlsverify によって暗黙的に指定) # --tlscacert=~/.docker/ca.pem この CA によってのみ署名された証明書を信頼する #証明書署名 CA を信頼する --tlscert=~/.docker/cert.pem TLS 証明書ファイルへのパス #TLS 証明書ファイルのパス --tlskey=~/.docker/key.pem TLS キーファイルへのパス #TLS キーファイルのパス --tlsverify=false TLS を使用してリモートを検証します #TLS を使用してリモートを検証します -v, --version=false バージョン情報を出力して終了します #バージョン情報を出力して終了します コマンド: アタッチ 実行中のコンテナにアタッチします #現在のシェルで指定された実行中のイメージにアタッチしますbuild Dockerfile からイメージを構築します #Dockerfile を通じてイメージをカスタマイズしますcommit コンテナの変更から新しいイメージを作成します #現在のコンテナを新しいイメージとして送信しますcp コンテナから HOSTDIR または STDOUT にファイル/フォルダをコピーします #コンテナから指定されたファイルまたはディレクトリをホストにコピーしますcreate 新しいコンテナを作成します #run と同じですが、コンテナを開始せずに新しいコンテナを作成しますdiff コンテナのファイルシステムの変更を検査します #Docker コンテナの変更を表示しますevents サーバーからリアルタイム イベントを取得します #Docker からコンテナのリアルタイム イベントを取得します serviceexec 実行中のコンテナでコマンドを実行します #既存のコンテナでコマンドを実行しますexport コンテナのファイルシステムを tar アーカイブとしてエクスポートします #コンテナのコンテンツ ストリームを tar アーカイブ ファイルとしてエクスポートします (import に対応) history イメージの履歴を表示します #イメージの履歴を表示します images イメージを一覧表示します #システムの現在のイメージを一覧表示します import tarball から内容をインポートしてファイルシステムイメージを作成します #tarball の内容から新しいファイルシステムイメージを作成します (export に対応) info システム全体の情報を表示します #システム関連の情報を表示します inspect コンテナまたはイメージの低レベル情報を返します #コンテナの詳細を表示します kill 実行中のコンテナを強制終了します #指定された docker コンテナを強制終了します load tar アーカイブまたは STDIN からイメージをロードします #tar アーカイブからイメージをロードします (save に対応) login Docker レジストリに登録またはログインします#Docker ソース サーバーに登録またはログインしますlogout Docker レジストリからログアウトします #現在の Docker レジストリを終了しますlogs コンテナーのログを取得します #現在のコンテナーのログ情報を出力しますpause コンテナー内のすべてのプロセスを一時停止します#一時停止しますcontainerport CONTAINER のポート マッピングまたは特定のマッピングを一覧表示します #マップされたポートに対応するコンテナーの内部ソース ポートを表示しますps コンテナーを一覧表示します #コンテナーを一覧表示しますlistpull レジストリからイメージまたはリポジトリをプルします #指定されたイメージまたはライブラリ イメージを Docker イメージ ソース サーバーからプルしますpush イメージまたはリポジトリをレジストリにプッシュします #指定されたイメージまたはライブラリ イメージを Docker ソース サーバーにプッシュしますrename コンテナーの名前を変更します #コンテナーの名前を変更しますrestart 実行中のコンテナーを再起動します #実行中のコンテナーを再起動しますrm 1 つ以上のコンテナーを削除します #1 つ以上のコンテナーを削除しますrmi 1 つ以上のイメージを削除します #1 つ以上のイメージを削除します (イメージを使用しているコンテナーは削除できません。そうでない場合は、続行するには関連するコンテナーを削除するか、-f で強制的に削除する必要があります) run 新しいコンテナでコマンドを実行します #新しいコンテナを作成し、コマンドを実行します save イメージを tar アーカイブに保存します #イメージを tar アーカイブとして保存します (load に対応) Docker Hub でイメージを検索 #indocker ハブ内のイメージを検索します。start 停止している 1 つ以上のコンテナーを起動します。stats コンテナーのリソース使用統計のライブ ストリームを表示します。stop 実行中のコンテナーを停止します。tag イメージをリポジトリにタグ付けします。top コンテナーの実行中のプロセスを表示します。unpause コンテナー内のすべてのプロセスを一時停止解除します。version Docker のバージョン情報を表示します。wait コンテナーが停止するまでブロックし、終了コードを出力します。コマンドの詳細については、「docker COMMAND --help」を実行してください。 docker search hello-docker # hello-docker イメージを検索docker search centos # centos イメージを検索docker pull hello-docker # centos イメージを取得docker run hello-world # docker イメージを実行してコンテナ インスタンスを生成します (イメージ ID の最初の 3 桁で実行することもできます) docker image ls # すべてのローカルイメージを表示 docker images # docker イメージを表示 docker image rmi hello-docker # centos イメージを削除 docker ps # 実行中のコンテナを一覧表示 (作成されたコンテナでプロセスが実行されていない場合、コンテナはすぐに停止します) docker ps -a # 実行中のコンテナレコードをすべて一覧表示しますdocker save centos > /opt/centos.tar.gz # docker イメージをローカルにエクスポートしますdocker load < /opt/centos.tar.gz # ローカルイメージを docker イメージライブラリにインポートしますdocker stop `docker ps -aq` # 実行中のコンテナをすべて停止しますdocker rm `docker ps -aq` # コンテナレコードをすべて一度に削除しますdocker rmi `docker images -aq` # ローカルイメージレコードをすべて一度に削除します 3.1コンテナを起動する2つの方法 コンテナはアプリケーションを実行するため、基盤としてオペレーティング システムが必要です。 1. イメージに基づいて新しいコンテナを作成し、起動します。 # 1. バックグラウンドでDockerを実行する docker run -d centos /bin/sh -c "while true;do echo が実行中; sleep 1;done" # -d コンテナをバックグラウンドで実行します# /bin/sh は Centos Bash インタープリターの使用を指定します# -c シェル コマンドを実行します# "while true;do echo is running; sleep 1;done" Linux のバックグラウンドで、実行中であることを 1 秒ごとに出力しますdocker ps # コンテナのプロセスを確認しますdocker logs -f コンテナ ID/名前# コンテナのログ情報を継続的に出力しますdocker stop centos # コンテナを停止します# 2. bash ターミナルを起動し、ユーザーが対話できるようにしますdocker run --name mydocker -it centos /bin/bash # --name はコンテナの名前を定義します# -i はコンテナの標準入力を開いたままにします# -t は Docker に擬似端末を割り当て、それをコンテナの標準入力にバインドさせます# /bin/bash は Docker コンテナを指定し、シェルインタープリタと対話します docker run を使用してコンテナを作成すると、Docker はバックグラウンドで次の手順を実行します。
2. 停止したコンテナを再起動する [root@localhost ~]# docker ps -a # まず、コンテナID、イメージ、コマンド、作成日時、ステータス、ポート、名前のレコードを照会します。 ee92fcf6f32d centos "/bin/bash" 4日前 終了 (137) 3日前 kickass_raman [root@localhost ~]# docker start ee9 # このコンテナ ee9 を再度起動します [root@localhost ~]# docker exec -it ee9 /bin/bash # コンテナのインタラクティブインターフェースに入る [root@ee92fcf6f32d /]# # コンテナのユーザー名になっているユーザー名に注意してください 3.2カスタムイメージを送信して作成する # 1. 対話型 Centos コンテナに入ると、vim コマンド docker run -it centos がないことがわかります。 # 2.現在のコンテナにvimをインストールする yum インストール -y vim # 3. vimをインストールしたら、コンテナを終了します。 # 4. インストールしたばかりのvimのコンテナレコードを確認する docker container ls -a # 5. このコンテナを送信して新しいイメージを作成する docker コミット 059fdea031ba chaoyu/centos-vim # 6. イメージファイル docker images を表示する リポジトリ タグ イメージ ID 作成 サイズ chaoyu/centos-vim 最新 fd2685ae25fe 5 分前 348MB 3.3コンテナへの外部アクセス ネットワーク アプリケーションはコンテナー内で実行できますが、これらのアプリケーションを外部からアクセスできるようにするには、-p または -P パラメーターを使用してポート マッピングを指定します。 docker run -d -P トレーニング/ウェブアプリ python app.py # -P パラメータは、コンテナによって開かれたネットワークポートにポートをランダムにマッピングします # マッピングされたポートを確認します docker ps -l コンテナID イメージ コマンド 作成ステータス ポート名 cfd632821d7a トレーニング/ウェブアプリ「python app.py」 21 秒前 20 秒前にアップ 0.0.0.0:32768->5000/tcp brave_fermi #ホストip:32768はコンテナのポート5000をマップします #コンテナのログ情報を表示します docker logs -f cfd # #ログを継続的に表示します # -p パラメータを使用してマッピングポートを指定することもできます docker run -d -p 9000:5000 training/webapp python app.py ブラウザを開き、サーバーのポート 9000 にアクセスします。コンテンツには Hello world! と表示されます。通常の起動を示します (アクセスに失敗した場合は、ファイアウォールとクラウドサーバーのセキュリティグループを確認してください) 4.0 Dockerfileを使用してイメージをカスタマイズするイメージはコンテナの基礎となります。docker run を実行するたびに、コンテナを実行する基礎としてどのイメージを使用するかを指定します。これまでの例では、すべて Docker Hub のイメージを使用しました。これらのイメージを直接使用しても、特定の要件を満たすことしかできません。イメージがニーズを満たせない場合は、これらのイメージをカスタマイズする必要があります。 イメージのカスタマイズとは、各レイヤーに追加される構成とファイルをカスタマイズすることを意味します。変更、インストール、構築、操作の各レイヤーのコマンドをスクリプトに記述し、そのスクリプトを使用してイメージの構築やカスタマイズを行うことができる場合、このスクリプトが Dockerfile になります。 Dockerfile は、命令を含むテキスト ファイルです。各命令はレイヤーを構築するため、各命令の内容はレイヤーの構築方法を記述します。 パラメータ 最初から #ベースイメージを作成します。公式イメージをベースイメージとして使用してみてください。 FROM centos #ベースイメージを使用する FROM ubuntu:14.04 #タグ付きベースイメージ LABEL version="1.0" #コンテナのメタデータ、ヘルプ情報、メタデータ、コードコメントと同様 LABEL manageer="[email protected]" #複雑な RUN コマンドの場合は、無駄な階層化を避け、バックスラッシュを使用して複数のコマンドを囲み、1 つのコマンドに結合してください。 yum update && yum install -y vim \ を実行します。 Python-dev #バックスラッシュ 改行 RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME" WORKDIR /root #Linux の cd コマンドと同等で、ディレクトリを変更します。絶対パスを使用するようにしてください。 ! ! RUN cdは使用しないでください WORKDIR /test # WORKDIR demo が存在しない場合は自動的に作成します # デモ フォルダに入ります RUN pwd # 印刷結果は /test/demo になります 追加とコピー ADD hello / # ローカルファイルをイメージに追加し、ローカルのhello実行ファイルをイメージの/ディレクトリにコピーします。ADD test.tar.gz / # ルートディレクトリに追加し、解凍します。WORKDIR /root ADD hello test/ # /root/ を入力します。hello 実行可能コマンドをテストディレクトリ (/root/test/hello) に追加します。絶対パス COPY hello test/ # 上記の ADD 効果と同等です。ADD および COPY - 最初にCOPYコマンドを使用する - ADDにはCOPY機能に加えて解凍機能があります。リモートファイル/ディレクトリを追加するにはcurlまたはwgetを使用します ENV # 環境変数。可能な限り ENV を使用して保守性を高めます。 ENV MYSQL_VERSION 5.6 # mysql 定数を設定します。 RUN yum install -y mysql-server="${MYSQL_VERSION}" 上級とはただ(理解すること)
5.0 が倉庫にリリースされました1. Dockerハブには合計でイメージがリリースされている Docker は GitHub に似たリポジトリである Docker Hub を提供します。 公式サイト(登録必要) # docker idを登録したら、Linuxでdockerhubにログインします dockerログイン # 画像タグがアカウント名であることを確認してください。画像名が間違っている場合は、タグを変更する必要があります。 docker タグ chaoyu/centos-vim peng104/centos-vim # 構文は次のとおりです: docker tag warehouse name peng104/warehouse name # docker イメージを dockerhub にプッシュします docker push peng104/centps-cmd-exec:最新 # dockerhub にアクセスしてイメージを確認します # 最初にローカルイメージを削除してから、プルイメージファイルのダウンロードをテストします docker pull peng104/centos-entrypoint-exec 2. プライベート倉庫 Docker hubはパブリックなので、他の人がダウンロードできます。安全ではないので、Dockerレジストリが提供するプライベートウェアハウスを使用することもできます。 詳しい使い方はこちら # 1. docker公式プライベートウェアハウスイメージをダウンロードする docker pull registry # 2. docker プライベートコンテナリポジトリを実行する docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry -d バックグラウンド実行 -p ポートマッピング ホストマシン 5000: コンテナ 5000 -v データボリュームはホストの /opt/data/registry:/var/lib/registry をマウントします レジストリ イメージ名 /var/lib/registry プライベート ウェアハウスの保存場所 # Docker では、デフォルトでは非 HTTPS イメージのプッシュは許可されません。この制限は、Docker 構成オプション# 3 で削除できます。Docker 構成ファイルを変更して http モードをサポートし、プライベートイメージをアップロードします。vim /etc/docker/daemon.json # 次の内容を記述します { "レジストリミラー": ["http://f1361db2.m.daocloud.io"], "安全でないレジストリ":["192.168.11.37:5000"] } # 4. docker サービス設定ファイルを変更する vim /lib/systemd/system/docker.service # コードブロック [service] を見つけて、次のパラメータ [Service] を記述します。 環境ファイル=-/etc/docker/daemon.json # 5. docker サービスをリロードする systemctl daemon-reload # 6. dockerサービスを再起動します。systemctl restart docker # 注意: docker サービスを再起動すると、すべてのコンテナがクラッシュします。 # 7. ローカルイメージのタグを変更し、独自のプライベートリポジトリにプッシュします。 docker tag docker.io/peng104/hello-world-docker 192.168.11.37:5000/peng-hello # ブラウザで http://192.168.119.10:5000/v2/_catalog にアクセスしてウェアハウスを表示します。# 8. プライベートウェアハウスイメージをダウンロードします。docker pull 192.168.11.37:5000/peng-hello 6.0 例のデモンストレーションDockerfile を記述し、独自のイメージを構築して、Flask プログラムを実行します。 app.py と dockerfile が同じディレクトリにあることを確認してください。 # 1. app.pyのFlaskプログラムを準備する [root@localhost ~]# cat app.py FlaskからFlaskをインポート アプリ = Flask(__name__) @app.route('/') デフハロー(): 「hello docker」を返します __name__=="__main__"の場合: app.run(ホスト='0.0.0.0'、ポート=8080) [root@master ホーム]# ls app.py Dockerファイル # 2. Dockerfileを書く [root@localhost ~]# cat Dockerfile Python:2.7から ラベル メンテナー="Warm and New" pip install flaskを実行します。 app.py /app/ をコピーする ワークディレクトリ /app エクスポーズ8080 コマンド ["python","app.py"] # 3. イメージをビルドし、現在のディレクトリで Dockerfile を見つけて、ビルドを開始します (docker build -t peng104/flask-hello-docker)。 # 4. 作成した画像を表示する dockerイメージls # 5. この flask-hello-docker コンテナを起動し、外部アクセス用のポートをマップします。docker run -d -p 8080:8080 peng104/flask-hello-docker # 6. 実行中のコンテナを確認する docker container ls # 7. このイメージをプライベートリポジトリ docker タグ peng104/flask-hello-docker 192.168.11.37:5000/peng-flaskweb にプッシュします docker push 192.168.11.37:5000/peng-flaskweb 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: JavaScriptのポイントごとのシリーズでこれは何ですか
>>: MYSQLは、ショッピングカートに追加する際に重複追加を防ぐためのサンプルコードを実装します。
目次1. Dockerをインストールする2. コードを書く3. Dockerfileを書く4. 画像...
序文Golang は、SQL データベースにアクセスするための database/sql パッケージ...
カスタム タグは XML ファイルと HTML ファイルで自由に使用できますが、いくつか注意すべき点...
データベースを使用するアプリケーションを開発する場合、必然的にユニオンクエリを使用する必要があります...
Linux環境変数の設定ソフトウェアのインストールをカスタマイズする場合、多くの場合、環境変数を設定...
nginx パニック問題に関しては、まず nginx の起動プロセス中に、マスター プロセスが構成フ...
伝統的な方法は、正方形を固定形式で書くことです。長さ=幅を直接書き、次のように固定値を書きます。 。...
目次メモリプールの概要1. nginxデータ構造2. nginxはOSからスペースngx_creat...
目次サイクル比較使用法要約するサイクル比較ヴュー2ヴュー3作成前設定作成された設定マウント前マウント...
まず公式サイトにアクセスしてダウンロードし、MySQLダウンロードをクリックします。 ダウンロードし...
序文この記事はかなり詳細で、少し面倒です。他のチュートリアル ドキュメントでは多くの手順が省略されて...
この記事では、CSS で 2 つの固定列と 1 つのアダプティブ列を実装するいくつかの方法を紹介し、...
Vueのシンプルなタイマーを参考にしてください。具体的な内容は以下のとおりです原理: setInte...
序文少し前に、browser-sync+gulp+gulp-nodemon を組み合わせて、本番環境...
目次Linux - MyCat を使用して MySQL マスター スレーブの読み取り書き込み分離を実...