Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用Drone.io构建Docker镜像

使用Drone.io构建Docker镜像
EN

Stack Overflow用户
提问于 2014-07-25 01:00:18
回答 3查看 17.9K关注 0票数 10

我在亚马逊网络服务中运行自己的Drone实例,我希望它能构建一个docker镜像并将其推送到我的存储库中。Drone在docker容器中运行它的构建环境,所以我基本上想从docker容器内部构建docker镜像。我找到了this,看到你可以绑定安装码头插座。我如何使用无人机做到这一点?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -it -v /var/run/docker.sock:/var/run/docker.sock mycompany/buildimage

这样我就可以从我的容器内部运行docker build。或者你知道另一个CI工具,我可以运行我的自定义脚本并构建docker镜像。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-25 01:40:47

答案已过期,请查看下面@Brad的解决方案,仅供参考

在你的mycompany/buildimage

安装docker客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl https://get.docker.io/builds/Linux/x86_64/docker-latest -o /usr/local/bin/docker
chmod +x /usr/local/bin/docker 

然后,您可以使用docker主机环境运行docker build命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker -H unix:///var/run/docker.sock build .

为了方便和透明,通常可以设置DOCKER_HOST环境。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ export DOCKER_HOST="unix:///var/run/docker.sock"
$ docker build .

不熟悉无人机安装,但这是docker提供的方式

票数 1
EN

Stack Overflow用户

发布于 2016-08-21 00:49:21

请注意,此答案适用于drone版本0.5

您可以使用Docker plugin构建和发布Docker镜像,将其作为构建管道中的一个步骤。在下面的示例.drone.yml文件中,我添加了一个使用docker插件的发布步骤。请注意,您需要将foo/bar替换为要发布到的DockerHub存储库的名称。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pipeline:
  build:
    image: golang
    commands:
      - go build
      - go test
  publish:
    image: plugins/docker
    repo: foo/bar

在许多情况下,您可能希望将此步骤的执行限制在某些分支上。这可以通过添加运行时条件来完成:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  publish:
    image: plugins/docker
    repo: foo/bar
    when:
      branch: master

您需要向drone提供Docker注册表的凭据,才能发布drone。这些凭据可以直接在yaml文件中声明,但通常不建议在yaml中以纯文本形式存储这些值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  publish:
    image: plugins/docker
    repo: foo/bar
    username: johnsmith
    password: pa55word
    when:
      branch: master

您也可以使用内置的秘密存储来提供凭据。可以使用Drone命令行实用程序将秘密添加到每个存储库的秘密存储中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  export DRONE_SERVER=http://drone.server.address.com
  export DRONE_TOKEN=...

  drone secret add --image plugins/docker \
    octocat/hello-world DOCKER_USERNAME johnsmith

  drone secret add --image plugins/docker \
    octocat/hello-world DOCKER_PASSWORD pa55word

在上面的示例中,--image标志用于限制我们将Docker凭证公开给哪些秘密,我们将其设置为docker插件。octocat/hello-world参数表示您的GitHub存储库名称,应该替换为正确的值。

Mouting Voume(备用方法)

您还询问是否可以将Docker套接字挂载到您的构建环境中。这是可能的,但需要一些额外的权限(在UI中将您的构建标记为受信任)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pipeline:
  build:
    image: docker
    commands:
      - docker build ...
      - docker run ...
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

这种方法的唯一问题是,如果构建失败,您可能无法清理在构建过程中创建的映像或容器。

此外,如果您的存储库是公共的并接受拉取请求,则不应使用此方法。恶意拉入请求可能会利用主机Docker套接字向您的构建环境进行攻击,从而允许访问主机。

票数 22
EN

Stack Overflow用户

发布于 2014-09-03 18:34:55

我写了 ,我还解决了一些常见的问题。

请记住,Drone的构建环境本身就是Docker容器,这意味着您将处于Docker-in-Docker的情况下: Docker不能在Docker容器中正确运行。公认的解决方案是使用wrapdocker脚本启动内部Docker实例。我的最终设置如下所示:

对于Drone,您需要在构建环境的Dockerfile中添加类似以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# install docker
RUN apt-get install -y apparmor  
RUN curl -s https://get.docker.io/ubuntu/ | sudo sh  
ADD wrapdocker /usr/local/bin/wrapdocker
RUN chmod +x /usr/local/bin/wrapdocker

这里假设wrapdocker脚本在本地可用。或者,您可以直接从github获取wrapdocker。然后,给出一个如下的.drone.yml文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
image: http://my-docker-registry/my-docker-image:version  
script:  
  - ./.drone/build.sh

您的build.sh将如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
set -e  
cd /var/cache/drone/src/path/to/app

# [pass tests here]

wrapdocker &  
sleep 5

docker build -t docker-registry/image-name .  
docker push docker-registry/image-name

这只是一种方法。唯一的限制是wrapdocker用于启动构建容器中的Docker守护进程。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24946414

复制
相关文章
使用Docker构建ZooKeeper镜像
这篇文章中我们将使用 Docker 创建 Zookeeper 镜像,包括如何将 Zookeeper 安装到容器,如何配置 ZooKeeper 应用程序以及如何在宿主机和容器之间共享数据卷。
smartsi
2020/08/31
3K0
Docker入门:使用Dockerfile构建Docker镜像
我们通过Docker build命令以及Dockerfile把我们的应用以及应用依赖的资源及环境打包成Docker镜像,帮助我们在各种我们需要的环境中部署应用,让我们不再担心环境差异带来的应用部署问题
KenTalk
2023/04/07
9.5K0
Docker入门:使用Dockerfile构建Docker镜像
使用Maven插件构建Docker镜像
如果遇到镜像下载不下来的情况,需要修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值,然后重启docker服务:
macrozheng
2019/07/22
1.4K0
使用Maven插件构建Docker镜像
docker构建镜像
Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像。
超蛋lhy
2018/10/09
8840
Docker 构建镜像
Dockerfile由一系列指令和参数组成。每条指令都必须为大写字母,切后面要跟随一个参数。Dockerfile中的指令会按照顺序从上到下执行,所以应该根据需要合理安排指令的顺序。每条指令都会创建一个新的镜像层并对镜像进行提交。Docker大体上按照如下流程执行Dockerfile中的指令。
程序员果果
2019/05/28
1.3K0
构建 docker 镜像
通过 Dockerfile 可以快速构建镜像,而通过 commit 生成镜像可以解决应用在部署过程中有大量交互内容以及难以通过 Dockerfile 构建的问题。
chen1900s
2020/05/29
1K0
构建 docker 镜像
使用GitLab构建Docker镜像并托管
容器化正迅速成为在云环境中打包和部署应用程序的最常用方法。它提供的标准化,以及其资源效率和灵活性,使其成为现代DevOps思维模式的重要推动者。当您的应用程序和微服务完全集装箱化时,许多有趣的云本机部署,编排和监控策略都成为可能。
司徒永哥
2018/10/16
8.4K0
使用GitLab构建Docker镜像并托管
容器化正迅速成为在云环境中打包和部署应用程序的最常用方法。它提供的标准化,以及其资源效率和灵活性,使其成为现代DevOps思维模式的重要推动者。当您的应用程序和微服务完全集装箱化时,许多有趣的云本机部署,编排和监控策略都成为可能。
司徒永哥
2018/08/06
4.5K0
使用GitLab构建Docker镜像并托管
Docker构建Tomcat镜像+Nginx镜像
Dockerfile是由一组指令组成的文件,每条指令对应linux中一条命令,Docker程序将读取Dockerfile中的指令生成指定镜像。 Dockerfile大致结构:基础镜像信息、维护者信息、镜像操作指令、容器启动时执行指令。每行支持一条指令,每条指令可以携带多个参数,支持以 # 开头的注释。 Dockerfile操作指令:
星哥玩云
2022/07/19
2.9K0
Docker构建Tomcat镜像+Nginx镜像
谈谈 Docker 镜像构建
容器化部署越来越多的用于企业的生产环境中,如何构建可靠、安全、最小化的 Docker 镜像也就越来越重要。本文将针对该问题,通过原理加实践的方式,从头到脚帮你撸一遍。
iMike
2019/07/24
1.3K0
谈谈 Docker 镜像构建
docker构建镜像- Dockerfile
ps :cmd 会被外部参数覆盖,add只能解压tar包 busybox测试镜像打包 dockerfile 配置 FROM busybox MAINTAINER ops.attacker.club
以谁为师
2019/05/30
1.2K0
使用 Docker 开发 - 使用多阶段构建镜像
多阶段构建是一个新特性,需要 Docker 17.05 或更高版本的守护进程和客户端。对于那些努力优化 Dockerfiles 并使其易于阅读和维护的人来说,多阶段构建非常有用。
用户8803964
2021/07/05
9430
使用 Docker Multi-stage 高效构建镜像
使用 Docker 时,构建高效的 image 镜像是非常重要的,image 最好尽可能的小一点,这样实际部署的时候才能更高效。
dys
2020/08/28
1.6K0
使用 Docker Multi-stage 高效构建镜像
使用Docker Buildx构建多平台镜像
默认情况下,x86_64平台只能构建x86_64镜像,如果需要在x86_64平台构建多平台镜像(比如ARM64),我们可以用Docker官方提供的Buildx工具来完成多平台镜像构建。
星哥玩云
2022/08/18
1.4K0
使用Docker Buildx构建多平台镜像
使用 docker buildx 构建多 CPU 架构镜像
在工作中,遇到了需要将应用程序打包成 Docker 镜像并同时运行在不同的 CPU 架构(X86 和 ARM)的环境中。
donghui
2020/05/18
3.9K0
使用Dockerfile为SpringBoot应用构建Docker镜像
在容器构建过程中执行的命令,我们可以用该命令自定义容器的行为,比如安装一些软件,创建一些文件等,格式:
macrozheng
2019/07/22
1.2K0
使用Dockerfile为SpringBoot应用构建Docker镜像
使用Dockerfile构建镜像-Docker for Web Developers(5)
1.理解Dockerfile语法 语法命令 命令功能 举例 FROM 所有的dockerfile都必须以FROM命令指定镜像基于哪个基础镜像来制作 FROM ubuntu:14:04 MAINTAINER 该容器维护作者,一般是作者的电子邮件 MAINTAINER liminjun2007@gmail.com RUN 在shell或者exec的环境下执行的命令,run指令会在新创建的镜像添加新的层面,接下来提交的结果用在dockerfile的下一条指令中。 RUN echo "Hel
八哥
2018/01/18
8940
使用Dockerfile构建镜像-Docker for Web Developers(5)
Docker学习笔记(2):使用Dockerfile构建镜像
Dockerfile是用来构建Docker镜像的文件,是由一系列命令和参数构成的脚本。每条指令都必须为大写字母且后面要跟随至少一个参数,每条指令都会创建一个新的镜像层,并对镜像进行提交。
布禾
2020/10/29
5570
Docker学习笔记(2):使用Dockerfile构建镜像
GitHub Actions构建Docker镜像
本教程假定您知道docker的工作原理,并有一个使用它的项目。确保您Dockerfile 在项目的根文件夹中。这里使用的示例项目是一个非常基本的项目,只有一个Python文件。完整的代码可以从github仓库中下载。
DevOps云学堂
2020/05/22
2.5K0
GitHub Actions构建Docker镜像
构建docker镜像部署rocketmq
而docker默认隔离性不足,获取系统内存得到的是宿主机内存大小,导致内存不足启动失败(例如宿主机内存32G则计算结果为8G)
路过君
2020/12/31
1.8K0
构建docker镜像部署rocketmq

相似问题

使用docker镜像使用dockerfile构建不同的docker镜像

116

构建Docker镜像

163

在CodeBuild Docker镜像之上构建Docker镜像

32

如何使用docker-compose构建docker镜像

250

如何使用Codebuild构建Docker镜像?

27
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文