Docker inside Docker 基于 Alpine Linux

Study From

https://hub.docker.com/_/docker/

感慨一句 这些人真牛B ..

简单测试

拉取镜像

docker pull docker:dind

运行镜像

docker run -it --privileged --name dind -d docker:dind

查看镜像

[[email protected] ~]# docker exec -it some-docker sh
/ # docker version
Client:
 Version:      18.05.0-ce
 API version:  1.37
 Go version:   go1.9.2
 Git commit:   f150324
 Built:        Wed May  9 22:11:29 2018
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.05.0-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.10.1
  Git commit:   f150324
  Built:        Wed May  9 22:20:42 2018
  OS/Arch:      linux/amd64
  Experimental: false
/ # 

其实也可以查看这个机器的版本信息

vi /etc/os-release 

NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.7.0
PRETTY_NAME="Alpine Linux v3.7"
HOME_URL="http://alpinelinux.org"
BUG_REPORT_URL="http://bugs.alpinelinux.org"

github上面有完整的dockerfile文件  我用centos 的改了半天死活不行

https://github.com/docker-library/docker/blob/9ecb1c3a6bd766b69eb1858ef721f62fbd930a2b/18.06-rc/dind/Dockerfile

内容为

FROM docker:18.06-rc

# https://github.com/docker/docker/blob/master/project/PACKAGERS.md#runtime-dependencies
RUN set -eux;     apk add --no-cache         btrfs-progs         e2fsprogs         e2fsprogs-extra         iptables         xfsprogs         xz # pigz: https://github.com/moby/moby/pull/35697 (faster gzip implementation)
        pigz     ; # only install zfs if it‘s available for the current architecture
# https://git.alpinelinux.org/cgit/aports/tree/main/zfs/APKBUILD?h=3.6-stable#n9 ("all !armhf !ppc64le" as of 2017-11-01)
# "apk info XYZ" exits with a zero exit code but no output when the package exists but not for this arch
    if zfs="$(apk info --no-cache --quiet zfs)" && [ -n "$zfs" ]; then         apk add --no-cache zfs;     fi

# TODO aufs-tools

# set up subuid/subgid so that "--userns-remap=default" works out-of-the-box
RUN set -x     && addgroup -S dockremap     && adduser -S -G dockremap dockremap     && echo ‘dockremap:165536:65536‘ >> /etc/subuid     && echo ‘dockremap:165536:65536‘ >> /etc/subgid

# https://github.com/docker/docker/tree/master/hack/dind
ENV DIND_COMMIT 52379fa76dee07ca038624d639d9e14f4fb719ff

RUN set -ex;     apk add --no-cache --virtual .fetch-deps libressl;     wget -O /usr/local/bin/dind "https://raw.githubusercontent.com/docker/docker/${DIND_COMMIT}/hack/dind";     chmod +x /usr/local/bin/dind;     apk del .fetch-deps

COPY dockerd-entrypoint.sh /usr/local/bin/

VOLUME /var/lib/docker
EXPOSE 2375

ENTRYPOINT ["dockerd-entrypoint.sh"]
CMD []

带安装docker部分的 dockerfile

FROM alpine:3.7

RUN apk add --no-cache         ca-certificates

# set up nsswitch.conf for Go‘s "netgo" implementation (which Docker explicitly uses)
# - https://github.com/docker/docker-ce/blob/v17.09.0-ce/components/engine/hack/make.sh#L149
# - https://github.com/golang/go/blob/go1.9.1/src/net/conf.go#L194-L275
# - docker run --rm debian:stretch grep ‘^hosts:‘ /etc/nsswitch.conf
RUN [ ! -e /etc/nsswitch.conf ] && echo ‘hosts: files dns‘ > /etc/nsswitch.conf

ENV DOCKER_CHANNEL test
ENV DOCKER_VERSION 18.06.0-ce-rc3
# TODO ENV DOCKER_SHA256
# https://github.com/docker/docker-ce/blob/5b073ee2cf564edee5adca05eee574142f7627bb/components/packaging/static/hash_files !!
# (no SHA file artifacts on download.docker.com yet as of 2017-06-07 though)

RUN set -ex; # why we use "curl" instead of "wget":
# + wget -O docker.tgz https://download.docker.com/linux/static/stable/x86_64/docker-17.03.1-ce.tgz
# Connecting to download.docker.com (54.230.87.253:443)
# wget: error getting response: Connection reset by peer
    apk add --no-cache --virtual .fetch-deps         curl         tar     ;     # this "case" statement is generated via "update.sh"
    apkArch="$(apk --print-arch)";     case "$apkArch" in         x86_64) dockerArch=‘x86_64‘ ;;         armhf) dockerArch=‘armel‘ ;;         aarch64) dockerArch=‘aarch64‘ ;;         ppc64le) dockerArch=‘ppc64le‘ ;;         s390x) dockerArch=‘s390x‘ ;;         *) echo >&2 "error: unsupported architecture ($apkArch)"; exit 1 ;;    esac;         if ! curl -fL -o docker.tgz "https://download.docker.com/linux/static/${DOCKER_CHANNEL}/${dockerArch}/docker-${DOCKER_VERSION}.tgz"; then         echo >&2 "error: failed to download ‘docker-${DOCKER_VERSION}‘ from ‘${DOCKER_CHANNEL}‘ for ‘${dockerArch}‘";         exit 1;     fi;         tar --extract         --file docker.tgz         --strip-components 1         --directory /usr/local/bin/     ;     rm docker.tgz;         apk del .fetch-deps;         dockerd -v;     docker -v

COPY modprobe.sh /usr/local/bin/modprobe
COPY docker-entrypoint.sh /usr/local/bin/

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["sh"]

原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/9337866.html

时间: 2024-10-10 11:57:31

Docker inside Docker 基于 Alpine Linux的相关文章

如何创建基于Alpine Linux的JRE环境

Alpine的更新源配置文件repositories内容,如果自建源,可以替换成本地的源,国外源实在太慢 Alpine的更新源配置文件repositories内容,如果自建源,可以替换成本地的源,国外源实在太慢 [[email protected] jre8]#  cat repositories http://nl.alpinelinux.org/alpine/v3.5/main http://nl.alpinelinux.org/alpine/v3.5/community Dockerfil

Alpine Linux

Alpine Linux Docker镜像基于Alpine Linux操作系统,后者是一个面向安全的轻型Linux发行版.不同于通常Linux发行版,Alpine Linux采用了musl libc和busybox以减小系统的体积和运行时资源消耗.在保持瘦身的同时,Alpine Linux还提供了自己的包管理工具apk,可以在其网站上查询,或者直接通过apk命令查询和安装.

[转帖]Docker里运行Docker docker in docker(dind)

Docker里运行Docker docker in docker(dind) http://www.wantchalk.com/c/devops/docker/2017/05/24/docker-in-docer.html mark一下 学习原作者的内容. Posted on 2017-05-24 目的 制作一个可以build docker镜像的docker镜像,jenkins CI服务节点,部署到阿里云的容器服务集群里. 阿里云官方有完整的镜像,master和slave的都有,时间稍微久远了一

docker --Docker微容器Alpine Linux

Alpine Linux的官网: http://www.alpinelinux.org/    #官方 https://pkgs.alpinelinux.org/packages  #官方提供的安装包查询 使用Docker创建容器时,基础镜像通常选择Ubuntu或Centos,不管哪个镜像的大小都在100MB以上. Alpine Linux是一个面向安全的轻型的Linux发行版. Alpine Linux采用了 musl libc 和 busybox以减小系统的体积和运行时资源消耗. 在保持瘦身

【Linux】【Services】【Docker】Docker File

Docker Images: docker commit Dockerfile:文本文件,镜像文件构建脚本: Dockerfile:由一系列用于根据基础镜像构建新的镜像文件的专用指令序列组成: 指令:选定基础镜像.安装必要的程序.复制配置文件和数据文件.自动运行的服务以及要暴露的端口等: 命令:docker build: 语法:指令行.注释行和空白行: 指令行:由指令及指令参数构成: 指令:其字符不区分大小写:约定俗成,要使用全大写字符: 注释行:#开头的行,必须单独位于一行当中: 空白行:会被

爬虫数据存储——安装docker和ElasticSearch(基于Centos7)

爬虫数据存储--安装docker和ElasticSearch(基于Centos7) 先决条件 操作系统要求 要安装Docker Engine-Community,您需要一个CentOS 7的维护版本.不支持或未测试存档版本. 该centos-extras库必须启用.默认情况下,此存储库是启用的,但是如果已禁用它,则需要 重新启用它. overlay2建议使用存储驱动程序. 卸载旧版本 较旧的Docker版本称为docker或docker-engine.如果已安装这些程序,请卸载它们以及相关的依赖

如何使用 Docker 部署一个基于 Play Framework 的 Scala Web 应用?

本文作者 Jacek Laskowski 拥有近20年的应用程序开发经验,现 CodiLime 的软件开发团队 Leader,曾从 IBM 取得多种资格认证.在这篇博文中,Jacek 分享了 Warsaw Scala Enthusiasts Meetup 上 Rafal Krzewski 介绍的一个 Docker sbt 插件.本文系 OneAPM 工程师编译整理: 虽然在 DeepSense.io 项目中,Docker 已得到了非常深入的应用,但是如果没有接触到 Rafal Krzewski

《自己动手写Docker》书摘之一: Linux Namespace

Linux Namespace 介绍 我们经常听到说Docker 是一个使用了Linux Namespace 和 Cgroups 的虚拟化工具,但是什么是Linux Namespace 它在Docker内是怎么被使用的,说到这里很多人就会迷茫,下面我们就先介绍一下Linux Namespace 以及它们是如何在容器里面使用的. 概念 Linux Namespace 是kernel 的一个功能,它可以隔离一系列系统的资源,比如PID(Process ID),User ID, Network等等.一

Docker for Windows安装与Linux+PHP开发环境搭建(一)

Docker是什么? 简单得来说,Docker是一个由GO语言写的程序运行的"容器"(Linux containers, LXCs); 目前云服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机.Docker则实现了一种应用程序级别的隔离; 它改变我们基本的开发.操作单元,由直接操作虚拟主机(VM),转换到操作程序运行的"容器"上来. Docker的好处 Docker的优点:运行快.部署敏捷.灵活.轻量.开源免费. Boot2Docker是一个专为Do