Dockerを使用してクローンリポジトリを使用してGitイメージを構築する

Dockerを使用してクローンリポジトリを使用してGitイメージを構築する

概要

私は 1 年以上 Docker を使用しています。最近、サービスをすばやくオーケストレーションしているときに、シェル スクリプトで使用されている git がまだネイティブであることに気付きました。

ここに画像の説明を挿入

そこでgitをコンテナ化することに決め、dockerhubで検索したところ、ダウンロード量が比較的多いこのイメージを見つけました。

ここに画像の説明を挿入

dockerfileを見た後、ニーズに適していないと感じました

ここに画像の説明を挿入

ここではボリュームや ssh は提供されていません。リポジトリをホスト マシンにマップすることも、プライベート リポジトリをクローンする機能もありません (ささやき声: どちらも可能ですが、不便です)。他の gitclient イメージも同様です。

ここに画像の説明を挿入
私には車輪の再発明しかできない。

ミラーアドレス

この記事のイメージは dockerhub にプッシュされています。必要に応じて直接使用できます: https://hub.docker.com/r/wuliangxue/git

車輪

まず、Docker Hub アカウントが必要です。次に、Docker を使用してサーバーにログインし、イメージを Docker Hub リポジトリにプッシュします。これにより、将来の移行が容易になります。

ここに画像の説明を挿入

任意のディレクトリにgit.dockerfileファイルを作成する

ここに画像の説明を挿入

Dockerfileに以下を入力します

ここに画像の説明を挿入

ここで簡単に説明しますと、当初はUbuntu 18.04ベースのミラーが提供されていましたが、サイズが大きすぎたため、Alpineに置き換えられました。国内ユーザーは Linux ソフトウェア ソースを国内ミラーに切り替える必要があります。そうしないと、ソフトウェアのインストール時にさまざまな問題が発生します。このイメージ自体はプロジェクトのクローン作成用なので、git と ssh のみがインストールされます。以下は、プライベート ウェアハウスのクローンを作成し、対応する ssh ディレクトリ ボリュームを開くための準備です。作業ディレクトリが設定されているため、git clone 時にデフォルトのプロジェクトは/git/repoディレクトリにあります。ミラーを使用する場合は、このディレクトリをマウントするだけです。

イメージを構築する

次のコマンドを入力します: docker build -t wuliangxue/git:0.1-alpine -f git.dockerfile .

ここに画像の説明を挿入

「Successfully」と表示されたら、イメージが正常に構築されたことを意味します。

ここに画像の説明を挿入

ここでは、Ubuntu 18.04 をベースに構築されたイメージのサイズを比較します。タグ 0.1 のイメージは Ubuntu 18.04 [187M] をベースに構築されており、タグ 0.1-alpine のイメージは alpine:3.12 [30.1M] をベースに構築されています。

ここに画像の説明を挿入

ミラーの使用

まず、作成したイメージを使用してパブリックリポジトリをクローンし、次のコマンドを実行します。

docker run --rm --name git \
	-v "$(pwd)":/git/repo wuliangxue/git:0.1-alpine \
	git クローン https://github.com/docker-library/mysql.git 

ここに画像の説明を挿入

このリポジトリはクローンされました。

ここに画像の説明を挿入

クローンの詳細を表示する場合は、前のコマンドに-itを追加できます。

docker run -it --rm --name git \
	-v "$(pwd)":/git/repo wuliangxue/git:0.1-alpine \
	git クローン https://github.com/docker-library/mysql.git 

ここに画像の説明を挿入

プライベート倉庫を複製する必要がある場合はどうすればよいですか? ?
ssh 公開鍵と秘密鍵をコンテナにマウントできます。
次のコマンドを実行します [デモンストレーションの目的で、公開鍵と秘密鍵を現在のディレクトリに直接配置していることに注意してください]

docker run -it --rm --name git \
-v "$(pwd)":/git/repo \
-v "$(pwd)/id_rsa":/root/.ssh/id_rsa \
-v "$(pwd)/id_rsa.pub":/root/.ssh/id_rsa.pub \
wuliangxue/git:0.1-alpine git クローン [email protected]:wuliangxue/douyu.git 

ここに画像の説明を挿入

ここで-itパラメータを追加する必要があることに注意してください。これは、プライベート リポジトリを初めてクローンするときに、git はアドレスの信頼性を知らないため (known_hosts ファイルに記録がなく、最初の使用ではそのようなファイルがない)、要求されるためです。 -itパラメータがなく、ターミナル対話機能が有効になっていない場合、クローンは直接失敗します。

「yes」と入力して Enter キーを押すと、プライベート ウェアハウスが複製されます。

ここに画像の説明を挿入

最後に、このホイールを Dockerhub にプッシュして、次回サーバーを変更するときに直接プルして使用できるようにします。

ここに画像の説明を挿入

これで、Docker を使ってクローンリポジトリを使用して Git イメージを構築する方法についての記事は終了です。Docker による Git イメージの構築の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker buildx を使用してマルチプラットフォーム イメージをビルドし、プライベート リポジトリにプッシュする方法
  • Docker用国産イメージウェアハウスの使い方
  • Jenkins は Docker イメージを構築し、Harbor ウェアハウスにプッシュします
  • docker-maven-pluginはイメージをパッケージ化し、プライベートウェアハウスにアップロードします。
  • Dockerイメージリポジトリの使い方
  • Docker プライベート イメージ リポジトリの Alibaba Cloud 展開手順
  • Dockerコンテナ練習用イメージウェアハウス

<<:  HTML テーブルタグチュートリアル (20): 行の背景色属性 BGCOLOR

>>:  読み込み進捗バーのネイティブ JS 実装

推薦する

タイプライター効果を実現する純粋な js

この記事の例では、タイプライター効果を実現するためのjsの具体的なコードを参考までに共有しています。...

Nginx ポート競合を解決するトラブルシューティング方法の例

問題の説明データ転送に Nginx を使用し、フロントエンドとバックエンドが分離された Spring...

LinuxでJenkinsのパスワードを忘れる方法

1.Jenkinsのインストール手順: https://www.jb51.net/article/1...

HTML の <input> タグの詳細な説明と、それを無効にする方法

定義と使用法<input> タグはユーザー情報を収集するために使用されます。 type ...

SQL 実践演習: オンライン モール データベース ユーザー情報データ操作

オンラインショッピングモールデータベース - ユーザー情報データ運用プロジェクトの説明電子商取引の台...

Dockerでイメージ情報を表示する方法

この記事では、Dockerでイメージ情報を表示する方法を学ぶ必要があります。 1. imagesコマ...

Linuxにソフトウェアをインストールするいくつかの方法の詳細な説明

1. RPM パッケージのインストール手順: 1. soft.version.rpm などの対応する...

MySQL でローカル ユーザーを作成し、データベース権限を付与する方法の例

序文MySQL をインストールすると、通常はスーパーユーザー root を作成します。多くの人がこの...

MySQLのインデックスシステムがB+ツリーを使用する理由の分析

目次1. インデックスとは何ですか? 2. インデックスはなぜ必要なのでしょうか? 3. インデック...

css n番目から始まるすべての要素を取得する

具体的なコードは次のとおりです。 <div id="ボックス"> &...

JavaScript が Xiaomi のカルーセル効果を模倣

この記事は、透明度を変えてカルーセルにするXiaomiカルーセルを真似て書いたものです。初心者なので...

MySQL の高度な機能 - データ テーブル パーティショニングの概念とメカニズムの詳細な説明

目次パーティション分割メカニズムSELECTクエリINSERT操作DELETE操作更新操作パーティシ...

Vueのフロントエンドとバックエンドのポートの不一致の問題を解決する

Vue のフロントエンドとバックエンドのポートが一致していませんconfig index.jsファイ...

Bootstrapグリッドの垂直および水平配置の詳細な説明

目次1. Bootstrap グリッドレイアウト2. 垂直方向の配置2.1 行タグの垂直方向の配置を...

MySQL の if 関数の正しい使い方の詳細な説明

今日私が書こうとしている内容では、プログラムは 7 時間近く実行され、データベースに 1,000 万...