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 実装

推薦する

オンラインMySQLオプティマイザの誤判断によって発生した低速クエリイベントを記録する

序文:非常に遅いクエリとリクエストのタイムアウトのアラートを受け取りました。メトリックを通じて My...

MySQLのデッドロックとログに関する詳細な説明

最近、MySQL オンラインでいくつかのデータ異常が発生しましたが、すべて早朝に発生しました。ビジネ...

検索テキストボックスがフォーカスを外れたときにテキストの位置がジャンプする問題の解決方法

検索テキストボックスにテキストを設定すると、フォーカスを外すと位置がジャンプしますコードをコピーコー...

MySQL コマンドラインでよく使われる 18 個のコマンド

日常的なウェブサイトの保守と管理では、多くの SQL ステートメントが使用されます。熟練して使用する...

純粋なCSS3で実装されたネオンライト効果

達成される効果は次のとおりです。 マウスがボタン内に移動すると、ネオンライトのような効果が生成され、...

js を使用してネットワークカメラを呼び出し、一般的なエラーを処理します

最近、業務上の理由により、Web ページ上のさまざまなネットワーク カメラにアクセスしてデバッグする...

Dockerコンテナの入退出方法の詳細な説明

1 Dockerサービスを開始するまず、docker サービスを開始する方法を知っておく必要がありま...

HTMLコードに基づく画像断片化読み込み機能の実装

今日は断片化された画像の読み込み効果を実装します。効果は次のとおりです。 これを 3 つのステップで...

CSS3 で translate と transition を使用する方法

translate と transition は非常に強力で、習得するのは不可能だといつも感じていま...

WebプロジェクトのDockerデプロイメントの実装

前回の記事では、docker サービスをインストールしました。引き続き、Web プロジェクトのデプロ...

JavaScript 円グラフの例

描画効果実装コードJavaScript var キャンバス = document.getElemen...

メタタグにおける http-equiv 属性の使用の概要

metaはhtml言語のhead領域にある補助タグです。おそらく、これらのコードは不要だと思うかもし...

MySQLのファジークエリのような遅い速度を解決する方法

質問: インデックスは作成されているのに、Like ファジー クエリがまだ遅いのはなぜですか?インデ...

波効果を作成するための CSS のトリック

純粋な CSS を使用して波の効果を実現することは、常に非常に困難でした。 波形曲線を実現するにはベ...

Linuxの貼り付けコマンドの使い方

01. コマンドの概要貼り付けコマンドは各ファイルを列ごとに結合します。これは、2 つの異なるファイ...