Dockerイメージの作成、アップロード、プル、デプロイを理解するための記事

Dockerイメージの作成、アップロード、プル、デプロイを理解するための記事

1. 画像

1. 鏡とは何ですか?

(1) Baidu 百科事典によると、ミラーリングはファイル ストレージの形式であり、冗長性の一種です。1 つのディスク上のデータは、別のディスク上に同一のコピーが存在し、これをミラーと呼びます。

(2)多数のファイルをミラーファイルにして、GHOSTなどのプログラムを使ってディスクに置き、GHOSTなどのソフトウェアで開いて、多数のファイルに復元することができます。RAID 1とRAID 10はミラーリングを使用します。

(3)一般的な画像ファイル形式には、ISO、BIN、IMG、TAO、DAO、CIF、FCDなどがあります。

観た後はもっとめまいがするのでしょうか?

実際、簡単に言えば、イメージはプログラム コード、基本システム、依存ライブラリ、およびツールを含むアプリのパッケージです。
もっと簡単に言えば、APP インストール パッケージのようなものです。

2. 画像の構成と目的

(1) Dockerファイル

:画像ファイルを作成するためのレシピ

代々受け継がれてきた秘伝のレシピのような雲南白薬:リンジー、高麗人参、鹿角、三七人参など。

(2)スクラッチ

: 最も基本的なDockerイメージであり、基盤→空のイメージ、何もない→ゼロから始めることに相当します

他の画像をベース画像として使用します。巨人の肩の上に立つかのように、それに基づいて他の画像を拡張できます。

しかし、段階的にミラーを構築する必要があります。

(3)完全なオペレーティングシステムには以下が必要です。

1.カーネル
2. システムコール
3. アプリケーションとライブラリ
4. シェル等

bootfs --》コンテナ起動時に必要な内容

rootfs --》コンテナ内のオペレーティングシステム

ドッカー保存

docker エクスポート

原理:

コンテナが起動すると、カーネルはbootfsを起動し、ベースイメージを直接ロードし、下から上へとレイヤーごとにロードします。

コンテナの実行後にファイルにアクセスする場合、アクセスは書き込み可能なレイヤーからレイヤーごとに上から下へ行われます。

3. 独自のイメージを作成する必要があるのはなぜですか?

以前は、Linux および CentOS システムで MySQL をダウンロードするには、yum コマンドを使用する必要がありました。docker テクノロジを習得すると、必要なソフトウェアはすべて docker に取り込むだけで入手できます。Docker は巨大なリソース ライブラリのようなものです。考えられないほど多くのものが含まれています。

学生の中には、「Docker に対する私の想像力を制限したのはテクノロジーだった」と言い、後悔の涙を流す人もいました。

Docker はとても便利で、イメージファイルもたくさんあるのに、なぜ自分で作らなければならないのか、と言う学生もいました。必要なものは何でも引っ張って来ればいいんじゃないの?

しかし、他社がどのような画像ファイルを作成しているか不明であったり、特定のニーズを満たせなかったりすることが多いため、企業は独自の画像ファイルを作成する必要があることがよくあります。茅台酒を買いに行ったとき、商人がそれは10年物の茅台酒だと言ったら、あなたは彼を信じますか?これは過去10年間の茅台酒でしょうか?確認しに行ってみたらどうですか?あなたが金持ちなら、私が何も言わなかったことにしてください、ハハハ

2. 鏡作りの手順(10ステップ方式)

ステップ1: Dockerfileを編集する

[root@sc-docker-server ~]# mkdir /mydocker/
[root@sc-docker-server ~]# cd /mydocker/
[root@sc-docker-server mydocker]#

[root@sc-docker-server mydocker]# vim Dockerfile
python:2.7-slimより
ワークディレクトリ /app
./app を追加する
pip install --trusted-host pypi.python.org -r requirements.txt を実行します。
エクスポーズ80
ENV NAME ワールド
ENV AUTHOR カリ
コマンド ["python","app.py"]

ステップ2: requirements.txtファイルを編集する

[root@sc-docker-server mydocker]# vim requirements.txt
フラスコ
レディス

ステップ3: プログラムファイルであるapp.pyファイルを編集する

[root@sc-docker-server mydocker]# vim app.py
FlaskからFlaskをインポート
RedisからRedisをインポートすると、RedisError
インポートOS
インポートソケット

# Redisに接続する
redis = Redis(ホスト = "redis"、db = 0、socket_connect_timeout = 2、socket_timeout = 2)

アプリ = Flask(__name__)

@app.route("/")
デフハロー():
    試す:
        訪問数 = redis.incr("counter")
    RedisErrorを除く:
        visits = "<i>Redis に接続できません。カウンターが無効です</i>"

    html = "<h3>こんにちは {name}!</h3>" \
           "<b>ホスト名:</b> {ホスト名} <br/>" \
           「<b>訪問数:</b> {訪問数}」
    html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits) を返します。

__name__ == "__main__" の場合:
    app.run(ホスト='0.0.0.0'、ポート=80)

ステップ4: 画像ファイルを生成する

次のコマンドを実行して、docker を再起動します。
次のコマンドを実行して、docker build -t sc_friendlyhello_1 を実行します。
ビルドコンテキストを Docker デーモンに送信 4.608kB
ステップ 1/9: python:2.7-slim から
 ---> eeb27ee6b893
ステップ 2/9: WORKDIR /app
 ---> キャッシュの使用
 ---> 81aa71984f63
ステップ3/9: ./appを追加する
 ---> キャッシュの使用
 ---> a5c7c6ed471c
ステップ 4/9: ボリューム ["/data_flask"]
 ---> キャッシュの使用
 ---> d4db66a741db
ステップ 5/9: pip install --trusted-host pypi.python.org -r requirements.txt を実行します。
 ---> キャッシュの使用
 ---> bcdee009e5f7
ステップ 6/9: EXPOSE 80
 ---> キャッシュの使用
 ---> 475474ce55ff
ステップ 7/9: ENV NAME ワールド
 ---> キャッシュの使用
 ---> 0f03ead6c99b
ステップ 8/9: ENV AUTHOR cali
 ---> キャッシュの使用
 ---> f844eb0f1a78
ステップ 9/9 : CMD ["python","app.py"]
 ---> キャッシュの使用
 ---> ab30484b56b8
ab30484b56b8 の構築に成功しました
sc_friendlyhello_1:latest のタグ付けに成功しました
[root@sc-docker-server mydocker]#

ステップ5: イメージが成功したかどうかを確認する

[root@sc-docker-server mydocker]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
sc_friendlyhello_1 最新 ab30484b56b8 32 分前 159MB

ステップ6: イメージを使用してコンテナを起動する

docker run -d -p 5080:80 --name sc-hello-1 sc_friendlyhello_1

ステップ7: コンテナのWebサービスにアクセスする

curlまたはChromeブラウザを使用してホストIP:5080にアクセスします
「こんにちは世界」
ホスト名: f4aeb5d5305a
訪問数: Redis に接続できません。カウンターが無効です

Redisデータベースコンテナが起動していないため、Flask WebサービスはRedisデータベースに接続できません。

ステップ8: Redisコンテナを起動する

docker run -d -p 6379:6379 --name sc-redis-1 redis

ステップ9: 独自のイメージでコンテナを再度起動し、それをredisコンテナにリンクします。

docker run -d --name sc-hello-2 -p 5081:80 --link sc-redis-1:redis sc_friendlyhello_1

ステップ10: コンテナのWebサービスにアクセスする

curlまたはChromeブラウザを使用してホストIP:5081にアクセスします
「こんにちは世界」
ホスト名: aad7da1892b5
訪問数: 15

3. 鏡像の作成

手術

1. sc_friendlyhello_1のイメージのベースイメージをpython:3.9にアップグレードします。
自分のイメージの名前をsc_friendlyhello_2に変更します。
2. コンテナとRedisコンテナを起動し、アクセスをテストする**

操作手順:

アップロードしたファイルをインストールする

root@sc-docker-server ~]# yum install lrzsz -y アップロードされたソフトウェアをインストールします。 最後のメタデータ有効期限チェック: 0:25:32 前、2021 年 8 月 18 日水曜日 09:52:02 に実行されました。
パッケージ lrzsz-0.12.20-43.el8.x86_64 はすでにインストールされています。
依存関係の解決。
治療は必要ありません。
完了!
[root@sc-docker-server ~]#

ステップ1: アプリのソースコードをダウンロードする

https://github.com/docker/getting-started Windowsでダウンロードし、Linuxにアップロードします。yum install git -y 

Linux の場合: git clone https://github.com/califeng/getting-started.git

ステップ2: アプリのソースコードアーカイブを解凍する

[root@sc-docker-server ~]# yum install zip unzip -y

    [root@sc-docker-1 ~]# getting-started-master.zip を解凍します 

ステップ3: アプリディレクトリに入り、新しいDockerfileを作成する

    [root@sc-docker-1 getting-started-master]# cd app/
    [root@sc-docker-1 app]# vim Dockerfile
ノード:12-alpineから
ワークディレクトリ /app
コピー 。 。
yarn install --production を実行します。
コマンド ["ノード", "src/index.js"]

ステップ4:鏡を作る

[root@sc-docker-1 app]# docker build -t getting-started .
-t getting-started は指定されたイメージの名前です。独自の名前を定義することもできます [root@sc-docker-1 app]# docker images 作成されたイメージを表示します リポジトリ タグ イメージ ID 作成 サイズ
入門 最新 5b903e857b8c 25 秒前 179MB
redis 最新 cc69ae189a1a 2日前 105MB
nginx 1.19.7 35c43ace9216 7日前 133MB
nginx 最新 35c43ace9216 7日前 133MB
mysql 5.7.33 5f47254ca581 2週間前 449MB
nginx 1.19.6 f6d0b4767a6c 6週間前 133MB
ノード 12-alpine 0206ff8a5f9e 7 週間前 88.9MB
richarvey/nginx-php-fpm 最新 5c3ad1891297 5 か月前 506MB
hello-world 最新 bf756fb1ae65 13ヶ月前 13.3kB
jcdemo/flaskapp 最新 4f7a2cc79052 2年前 88.7MB
[root@sc-docker-1 アプリ]#

ステップ5: 独自のイメージのコンテナを起動する

[root@sc-docker-1 app]# docker run -dp 3000:3000 開始
8f150a72e7d2d1650685b00a18d237469fa07c8cd56977773dd266b281a3b4ad
[root@sc-docker-1 アプリ]# docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
8f150a72e7d2 開始 "docker-entrypoint.s…" 5 秒前 3 秒前にアップ 0.0.0.0:3000->3000/tcp strange_benz
deabb58e01b0 nginx "/docker-entrypoint.…" 26 時間前 2 時間前にアップ 0.0.0.0:6655->80/tcp chenpeng
[root@sc-docker-1 アプリ]# 

ステップ6: ブラウザを開いてコンテナ内のウェブサイトにアクセスする

コンテナ内の Web サイト: http://192.168.0.161:3000/

要約する

1. イメージ作成は Docker テクノロジーの必須スキルです。Docker を知っていると言うと、他の人は必ずイメージの作成方法を知っているか尋ねてきます。なぜあれを作ったのかと尋ねると、彼らはわざと笑って、これすらできないのに Docker を知っていると言うのだから、この人のスキルは非常に低いに違いないと考えます。ハハ。

2. ミラー製造の詳細な手順は後述します。ミラー製造の 10 ステップ メソッドで、その方法を学習します。時間をかけて、ステップごとに実行してください。

Docker イメージの作成、アップロード、プル、デプロイに関するこの記事はこれで終わりです。Docker イメージの作成、アップロード、プル、デプロイに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker プッシュイメージの失敗に対する解決策
  • Dockerイメージをプルしてバージョンを確認する方法
  • Dockerでイメージをプルするための手順を完了する
  • Dockerでイメージを削除する方法
  • Docker間でイメージをエクスポートおよびインポートする方法
  • Docker イメージの作成、イメージの変更やアップロードの方法などについて詳しく紹介します。
  • Dockerでnoneイメージを削除する方法
  • Dockerイメージとコンテナの違いの詳細な説明
  • Dockerイメージを作成する2つの方法の詳細な説明
  • Dockerで国内イメージの設定を構成する

<<:  Node.js パッケージ マネージャー npm の具体的な使用方法

>>:  LeetCode の SQL 実装 (175. 2 つのテーブルの結合)

推薦する

MySQLの基本の共通機能

目次1. 共通機能分類1.1 単一行関数: 1.2 グループ化機能: 2. 単一行関数3. 数学関数...

Docker で Tomcat、MySQL、Redis をインストールするための詳細な手順

目次DockerでTomcatをインストールするtomcatイメージを使用してコンテナを作成する(イ...

Nginx の構成と HTTP 実装コード分析との互換性

OpenSSL を使用して SSL キーと CSR ファイルを生成するHTTPS を設定するには、秘...

テキストの円形スクロールアニメーションを実装するミニプログラム

この記事では、参考までに、テキストループスクロールを実現するアプレットの具体的なコードを例を挙げて紹...

MySQL マルチインスタンス構成のアプリケーションシナリオ

目次MySQL 複数インスタンスマルチインスタンスの概要マルチインスタンスとは何ですか?複数のインス...

HTML テーブルの使い方 (Web ページの視覚効果を表示する)

NetEase Blog で HTML を使用する場合、テンプレートに直接コードを追加できることは...

JS 矢印関数に適さないシナリオは何ですか?

目次概要オブジェクトにメソッドを定義するオブジェクトリテラルオブジェクトプロトタイプ動的コンテキスト...

IE5.0以降のHTCコンポーネントの定義の概要

Microsoft IE 5.0 がリリースされる前は、Web プログラミングにおける最大の課題は、...

Vue で axios を使用して画像をアップロードするときに発生する問題

目次FormDataとは何ですか? vueとaxiosの協力による実践的な体験追加()セット()消去...

ファイルをアップロードするための HTML フォームの「参照」ボタンを変更する方法

コードをコピーコードは次のとおりです。 <!DOCTYPE HTML PUBLIC "...

Vue の下部ナビゲーション バー TabBar を実装するための非常に詳細なチュートリアル

目次プロジェクト紹介:プロジェクトディレクトリ: TabBar 効果のプレビュー: TabBar 実...

MySQL 面接の質問: ハッシュ インデックスの設定方法

B-Tree インデックスに加えて、MySQL は次のインデックスも提供します。ハッシュインデックス...

コードを通じてHTMLエスケープ文字を識別する方法について説明します

データ内に次のような特徴を持つ「 ' 」などの文字が含まれることがあります。 &# ...

Dockerコンテナの中国語言語パックの設定の問題を解決する

Dockerでdocker search centosを使用する場合docker pull dock...

yum を使用して rpm と関連する依存関係をダウンロードして、docker をオフラインでインストールします。

yum を使用してすべての依存関係を一緒にインストールできますが、–downloadonly –d...