Dockerイメージ作成の完全なプロセス

Dockerイメージ作成の完全なプロセス

序文

この記事では、CentOS イメージの作成を例に、イメージのカスタマイズ、パッケージ化、リモート リポジトリへのプッシュのプロセスについて説明します。手順は比較的簡単なので、すぐに始めることができます。

作成手順

CentOSベースイメージを作成する

ビルド ディレクトリと Dockerfile を作成し、Dockerfile 内のイメージ関連の設定を編集します。

echo "現在のユーザーディレクトリにディレクトリ docker/build/centos_7.8.2003 を作成します" > /dev/null
ディレクトリは、 ~/docker/build/centos_7.8.2003 です。

echo "~/docker/build/centos_7.8.2003 ディレクトリに Dockerfile を作成します" > /dev/null
cat > ~/docker/build/centos_7.8.2003/Dockerfile << EOF 
# ベースイメージを指定する FROM centos:7.8.2003

# 環境変数 ENV LANG=zh_CN.UTF-8 を設定します \\
    言語=zh_CN:zh \\
    LC_ALL=zh_CN.UTF-8

# イメージを構築するときにのみこれらのシェルコマンドを実行します RUN yum update -y && \\
    yum 再インストール -y glibc-common && \\
    yum インストール -y telnet net-tools && \\
    yum すべてをクリーンアップ && \\
    rm -rf /tmp/* rm -rf /var/cache/yum/* && \\
    ロケール定義 -c -f UTF-8 -i zh_CN zh_CN.UTF-8 && \\
    ln -sf /usr/share/zoneinfo/アジア/上海 /etc/localtime
終了

イメージをビルドするには、初心者向けチュートリアル - docker build を参照してください。形式はdocker build -t <鏡像名>:<鏡像版本號> <Dockerfile所在目錄>です。イメージ バージョン番号が指定されていない場合、デフォルトはlatestです。

# ~/docker/build/centos_7.8.2003/Dockerfile を解析して、base-centos という名前のミラーを構築します。 docker build -t base-centos ~/docker/build/centos_7.8.2003

ビルドが完了すると、使用されたベース イメージとビルドによって生成された新しいイメージがローカル イメージ リストに表示されます。

Docker イメージ

画像-20211115184348966

コンテナを作成してカスタマイズする

新しいイメージを使用してコンテナを作成し、入力します。このコンテナは仮想 CentOS システムです。

echo "base-centos イメージを使用してコンテナを作成し、base-centos という名前を付けます" > /dev/null
docker 実行 \
--name ベース Centos \
--privileged=true \
-dit \
ベース-centos \
/usr/bin/init で、

echo "Centos コンテナに入る" > /dev/null
docker exec -it ベース Centos /bin/bash

よく使用するツールをインストールするなど、コンテナ内の仮想システムをカスタマイズします。実際、これらは Dockerfile に記述して、RUN 命令の後に定義することもできます。

echo "vim: ファイルを編集" > /dev/null
yum インストール -y vim

echo "lsof: ポート情報の表示に便利" > /dev/null
yum インストール -y lsof

echo "wget: ファイルのダウンロード" > /dev/null
yum インストール -y wget

echo "tree: ディレクトリ構造を表示" > /dev/null
yum インストール -y ツリー

echo "pythonをインストール" > /dev/null
yum インストール -y python-devel

echo "C コンパイル環境" > /dev/null
yum インストール -y gcc gcc-c++
yum インストール -y zlib
yum インストール -y zlib-devel
yum インストール -y tcl ビルド必須 tk gettext

カスタムコンテナを使用して新しいイメージを作成する

コマンドの形式は、 docker commit <容器名稱或者ID> <生成的鏡像名>:<鏡鏡像版本號>です。イメージのバージョン番号が書き込まれていない場合、デフォルトはlatestです。このコンテナは、作成時に停止状態になることもあります。

docker コミット base-centos centos:7.8.2003_v1

この時点で、イメージが作成され、イメージ リストに新しいイメージが表示されます。

画像-20211115185738542

イメージtarballを保存して読み込む

イメージをdocker save -o <文件名> <鏡像名>:<鏡像標簽>の形式で tarball として保存します。初心者向けチュートリアルの docker save を参照してください。

docker save -o ~/docker/build/centos_7.8.2003/centos_7.8.2003.tar centos:7.8.2003_v1 

画像-20211116095459570

tarball をロードしてイメージを生成します。

docker load --input ~/docker/build/centos_7.8.2003/centos_7.8.2003.tar

画像-20211116115612979

重複するイメージがすでに存在する場合、ロード コマンドは無効です。

画像-20211116115743282

イメージをリモートリポジトリにプッシュする

Docker はリモート倉庫にログインします。形式はdocker login --username=<用戶名> <倉庫地址>またはdocker login -u <用戶名> -p <密碼> <倉庫地址>です。

画像-20211116150001899

docker tag <鏡像ID> <遠程鏡像倉庫地址>:<鏡像版本號>タグ。

echo "イメージアドレスとバージョン番号をマーク" > /dev/null
docker タグ 66b1bc81e1f2 registry.cn-shanghai.aliyuncs.com/exposure/centos:7.8.2003_v1

画像-20211116150846001

docker push <遠程鏡像倉庫地址>:<鏡像版本號>リモート リポジトリにプッシュします。

echo "リモートリポジトリにプッシュ" > /dev/null
docker プッシュ registry.cn-shanghai.aliyuncs.com/exposure/centos:7.8.2003_v1

参考リンク

CSDN - Docker 用の一般的な CentOS7 イメージ

初心者向けチュートリアル - Docker コマンド

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

以下もご興味があるかもしれません:
  • Dockerfileを使用して独自のイメージを作成する方法
  • 各種Dockerイメージの作成方法の詳しい説明
  • Dockerイメージ作成の詳細な紹介
  • Dockerイメージの作成とプロジェクト全体のワンクリックパッケージングとデプロイ
  • 独自の Docker イメージを作成して Dockerhub にアップロードする方法
  • Dockerイメージの作成、アップロード、プル、デプロイを理解するための記事
  • Dockerを使用して分散lnmpイメージを作成する

<<:  24 の実用的な JavaScript 開発のヒント

>>:  CSSは親要素の下の最初の子要素を選択します(:first-child)

推薦する

ネイティブJSが様々なスポーツの均一な動きを実現

この記事では、ネイティブ JS で実装された均一なモーションを紹介します。その効果は次のとおりです。...

JavaScript で localStorage を使用する方法

.NET の世界に参入したい開発者であれば、何が可能なのかを知る必要があります。 .NET Fram...

Javascript 操作メカニズム イベントループ

目次1. 4つのコンセプト1. JavaScriptはシングルスレッドです2. タスクキュー3. 同...

非表示のフォームテキストを表示するJavaScript

この記事では、フォームの隠しテキストを表示するためのJavaScriptの具体的なコードを参考までに...

非常に詳細な Vue-Router のステップバイステップのチュートリアル

目次1. ルータビュー2. ルータリンク3. リダイレクト4. ルーティングエイリアス5. ルーティ...

Websocket+Vuexはリアルタイムチャットソフトウェアを実装します

目次序文1. 効果は図の通りです2. 具体的な実施手順1. Vuexの紹介2.webscoked実装...

MySQLクエリは、フィールドが数値とカンマではないことを指定します。

コアSQL文数字を含まない MySQL クエリ ステートメント: SELECT * FROM tes...

DockerにFastDFSをインストールする方法

画像をプルする docker pull season/fastdfs:1.2トラッカーを開始 doc...

MySQL の接続数が多すぎるエラーの原因と解決策

目次概要本日正午、開発およびテスト環境の MySQL サービスで接続数が多すぎるというエラーが報告さ...

Reactは適応性の高い仮想リストを実装する

目次変換前:変換後: 0x0の基本0x1 「固定高さ」の仮想リストを実装する原理:最適化: 0x2 ...

HTML における <meta> タグの使用に関する詳細な説明

私たちが作成する Web ページでは、より多くの人々に訪問してもらいたい場合、検索エンジンを使用して...

Alibaba Cloud Server の詳細な展開 (グラフィック チュートリアル)

最近、Web 開発のフロントエンドとバックエンドの技術を学んだので、その後の管理を容易にするためにプ...

一般的な XHTML タグの使用方法の紹介

XHTML には多くのタグがありますが、頻繁に使用されるのはごくわずかであり、習得する必要があるのは...

インスタンス化されたオブジェクトパラメータによるMySQLクエリ例の説明

この記事では、オブジェクト パラメータをインスタンス化して MySQL でデータをクエリする方法を紹...

Zabbix はどのようにして ssh 経由でネットワーク デバイス データを監視および取得するのでしょうか?

シナリオシミュレーション:ある会社の運用保守担当者は、以前購入した一連のネットワーク機器の光ポートの...