1 / 15

Develop docker

Develop docker. 马全一 Docker.cn. agenda. 使用 Dockerfile 编译 Docker 如何在 “墙内” 编译 Docker Make 命令 Docker 本地存储 Docker Hub & Registry API 扩展 Docker API Docker Registry API V2. 为什么要编译 docker.

Download Presentation

Develop docker

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Develop docker 马全一 Docker.cn

  2. agenda • 使用 Dockerfile 编译 Docker • 如何在 “墙内” 编译 Docker • Make 命令 • Docker 本地存储 • Docker Hub&Registry API • 扩展 DockerAPI • Docker Registry API V2 meaglith@docker.cn

  3. 为什么要编译docker [任务] Docker.cn 为 “墙内” 开发者提供 Docker 镜像仓库存储服务[目标] “加密” 镜像仓库存储服务[过程] 1. 扩展 push 和 pull 命令2. 扩展hubapi 和 Registry api3.dockerbucket meaglith@docker.cn

  4. 使用 Docker 编译 docker daemon go build $SRC/docker/docker.go 得到的 docker client,无法执行 。 • 8.8 M VS 13 M • docker -d “This is a client-only binary - running the Docker daemon is not supported.” make 编译 dockerdaemon ->$SRC/hack/make.sh • default : binary • cross : 交叉编译不同平台的 docker • test : 交叉编译进行测试 meaglith@docker.cn

  5. Dockefile • FROM ubuntu:14.04 • RUN git clone --no--checkout https://git.fedorahosted.org/git/lvm2.git /usr/local/lvm2 … • RUN curl -sSL http://golang.org/dl/go1.3.3.src.tar.gz … • RUN go get code.google.com/p/go.tools/cmd/cover • RUN gem install --no-rdoc --no-ri fpm --version 1.0.3 meaglith@docker.cn

  6. Dockefile One • FROM docker.cn/docker/docker-dev:v1.2.0 • VOLUME /var/lib/docker • WORKDIR /go/src/github.com/docker/docker • ENV DOCKER_BUILDTAGS apparmorselinux • ENTRYPOINT [“hack/dind”] • COPY . /go/src/github.com/docker/docker meaglith@docker.cn

  7. Dockefile two • FROM docker.cn/docker/ubuntu:14.04 • RUN echo “deb http://mirrors.aliyun.com/ubuntu trusty main universe ” > /etc/apt/sources.list && … • RUN git clone --no--checkout https://coding.net/gendna/lvm2.git /usr/local/lvm2 … • RUN curl –sSL http://docker-cn.qiniu.com/go1.3.3.src.tar.gz … • RUN mkdir -p /go/src/github.com/gpmgo && … && go install • RUN gopm -v code.google.com/p/go.tools/cmd/cover • RUN gem sources --remove https://rubygems.org/ && gem sources -a https://ruby.taobao.org/ && gem install --no-rdoc --no-ri fpm --version 1.0.2 meaglith@docker.cn

  8. Dockefile two • FROM docker.cn/docker/ubuntu:14.04 • RUN echo “deb http://mirrors.aliyun.com/ubuntu trusty main universe ” > /etc/apt/sources.list && … • RUN git clone --no--checkout https://coding.net/gendna/lvm2.git /usr/local/lvm2 … • RUN curl –sSL http://docker-cn.qiniu.com/go1.3.3.src.tar.gz … • RUN mkdir –p /go/src/github.com/gpmgo && … && go install • RUN gopm -v code.google.com/p/go.tools/cmd/cover • RUN gem sources --remove https://rubygems.org/ && gem sources -a https://ruby.taobao.org/ && gem install --no-rdoc --no-ri fpm --version 1.0.2 meaglith@docker.cn

  9. Make/hack/bindary #!/bin/bash set -e DEST=$1 go build -o “$DEST/docker-$VERSION” “${BUILDFLAGS[@]}” -ldflags “ $LDFLAGS $LDFLAGS_STATIC_DOCKER” ./docker echo “Create binary: $DEST/docker-$VERSION” ln -sf “docker-$VERSION” “DEST/docker” hash_files “DEST/docker-$VERSION” meaglith@docker.cn

  10. Docker local storage • 存储路径 /var/lib/docker 或者 docker -d -g /xxx/somewhere • 镜像仓库信息存储 repositories-aufs && repositories-devicemapper … • AUFS:diff/layer/mnt • Devicemapper : devicemapper/metadata/mnt • gz、bzip2、gzip、xz meaglith@docker.cn

  11. Docker hub & Registry概念 • [standalone] Hub 和 Registry 是否同一个程序提供服务 • [standalone=true] 在 HTTP HEADER 的 Authorization 中使用Basic Authorization 验证 • [standalone=false] 在 HTTPHEADER 的 Authorization 字段使用 Token 验证 • [X-Docker-Token=true] 生成一个 Token 返回,否则 dockerclient 会报 Index response didn’t contain an access token 的错误 • [Cookie] docker client 支持 Cookie, 所以在 PUSH 的第一次调用的时候就处理 meaglith@docker.cn

  12. Docker login • [PUT /v1/users] 创建用户;如果 HTTPSTATUECODE 返回 401 ,docker client 会进行登录。 • [GET /v1/users] 用户登录:使用 BASIC AUTHORIZATION 验证。 • Authorization: Basic ZnNrOmZsdfdf== meaglith@docker.cn

  13. Docker PUSH • [PUT /v1/repositories/<namespace>/<repository>] 把镜像仓库所有的镜像和标签信息组织为 JSON 格式 PUT 到服务器。 • [GET /v1/images/<image>/json] 获取镜像的 JSON 信息,如果 HTTPSTATUSCODE 是 200, 判定服务器已经有此镜像,不需要有再上传;如果是 404 ,判断服务器不存在此镜像,进行上传。 • [PUT /v1/images/<image>/json] 把镜像的 JSON 信息发送到服务器。 • [PUT /v1/images/<image>/layer] 把镜像目录压缩为 tar 流,放在 HTTP BODY 里面发送到服务器 • [PUT /v1/images/<image>/checksum] 在 HTTPHEADER 中发送镜像的 checksum 值,X-Docker-Checksum 和 X-Docker-Checksum-Payload • [PUT /v1/repositories/<namespace>/<repository>/tags/<tag>] 向服务器写入镜像和标签的对应信息 • [PUT /v1/repositories/<namespace>/<repository>/images] meaglith@docker.cn

  14. Docker PULL • [GET /v1/repositories/<namespace>/<repository>/images] 从服务器读取镜像仓库的所有镜像信息 • [GET /v1/repositories/<namespace>/<repository>/tags] 从服务器读取镜像仓库的标签 信息 • [GET /v1/images/<image>/ancestry] 获取一个镜像的祖先信息。 • [GET /v1/images/<image>/json] 获取镜像的 JSON 信息。 • [GET /v1/images/<image>/layer] 获取一个镜像的 tar 文件。 meaglith@docker.cn

  15. Docker ENcrypt • 通过增加 HTTP HEADER 信息扩展 Registry API 。 • 在服务器和 docker client 中增加 [X-Docker-Encrypt] 和 [X-Docker-Sign] 来处理 meaglith@docker.cn

More Related