使用Docker构建一个Git镜像,用来clone仓库

2023-05-16

概述

使用docker已经有一年多了,最近意识到,我在快速编排服务的时候,shell脚本里用到的git还是原生的
在这里插入图片描述
于是打算也将git容器化,在dockerhub上搜罗了一筐,找到这个镜像下载量比较高
在这里插入图片描述
进去看了dockerfile后,感觉不太适合需求
在这里插入图片描述
这里没有提供卷,也没有提供ssh,既不能把仓库映射到宿主机,也没有提供clone私有仓库的功能(小声bb:都可以做到,但是不方便)。其他的gitclient镜像也都大同小异。
在这里插入图片描述
只能自己造个轮子了。

镜像地址

本文的镜像以push到dockerhub,有需要可直接使用: https://hub.docker.com/r/wuliangxue/git

轮子

首先需要一个dockerhub的账户,然后在服务器上使用docker登录,以便于把镜像push到dockerhub仓库,为日后迁移时提供便利。
在这里插入图片描述
随便在一个目录下,创建git.dockerfile文件
在这里插入图片描述
在dockerfile文件中,输入以下内容
在这里插入图片描述
这里简单说一下,原先提供了一个基于ubuntu 18.04的镜像,但是体积太大了,所以换成了alpine。国内用户需要把Linux 软件源切换成国内的镜像,否则在安装软件时,会出各种问题。这个镜像本身是为了clone项目,所以只安装git和ssh。后面就是为了clone私有仓库做准备,并且开放对应的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】
在这里插入图片描述

使用镜像

首先,使用刚才构建的镜像clone一个公有仓库,执行下面的命令

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

在这里插入图片描述
这个仓库被clone下来了。
在这里插入图片描述
如果你想查看clone的细节,可以在刚才的那条命令中,加上-it

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

在这里插入图片描述
当需要clone私有仓库时,该怎么办呢??
可以把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 clone git@gitee.com:wuliangxue/douyu.git

在这里插入图片描述

注意,这里必须加参数-it,因为第一次clone私有仓库时,git不知道这个地址的真实性(known_hosts文件没有记录,第一次使用也没有这个文件),因此会询问,如果没有参数-it,没有开启终端交互功能,那么clone将会直接失败。

输入yes,回车即可把私有仓库clone下来。
在这里插入图片描述
最后,再把这个轮子push到dockerhub,以便下次换服务器时,直接pull使用。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Docker构建一个Git镜像,用来clone仓库 的相关文章

随机推荐

  • 算法——100瓶水,一瓶有毒,有一种试纸...

    问题描述 100瓶水 xff0c 一瓶有毒 xff0c 有一种试纸 xff0c 不过需要一个小时才能出结果 xff0c 问最少需要几片试纸才能在一小时内找到有毒的那一瓶 答案 span class token number 7 span 算
  • 基于muduo网络库的集群聊天系统(C++实现)

    文章目录 项目概述业务流程 数据模块表的设计数据库模块设计 通信格式网络和业务模块网络模块网络模块和业务模块解耦合业务模块注册业务登录业务加好友业务一对一聊天业务创建群业务加入群业务群聊业务注销业务 服务器集群跨服务器通信集群聊天服务器的思
  • linux设备驱动原理与本质

    任何计算机系统都是软件和硬件的结合体 xff0c 如果只有硬件而没有软件 xff0c 则硬件是没有灵魂的躯壳 xff1b 如果只有软件没有硬件 xff0c 则软件就是一堆无用的字符 在底层硬件的基础上 xff0c 操作系统覆盖一层驱动 xf
  • pycharm配置可视化界面流程简介

    一 安装QT Designer 在pycharm的终端里面输入如下命令 span class token comment 安装pyqt5 span pip install PyQt5 span class token comment 安装p
  • 内存——CPU、内存以及磁盘是如何交互的

    文章目录 内存的存储SRAMDRAMDRAM内部以及与内存控制模块的交互 xff08 重点 xff09 DRAM与内存存储CPU和内存的交互 xff08 重点 xff09 磁盘磁盘和CPU 内存的交互 局部性参考文献 之前在介绍linux
  • libco —— 安装与使用

    文章目录 libco的安装libco库的简单使用参考文献 libco的安装 可以直接从 Tencent 的 GitHub 仓库中拉取源码 xff1a ubuntu 64 VM 0 2 ubuntu libco span class toke
  • 为什么我的云服务器不能绑定公网 ip ?

    文章目录 云服务器的部署 xff1a 数据中心NAT协议开头问题的答案参考文献 写在前面 昨天呢 xff0c 在校招群里的小伙伴问了我们一个问题 xff0c 让我们帮给看看 xff1a 一开始呢 xff0c 博主按照经验呢跟他说是端口号被占
  • 汇编 —— 算术和逻辑操作

    文章目录 加载有效地址leaq 练习题练习题答案 一元操作符 amp 二元操作符一元 amp 二元 练习题练习题答案 移位操作移位练习题练习题答案 特殊的算数操作符练习题练习题答案 参考文献 写在前面 xff1a 从腾讯实习回来之后 xff
  • clang-format安装配置与vscode支持

    文章目录 calng format安装centos下clang format安装ubuntu下clang format的安装vscode支持clang format clang format使用参考文献 calng format安装 cen
  • 分布式共识算法 —— Raft详解

    文章目录 分布式共识算法顺序一致性线性一致性因果一致性 Raft 算法原理概览选举机制新节点加入leader 掉线处理多个 follower 同时掉线 日志复制 参考文献 分布式共识算法 首先我们先明确这个问题 xff1a 为什么需要分布式
  • container_of 根据成员变量获得包含其的对象的地址!

    写在前面 本系列文章的灵感出处均是各个技术书籍的读后感 xff0c 详细书籍信息见文章最后的参考文献 CONTAINER OF 在书中发现一个很有意思的宏 xff0c 以此可以衍生出来其很多的用法 xff0c 这个宏可以根据某个成员变量的地
  • Linux 内核观测技术BPF

    BPF简介 BPF xff0c 全称是Berkeley Packet Filter xff08 伯克利数据包过滤器 xff09 的缩写 其诞生于1992年 xff0c 最初的目的是提升网络包过滤工具的性能 后面 xff0c 随着这个工具重新
  • bpftrace 指南

    文章目录 0 bpftrace0 1 bpftrace组件0 2 bpftrace 帮助信息0 3 bpftrace 工具速览表0 4 bpftrace 探针0 4 1 tracepoint0 4 2 usdt0 4 3 kprobe和kr
  • make px4_sitl_default gazebo编译报错解决办法

    PX4无人机ROS下仿真 xff0c 下载Fireware后执行make px4 sitl default gazebo编译 xff0c 编译过程中出现如下错误 xff1a 错误原因是两个package没有安装 xff1a gstreame
  • 理解实时操作系统与裸机的区别

    早期嵌入式开发没有嵌入式操作系统的概念 xff0c 直接操作裸机 xff0c 在裸机上写程序 xff0c 比如用51单片机基本就没有操作系统的概念 通常把程序分为两部分 xff1a 前台系统和后台系统 简单的小系统通常是前后台系统 xff0
  • 4.1.2.HTTP报文格式解析

    不同的请求方式 xff0c 他们的请求格式可能是不一样的 xff0c 请求格式就是我们所说的的报文格式 但是 xff0c 通常来说一个HTTP请求报文由请求行 xff08 request line xff09 请求头 xff08 heade
  • apt-get autoremove 命令你敢不敢用?

    apt get autoremove 命令你敢不敢用 xff1f 用apt时看到有提示 xff0c 说有些软件包已经不再被需要 xff0c 可以使用 autoremove 命令删除 xff0c 我是一个希望保持系统简洁性的人 xff0c 当
  • 英伟达(NVIDIA)系列显卡(GPU)技术指标对比排行

    性能概览 关于N卡架构发展史详见本人前篇博客 点击打开链接 Pascal xff08 帕斯卡 xff09 架构 显卡名称cuda核心数量主频 xff08 MHz xff09 超频 xff08 MHz xff09 存储速度显存配置位宽带宽 G
  • Cmake gcc make makefile 区别以及联系

    作者 xff1a 辉常哥 链接 xff1a https www zhihu com question 27455963 answer 89770919 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xff0c 非商业
  • 使用Docker构建一个Git镜像,用来clone仓库

    概述 使用docker已经有一年多了 xff0c 最近意识到 xff0c 我在快速编排服务的时候 xff0c shell脚本里用到的git还是原生的 于是打算也将git容器化 xff0c 在dockerhub上搜罗了一筐 xff0c 找到这