Dockerfile 使用 SSH
如果在书写 Dockerfile
时,有些命令需要使用到 SSH 连接,比如从私有仓库下载文件等,那么我们应该怎么做呢?
Dockerfile
使用 SSH
Dockerfile
文件配置
为了使得 Dockerfile
文件中的命令可以使用 SSH 连接,需要先进行如下配置:
# 1. 安装 openssh-client 和 git,具体使用的系统包管理器取决于你的基础镜像是什么
RUN apk add --no-cache openssh-client git
# 2. 下载服务器的公钥指纹,为了避免SSH连接时命令行的 'unknown host' 提示确认(因为我们无法对于Docker build过程的控制台做出响应)
# 这里以 github 为例
RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts
在以上配置完成之后,Dockerfile
中的 RUN
命令就可以像下面这样使用 SSH 了:
# RUN 命令使用 `--mount` 选项的 `type=ssh` 参数值
RUN --mount=type=ssh #后面像平常一样书写命令
配置文件 Dockerfile
现在已经写好了,接下来我们要做的就是构建镜像。
docker build
构建镜像
跟往常不一样,由于 Dockerfile
里使用了 SSH,所以这次在使用 docker build
构建镜像前需要一些额外的工作:
- 将要使用的 SSH Key 添加到 ssh-agent 中:
# 在后台启动一个 ssh-agent
eval "$(ssh-agent -s)"
# 将要使用的 SSH 私钥文件 添加到 ssh-agent 中
ssh-add ~/.ssh/your-ssh-private-key-file-needed-in-dockerfile
- 开启 Docker Buildkit 功能:
DOCKER_BUILDKIT = 1
- 使用
Dockerfile
进行构建:# 实际上是 docker build --ssh default=$SSH_AUTH_SOCK . 的简写
# 环境变量 $SSH_AUTH_SOCK 是SSH代理连接套接字
docker build --ssh default .
以上介绍的这些内容足以应付实践中绝大多数场景,可是当 Dockerfile
中的多个命令分别需要使用不同的 SSH 连接时,就束手无措了。
Dockerfile
使用多个 SSH
在 Dockerfile
中使用多个 SSH 连接与在 Dockerfile
使用单个 SSH 连接的配置是一样的,唯一不同的是当使用 RUN
命令时,需要更具体地指出使用哪个 SSH 连接:
# RUN 命令使用 `--mount` 选项的 `id=xxx` 参数值来指定使用那个 SSH 连接
RUN --mount=type=ssh,id=a_identifier #后面像平常一样书写命令
RUN --mount=type=ssh,id=another_identifier #后面像平常一样书写命令
对于以上这样的 Dockerfile
,当使用 docker build
构建镜像时我们就需要明确地指出 Dockerfile
中写的每个 ssh 连接标识符是什么:
# docker build 命令的 --ssh 选项参数值既可以是 `$SSH_AUTH_SOCK` 也可以是 ssh 私钥文件路径
DOCKER_BUILDKIT=1 docker build --ssh a_identifier=$SSH_AUTH_SOCK --ssh another_identifier=~/.ssh/your-ssh-private-key-file-path .
下图展示了启动 ssh-agent 后环境变量 $SSH_AUTH_SOCK
的值情况:
事实上,对于 Dockerfile
文件中的 RUN
命令,如果我们只写 RUN --mount=type=ssh
而不指定 ssh 连接 id,Docker 会认为其使用的标识符就是 default
;这也就解释了在先前部分例子中,我们在 docker biuld --ssh default .
命令行中使用的 default
是个什么东西。
参考
Dockerfile 使用 SSH的更多相关文章
- 使用Dockerfile创建ssh服务的镜像02
使用Dockerfile创建ssh服务的镜像02 1:创建工作目录---一个镜像的所有文件都放这个目录下 ubuntu@ubuntu:~$ mkdir sshd_ubuntu ubuntu@ubunt ...
- docker使用Dockerfile构建ssh容器
一.使用Dockerfile构建centos 1.创建 Dockerfile mkdir centos # 创建一个目录存放之后的Dockerfile,目录名无所谓 cd centos # 进入目录 ...
- Dockerfile分享之SSH Server
版权声明:本文由姚俊刚原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/84 来源:腾云阁 https://www.qclou ...
- Centos7 Docker 多主机 容器互连--基于OVS
来一张自己画的图,mark:2016年6月27日17:09:14 自己理解,如有错误 多谢指教. centos7, 部署OVS和docker.以及基于centos6.8的ssh images 命令. ...
- [docker]一些经常或不经常用到的镜像启动方法-一些常用的docker启动方式
一些经常或不经常用到的镜像启动方法 设置容器的TZ另一种办法 参考: https://github.com/spujadas/elk-docker/blob/master/start.sh ## ov ...
- docker及lvs负载
1.分别使用lxc容器和docker容器搭建nginx服务,能够正常访问到容器内的web服务 下载docker-ceyum仓库至 /etc/yum.repos.d/目录中,使用yum安装docker- ...
- 【葵花宝典】一天掌握Docker
第1章Docker 概述 1-1 Docker是什么 没有虚拟化技术的原始年代 我们仔细想想,在没有计算虚拟化技术的"远古"年代,如果我们要部署一个应用程序(Application ...
- DockerClient端与DockerDaemon的通信安全
DockerClient端与DockerDaemon的通信安全 容器的安全性问题的根源在于容器和宿主机共享内核.如果容器里的应用导致Linux内核崩溃,那么整个系统可能都会崩溃.与虚拟机是不同的,虚拟 ...
- Docker安全及日志管理
Docker安全及日志管理 目录 Docker安全及日志管理 一.Docker容器与虚拟机的区别 1. 隔离与共享 2. 性能与损耗 3. 总结 二.Docker存在的安全问题 1. Docker自身 ...
随机推荐
- 使用jquery-webcam插件,实现人脸采集并转base64
项目需求:在ie或chrome浏览器下,调用电脑摄像头(确保使用的是笔记本电脑,或者摄像头功能正常使用的台式机),进行人脸图像采集预览,并将图片的base64码传入到后台进行后续操作.该demo适用于 ...
- 从0搭建vue后台管理项目到颈椎病康复指南(一)
网上搜索了很久Vue项目搭建指南,并没有找到写的比较符合心意的,所以打算自己撸一个指南,集合众家之所长(不善于排版,有点逼死强迫症,如果觉得写的有问题,可以留言斧正,觉得写的太差的,可以留言哪里差, ...
- 【Android开发】View 转 Bitmap
public static Bitmap loadBitmapFromView(View v) { int w = v.getWidth(); int h = v.getHeight(); Bitma ...
- 牛客网-剑指Offer 二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- vue多个数据不一样的表格导出到同一张excel里面
刚来公司第二天, 甩了个需求, 把两个不同表格的数据 导出到同一个excel中 ........额,好吧 你要说,两个表格数据差不多, 直接合并数据导出就行: async function getDa ...
- Java 多选框的全选、多选、反选(JQuery 实现)
jQuery 实现全选.多选.反选 学习内容: 需求 总结: 学习内容: 需求 jQuery 实现全选.多选.反选 实现代码 <!DOCTYPE html> <html lang=& ...
- python 简要小结
初学python 简单总结部分内置函数 将两个数组合并为元组:zip() 解压:zip(*zip) range(a,b,c) 取值范围 起始:a 结尾:b 间隔:c (参数不能为空否则 ...
- vue引入swiper
https://github.com/surmon-china/vue-awesome-swiper/blob/master/examples/03-pagination.vue https://su ...
- ubuntu连接不到WiFi
ubuntu连接不到WiFi 在软件与更新中,进入附加驱动. 搜到对应的无线网卡驱动,安装后在重启电脑.
- SpringMVC的数据响应-回写数据
1.直接返回字符串 其他具体代码请访问chilianjie @RequestMapping("/report5") public String save5(HttpServletR ...