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)

推薦する

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

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

MySql クイック挿入数千万の大規模データの例

データ分析の分野では、データベースは私たちの強力な助けとなります。クエリ時間を受け入れるだけでなく、...

Nginx の realip モジュールの使い方の基礎学習

序文nginx モジュールには、公式とサードパーティの 2 種類があります。nginx のインストー...

Vue+Websocketはチャット機能を実装するだけです

この記事では、チャット機能を簡単に実装するためのVue+Websocketの具体的なコードを参考まで...

カンマで区切られたmysqlの分割関数の実装

1: 文字列を区切るためのストアドプロシージャを定義する 区切り文字 $$ `mess`$$ を使う...

Zabbix WEB 監視実装プロセス図

Zabbix独自のWEBインターフェースを例に、Web監視の設定を行います。環境: zabbix4....

docker-machineの使い方の詳しい説明

Docker-machineはDockerが公式に提供しているDocker管理ツールです。これは d...

VUEはG2チャートを使用した実装を導入します

目次G2チャートについて使用テンプレートで使用される完全なコード (棒グラフ)世界地図を追加するG2...

MySQL 8.0 の新機能 - 管理ポートの使用の概要

目次序文接続管理追加の接続管理ポート要約する序文皆さんの多くは、次のようなエラー メッセージに遭遇し...

HTML のテキストエリアの改行問題の概要

最近、Textrea に転送したときに、データが本当に行ごとに保存できるかどうかという問題に遭遇しま...

Gitlab-ci を使用してリモート マシンに継続的にデプロイする方法 (詳細なチュートリアル)

簡単に言うと、今日は Gitlab-CI を使用してリモート サーバーに自動的にデプロイする方法につ...

React+Amapは緯度と経度をリアルタイムで取得し、住所を特定します

目次1. マップを初期化する2. マップポイント3. 位置決めを有効にする4. マップの変更を監視す...

Linux で 1 つのファイルの内容を別のファイルの末尾にコピーする

問題の説明:たとえば、ファイル 11 の内容は次のとおりです。こんにちはファイル22の内容は次のとお...

Reactにおけるキーの役割の詳細な説明

目次質問: ボタンをクリックすると、スパンの色が赤に変わりますか?上記の問題を分析します。 2番目の...

透明な入力ボックスにアイコンを追加する HTML コード

最近、弁護士推薦のウェブサイトを作成していたのですが、検索ボックスに問題がありました。検索ボックス内...