Docker イメージの作成、アップロード、プル、およびデプロイ操作 (Alibaba Cloud を使用)

Docker イメージの作成、アップロード、プル、およびデプロイ操作 (Alibaba Cloud を使用)

学習プロセス中にプッシュ イメージが常にタイムアウトすることがわかったため、Alibaba Cloud 上の Docker リポジトリを直接申請しました (管理センター -> ミラー リポジトリの作成 -> 私の場合は East China 2 なので、GitHub アカウントをバインドするだけです)。完了です。今後は、このリポジトリを使用してプッシュし、プル時にアクセラレータを使用し、使用シナリオに応じて切り替えに注意し、dockerhubを破棄します...操作プロセスを記録します。

1. 名前空間 hhu を作成し (現在の学校に基づき、小文字のみ使用可能、各アカウントは 5 つしか作成できません)、新人 Docker イメージ ウェアハウス docker1 を作成します (github のウェアハウスにバインドし、個人が自由に使用できます。このウェアハウス イメージはアプリのようなもので、継続的にバージョンを更新できます)。その後、すべてのテスト イメージをここにプッシュし、他のイメージ ウェアハウスを将来的に他の特別なイメージに適用できます (たとえば、Tomcat を作成する場合は、別のイメージ ウェアハウス tomcat を適用し、redis を作成する場合は、redis ウェアハウスを適用します)。仕上げる;

2. 鏡像生成。このステップについては、以下に詳しく別途記録します。

3. イメージのプッシュ: 本番環境が完了したら、イメージをイメージテスト ウェアハウスの docker1 にプッシュする必要があります。基本情報は以下の通りです。

1. パブリックネットワークアドレス: registry.cn-shanghai.aliyuncs.com/hhu/docker1

2. イントラネット アドレス (ECS の場合はオプション): registry-internal.cn-shanghai.aliyuncs.com/hhu/docker1

3. コードリポジトリ(GitHub 上のバインドされたリポジトリ): https://github.com/Jacksonary/Docker

最初の Docker イメージの名前は jacksonary/myfirstapp です。ネットワークの状態に基づいて、パブリック ネットワークにプッシュすることを選択します。主なプロセスは次のとおりです。

# 1. アクセラレータからウェアハウスのアドレスに切り替えてログインします。docker login [email protected] registry.cn-shanghai.aliyuncs.com

# 2. 名前または ID に基づいてイメージのタグを作成します。デフォルトは、最新の docker タグ jacksonary/myfirstapp registry.cn-shanghai.aliyuncs.com/hhu/docker1[:イメージのバージョン番号] です。

# 3. イメージをプッシュします docker push registry.cn-shanghai.aliyuncs.com/hhu/docker1[:イメージのバージョン番号]

次のようにして、プッシュされたイメージを Alibaba Cloud ウェアハウスで表示できます。

上記のイメージファイルを取得する際には、イメージのバージョン番号を指定する必要があるため、イメージをプッシュする際には区別するために必要なイメージのバージョン番号を追加することをお勧めします。上記のイメージをプルする必要がある場合は、次のようにします。

# デフォルトのバージョンは最新なので、取得時に空白のままにするか、以下を追加できます: latest (推奨) docker pull registry.cn-shanghai.aliyuncs.com/hhu/docker1

1. Dockerイメージの作成

通常、1 つのプロジェクトは 1 つのフォルダーに配置されます。たとえば、公式サイトには flask-app というプロジェクトがあるため、すべてのファイルはプロジェクト ディレクトリ内にあります。プロジェクトのルート ディレクトリに「Dockerfile」というテキスト ファイルを追加し、その txt サフィックスを削除してから、一般的なテキスト エディターを使用して、次の Dockerfile のように Docker 環境を記述する必要があります。

# 1. ベースイメージを Linux として指定します (alipine Docker イメージはわずか 5M の軽量 Linux システムです)
アルパインから:3.5

# alipine の下に python と pip をインストールします。このアプリは Python で書かれているので、通常はファイルをコピーして依存関係をインストールすることで Python 環境をインストールする必要があります。 RUN apk add --update py2-pip

# 必要な Python をインストールします COPY アプリに必要な requirements.txt /usr/src/app/
pip install --no-cache-dir -r /usr/src/app/requirements.txt を実行します。

# アプリケーションに必要なファイルをイメージにコピーします COPY app.py /usr/src/app/
templates/index.html をコピー /usr/src/app/templates/

# 公開するポート番号を設定します EXPOSE 5000

# アプリケーションが cmd 経由で Python アプリケーションを起動するように設定します CMD ["python", "/usr/src/app/app.py"]

次にDockerイメージを作成し、PowerShellでプロジェクトのルートディレクトリ(Dockerfileがある場所)に入り、実行します。

次のコマンドを実行して、 Dockerfile を作成します。

ここで注意すべき点は、Docker 設定ファイル名として「Dockerfile」を使用する場合は直接記述できますが、他の設定ファイル名を使用する場合は追加で指定する必要があることです。たとえば、Docker 設定ファイルとして「jdk-9-alpine.Dockerfile」を参照する場合は、-f を使用して設定ファイルを指定して、次のように記述する必要があります。

次のコマンドを実行して、Docker ファイルをビルドします。

-t コマンドは、現在作成されているイメージに「jacksonary/myfirstapp」というラベルを付けます。/ の前半は Docker ユーザー ID である必要があります (Dockerhub リポジトリを使用している場合、Dockerhub はデフォルトでユーザー名を使用します。Alibaba Cloud を使用している場合は、任意の名前を選択できます)。/ の後半はアプリケーションの名前です。これらは一緒にイメージのタグとして使用されます。その後ろの URL パスは失われません。ドットは現在のパスを示します。実行後、現在の HV 仮想マシンに自動的に公開されます。docker イメージを使用すると、追加の「jacksonary/myfirstapp」イメージがあることがわかります。これでプロセスは完了です。

[概要] Dockerfile ファイルの構成に関しては、次の点に注意する必要があります。

1. Dockerfile ファイルは FROM で始まり、その後に現在のイメージの親コンテナを示すベース コンテナとバージョンが続きます。親コンテナは通常、「ユーザー名/イメージ名: バージョン番号」の形式で存在します (これは Dockerhub でも同じです)

2. RUN 命令は、現在の Docker イメージを作成するために使用されます。この命令が呼び出されるたびに、Docker は新しいイメージ レイヤーを作成し、以前のイメージ バージョンにロールバックしやすくなります。その構文は、RUN の後にシェル命令 (RUN mkdir /user/local/foo など) を続けることで、/bin/sh シェルを自動的に実行します。もちろん、次のように指定することもできます。RUN /bin/bash -c 'mkdir /user/local/foo'

3. COPY命令はローカルファイルをコンテナにコピーできる

4. CMD命令で定義されたコマンドは、イメージの起動時に実行されます。RUN命令とは異なり、新しいイメージレイヤーを作成せず、単に命令を実行します。各イメージのDockerfileファイルには、実行するCMD命令が1つだけある場合もあれば、複数の命令がある場合もあります(この場合、CMDをスクリプトとして実行するのが最適です)。CDMが命令を実行するときは、これらの命令を実行する場所を指定する必要がありますが、RUNでは、次のCMD命令のように、指定する必要はありません。

コマンド ["python", "./app.py"]

CMD ["/bin/bash", "echo", "Hello World"]

5. EXPOSE 命令は、イメージ プログラムがサービスを提供するポートを指定するために使用されます。この情報は、docker examine <container-id> 命令で取得できますが、EXPOSE 命令は実際にポートをホストに公開するわけではありません。代わりに、docker run で公開するときに -p フラグで公開する必要があります。上記の小文字の p は、ホストと仮想ポートとホスト ポート間のマッピングを指定する必要があり、大文字の P は、イメージ内のポートをホスト上のランダム ポートに公開します。公開される特定のポートは、docker ps で確認できます。例:

上の図からわかるように、ミラーリングされたポート 8080 はホストのポート 32768 に公開されており、localhost:32768 を通じて確認できます。

6. PUSHコマンドはDocker Cloudなどのプラットフォームにイメージを公開できる

7. ENV 命令は、次のような環境変数を設定するために使用されます。

# Linux の標準 JAVA 環境変数である Java 環境変数を設定します。ENV JAVA_HOME=/opt/jdk-9
環境変数PATH=$PATH:$JAVA_HOME/bin

2. イメージを展開して実行する

イメージを作成したら、それを実行できます。チュートリアルに従って作成したイメージは次のとおりです: docker pull registry.cn-shanghai.aliyuncs.com/hhu/docker1。これをプルダウンして Docker で実行できます:

docker pull レジストリ.cn-shanghai.aliyuncs.com/hhu/docker1

docker run -p 8888:5000 --name myfirstapp registry.cn-shanghai.aliyuncs.com/hhu/docker1

-p ディレクティブ (これは非常に重要です) は、仮想マシンの公開ポート 5000 をローカル ポート 8888 にマッピングし、イメージに myfirstapp という名前を付けることを意味します。http://localhost:8888 にアクセスすると、cats の git マップを表示できます。更新するたびに、異なる cat マップがランダムに取得されます。

3. イメージプッシュ

Docker イメージ ファイルの完全なアドレスは記事の冒頭にあります: https://github.com/Jacksonary/Docker/tree/master/flask-app

4. シンプルなJAVAアプリケーションの展開

これはMavenを使用してパッケージ化されたシンプルなJavaプロジェクトです。作業ディレクトリに移動して実行してみましょう。

mvn アーキタイプ:generate -DgroupId=edu.hhu.java -DartifactId=helloworld -DinteractiveMode=false

簡単な Maven Java プロジェクトを作成します。ほとんどの人はこれを正常に実行できると思いますが、少数の人はこのコマンドを実行してもプロジェクトを作成できません (私もその 1 人です)。

このディレクトリにはPOMがありません

私は困惑した表情で彼に空の POM を渡しましたが、POM にはデータがないというメッセージが表示されました。では、別の方法でやってみましょう。プロジェクトを作成したいと彼に伝えましょう。

mvn アーキタイプ:生成

次に、組み込みのスケルトンが必要かどうかを尋ねられるので、7: maven-archetype-quickstart を選択し、プロンプトに従って groupID と artifactId 情報を入力します。最後に、パッケージ化するかどうかを尋ねられるので、パッケージ化だけを行います (すると、jar パッケージがターゲット ディレクトリに表示されます)。これでこの手順は完了です。このプロジェクトが使用できるかどうかを確認します。

java -cp ターゲット/helloworld-1.0-SNAPSHOT.jar edu.hhu.java.App

その中で、-cp は、このクラス ファイルを実行するために必要なすべてのクラスのパッケージ パス、つまりシステム クラス ローダーのパスを指定します。デフォルトのスケルトンは、"Hello World" で挨拶します。これで、Java プロジェクトが作成されました。

2 番目のステップは、Docker 構成ファイル Dockerfile を記述することです。

openjdk:latest から

コピー target/helloworld-1.0-SNAPSHOT.jar /usr/src/helloworld-1.0-SNAPSHOT.jar

コマンド java -cp /usr/src/helloworld-1.0-SNAPSHOT.jar edu.hhu.java.App

3番目のステップはミラーを作成して実行することです

helloworld を実行します。

docker で jacksonary/helloworld を実行します。

4. Docker での複雑なマルチコンテナ アプリケーション (Docker-compose)

実際の開発では、Ubuntuで文章を印刷するだけでなく、WEBでデータベースとやりとりするなど、複数のサービスが必要になることがよくあります。このようなアプリケーションは通常、複数のコンテナで構成されています。これらのコンテナを起動するためにシェルを使用する必要はありません。すべてのコンテナは、プロジェクトのルートディレクトリに記述されたDockerfileに似た「サービスグル​​ープ」として構成ファイルで定義され、使用できます。

docker-compose を起動 -d

docker-compose スクリプトを使用すると、アプリケーションおよびアプリケーション内のすべてのサービスを開始、停止、再起動できます。docker-compose の完全なコマンドは次のとおりです。

命令コンテンツ

建てる

サービスを構築または再構築する

ヘルプ

コマンドのヘルプを取得する

殺す

コンテナを強制終了する

ログ

コンテナからの出力を表示する

ポート

ポートバインディングのパブリックポートを印刷する

追伸

コンテナの一覧

引く

サービスイメージをプルする

再起動

サービスを再起動する

rm

停止したコンテナを削除する

走る

1回限りのコマンドを実行する

規模

サービスのコンテナ数を設定する

始める

サービスを開始する

停止

サービスを停止する

コンテナを作成して起動する

一緒に定義されたこれらの Docker コンポーネント サービスのエントリ ポイントは、docker-compse 構成ファイルです。このファイルは、通常、次の docker-compse.yml のような yml ファイルの形式で存在します (ポート マッピングを除く各プロパティを構成するときは、コロンの後にスペースを追加する必要があることに注意してください)。

バージョン: '3.3'
サービス:
 デシベル:
 コンテナ名: db
 イメージ:mysql:8
 環境:
  MYSQL_DATABASE: 従業員
  MYSQL_USER: mysql
  MYSQL_パスワード: mysql
  MYSQL_ROOT_PASSWORD: スーパーシークレット
 ポート:
  - 3307:3306
 ウェブ:
 イメージ: arungupta/docker-javaee:dockerconeu17
 ポート:
  -8081:8080
  -9991:9990
 依存:
  -db

上記の結合ファイルでは、次のようになります。

1. 2つのサービスを定義する: dbとweb

2. image属性は各サービスワードの画像ファイルを指定する。

3. mysql:8イメージはMySqlサービスを開始します。

4. 環境属性は、初期化用の MySQL サービス環境変数を定義します。MYSQL_DATABASE は、イメージの起動時に指定された名前でデータベースを作成するために使用されます。MYSQL_USER と MYSQL_PASSWORD を組み合わせて、新しいユーザーを作成し、パスワードを設定します。このユーザーには、MYSQL_DATABASE によって作成されたデータベースに対するスーパー権限が付与されます。MYSQL_ROOT_PASSWORD は、MySQL スーパーユーザー パスワードを設定するために必須です。

5. ポートはポート転送を実装します。前のポートはホスト、後ろのポートは仮想マシンです。

6.depends_on 属性は、2 つのサービス間の依存関係を示します。この場合、WildFly (アプリケーション サーバー) は MySQL に依存しているため、MySQL は WildFly の前に起動されます。

上記の結合された構成ファイルを作成した後、PW はファイルがあるディレクトリに入り、docker-compose up -d を使用して 2 つのサービスを分離モードで起動します。docker ps はポート間のマッピングを表示でき、2 つのコンテナーが起動されていることも確認できます。docker-compose logs はサービス ログを表示できます。この時点で、http://localhost:8081/resources/employees を通じてすべての人事情報にアクセスし、このグループのサービスを停止できます。

docker-compose ダウン

Alibaba Cloud を使用した Docker イメージの作成、アップロード、プル、デプロイに関する上記の記事が、私が皆さんと共有したいことのすべてです。これが皆さんの参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker イメージのプルとタグ操作 pull | tag
  • Python スクリプトが Docker イメージをプルする問題
  • Dockerでイメージをプルするための手順を完了する
  • Dockerイメージをプルしてバージョンを確認する方法
  • Docker 国内イメージ取得とイメージ高速化のレジストリミラー設定変更の詳しい説明
  • Docker が MySQL イメージをプルするのが遅すぎる問題を解決する

<<:  HTML ページの部分更新の実装コード

>>:  Vue フロントエンド開発補助機能状態管理詳細例

推薦する

Vueプロジェクトの最適化とパッケージ化の詳細な説明

目次序文1. ルーティングの遅延読み込み1. ルートの遅延読み込みが必要なのはなぜですか? 2. ル...

ES6の新機能に関する最もよく使われる知識ポイントのまとめ

目次1. キーワード2. 脱構築3. 文字列4. 正規化5. 配列6. 機能7. オブジェクト8.シ...

VMware ESXi 5.5 の展開および構成図のプロセス

目次1. インストール要件2. OSイメージのダウンロード3. VMware Workstation...

jsはクリックしてカードを切り替える機能を実現します

この記事の例では、クリックしてカードを切り替える機能を実現するためのjsの具体的なコードを共有してい...

Vue3 の ref toRef と toRefs の違いを理解する方法

目次1. 基本1.参照2. 参照3. 参照4. 最適な使い方2. 詳細な1. なぜrefが必要なのか...

Vue3 でタイマーコンポーネントをカプセル化する方法

背景一部のショッピング モールの Web ページで商品の詳細を開くと、購入数量を選択するためのカウン...

モバイルデバイスでのフリーズ問題に対する CSS3 ソリューション (アニメーション パフォーマンスの最適化)

1. CSS、jQuery、Canvasを使用してアニメーションを作成する1. キャンバス利点: ...

MySQL での置換例の詳細な説明

MySQL での置換例の詳細な説明replace into は insert と似ていますが、rep...

Linux centos7 環境での MySQL インストール チュートリアル

Linux centos7 環境に MySQL をインストールする手順の詳細な紹介MySQLをインス...

Docker Compose のインストールと使用手順

目次1. Docker Compose とは何ですか? 2. Docker Composeのインスト...

Webpack5-react スキャフォールディングをゼロから構築するための実装手順 (ソースコード付き)

目次ウェブパック5公式スタート建築ガイド構築を開始する依存する準備が完了したら、プロジェクトの構築を...

HTML テキストエスケープのヒント

今日、CSDN で HTML テキスト エスケープのちょっとしたトリックを見ましたが、とても簡単です...

Linux に Python 3.8.1 をインストールするための詳細なチュートリアル

この例では、Linux への Python 3.8 のインストールを例に挙げます。 1. 依存パッケ...

RoughViz を使用して Vue.js でスケッチされたチャートを視覚化する方法

導入チャートは、データ セットを読みやすくし、その各部分を区別しやすくするために使用されるデータのグ...

MySQL EXPLAIN ステートメントの使用例

目次1. 使用方法2. 出力結果1.id 2.選択タイプ3.表4.パーティション5.タイプ6.可能な...