Docker Registry 2 官方镜像创建一个私有镜像仓库,将Docker 镜像上传到 OSS 相应的路径中。
参考:
自定义制作一个 Docker镜像,上传到阿里云的容器镜像服务仓库中或者使用 registry 工具上传到阿里云 OSS
新建一个目录 dockerUbuntu,结构如下:
dockerUbuntu
|-- Dockerfile
文件 Dockerfile 的内容:
FROM ubuntu:14.04
# 这里要替换 your_name 为您的名字, 和your_email 为您的Email
MAINTAINER your_name
# 更新源
RUN apt-get update
# 清除缓存
RUN apt-get autoclean
# 安装python
RUN apt-get install -y python
# 启动时运行这个命令
CMD ["/bin/bash"]
-----
From ubuntu:14.04
MAINTAINER wangruoyu
#更新源
RUN apt-get update
#清除缓存
RUN apt-get autoclean
#安装python
RUN apt-get install -y python
#启动时运行这个命令
CMD ["/bin/bash"]
运行以下命令,build 镜像:
cd dockerUbuntu #进入 dockerUbuntu 目录
docker build -t myubuntu ./ #正式build, 命名为 myubuntu
注意:docker 命令在 ubuntu 中默认需要加 sudo 才能运行,而在 Mac/Windows 中,需要从 “Docker Quickstart Terminal” 中启动的命令行工具中运行。
build 完成后, 运行以下命令查看:
docker images
假设 docker 存储到 OSS 的目录路径为oss://your-bucket/dockers/,利用 Docker Registry 2 官方镜像创建一个私有镜像仓库,需要配置了 OSS 的 Access Key ID, Access Key Secret,Region,Bucket 等信息。
具体安装步骤如下:
i. 在当前目录生成文件 config.yml
version: 0.1
log:
level: debug
storage:
oss:
accesskeyid: your_access_key_id
accesskeysecret: your_access_key_secret
region: oss-cn-shenzhen
bucket: your-bucket
rootdirectory: dockers
secure: false
internal: false
http:
addr: 0.0.0.0:5000
-- 实际栗子(推荐yml文件) --
version: 0.1
log:
level: debug
storage:
oss:
accesskeyid: xxx
accesskeysecret: xxx
region: oss-cn-shenzhen
bucket: genekangshenzhen
rootdirectory: dockers
secure: false
internal: false
http:
addr: 0.0.0.0:5000
- **直接运行的方式**
- 1、启动容器
docker run -d -p 5000:5000 \
-e "REGISTRY_STORAGE=oss" \
-e "REGISTRY_STORAGE_OSS_REGION=oss-cn-shenzhen" \
-e "REGISTRY_STORAGE_OSS_BUCKET=genekangshenzhen" \
-e "REGISTRY_STORAGE_OSS_PREFIX=/registry" \
-e "REGISTRY_STORAGE_OSS_ACCESSKEYID=xxx" \
-e "REGISTRY_STORAGE_OSS_ACCESSKEYSECRET=xxx" \
registry:2
- 2、创建Dockerfile并写入生成镜像
FROM nginx
COPY index.html /usr/share/nginx/html/index.html
RUN echo 'hello world' > /usr/share/nginx/html/hello.txt
RUN echo 'this is a sample docker image' > /usr/share/nginx/html/description.txt
CMD ["nginx", "-g", "daemon off;"]
# 构建镜像
docker build -t nginx-image:v1 .
docker build -t localhost:5000/nginx-image:latest .
docker build -t 127.0.0.1:5000/nginx-image:latest .
- docker tag myubuntu(旧) localhost:5000/myubuntu(新)
docker tag nginx-image:v1 localhost:5000/nginx-image:v1
# 推送到 Docker Registry
docker push localhost:5000/nginx-image:latest
docker push 127.0.0.1:5000/nginx-image:latest
docker push localhost:5000/nginx-image:v1
docker push nginx-image:v1
- 3、拉取 Docker 镜像
docker pull localhost:5000/nginx-image:latest
- 4、删除 Docker 镜像
docker rmi localhost:5000/nginx-image:latest
其中的变量需要替换:
参数 | 描述 |
---|---|
your_access_key_id | 阿里云的 access key id |
your_access_key_secret | 阿里云的 access key secret |
your-bucket | 阿里云的 bucket |
oss-cn-shenzhen | bucket 所在的 region |
关于 OSS 配置的详细信息请参见 Docker 官方文档。
ii. 运行命令安装
docker pull registry:2
docker run -v `pwd`/config.yml:/etc/docker/registry/config.yml -p 5000:5000 --name registry -d registry:2
# **17服务器**
## 1、指定yml,registry:2.6.0 failed - 权限问题,版本2.6可pull+管理对象存储服务(OSS)权限
docker run -it -d -p 5000:5000 -v `pwd`/config.yml:/etc/docker/registry/config.yml --restart=always --privileged=true --name registry04 registry:2.6.0
## 2、无指定yml,registry:2.6.0 success
docker run -it -d -p 5000:5000 -v /BioDB2/wangruoyu/dockerUbuntu:/var/lib/registry/docker/registry --restart=always --privileged=true --name registry01 registry:2.6.0
# **232服务器**
## 1、指定yml,registry:2.6.0 failed - 权限不足,push 500报错,也可能是 registry:2,建议用最新版或2.6.0
docker run -v /home/humx/config.yml:/etc/docker/registry/config.yml -p 5000:5000 --name registry2.6.0 -d registry:2.6.0
## 2、指定yml,registry:latest success (第一种yml)
docker run -it -d -v `pwd`/config.yml:/etc/docker/registry/config.yml -p 5000:5000 --restart=always --privileged=true --name registry01 registry:latest
## 3、无指定yml,registry:2.6.0 success (第二种挂载方式)
**(1)需要挂载操作**
echo genekangshenzhen:xxx:xxx > /etc/passwd-ossfs
chmod 640 /etc/passwd-ossfs
mkdir /tmp/ossfs-1
ossfs genekangshenzhen /tmp/ossfs-1 -ourl=http://oss-cn-shenzhen.aliyuncs.com
**(2)运行容器**
docker run -it -d -p 8080:5000 -v /tmp/ossfs-1:/var/lib/registry/docker/registry --restart=always --privileged=true --name registry02 registry:2.6.0
-v参数 : /tmp/ossfs-1(宿主机本地目录):/var/lib/registry/docker/registry (docker 内pod 目录)(这里的目录是进入到容器启动的pod内查看到的目录路径)
注意:region 使用 oss-cn-shenzhen, 表示使用华南1(深圳)region 的 OSS,而后面提交作业也需要提交到相应的 region 才能正常工作。
iii.查看结果
docker ps #查看运行的container
如果成功安装,可以看到 registry:2
docker push localhost:5000/nginx-image:v1
docker push localhost:8080/nginx-image-01:v1
docker push localhost:5000/myubuntu
docker push myubuntu
说明
要用 localhost:5000/ 作为前缀,用其他的字符串无法上传。5000 端口是第(1)步中 -p 5000:5000 中(冒号前的5000)指定的。 您制作的镜像名称为 localhost:5000/myubuntu,而不是 myubuntu。
检验镜像上传是否成功, 可以使用 OSS 控制台查看是否有这个目录:oss://your-bucket/dockers/docker/registry/v2/repositories/myubuntu/,
使用 Docker 时,对应参数填写如下: BATCH_COMPUTE_DOCKER_REGISTRY_OSS_PATH:oss://your-bucket/dockers BATCH_COMPUTE_DOCKER_IMAGE:localhost:5000/myubuntu:xxxx(xxxx 为 myubuntu 的版本号)。
推送镜像到ACR报错received unexpected HTTP status: 500 Internal Server Error
可以按照如下信息排查
docker push localhost:5000/myubuntu
The push refers to a repository [localhost:5000/myubuntu]
53ca46d8cc11: Pushing [==================================================>] 23.62 MB/23.62 MB
89dc10ae098b: Pushing 1.536 kB
9a6f576cf0d3: Pushing [==================================================>] 15.85 MB/15.85 MB
83109fa660b2: Pushing [==================================================>] 3.584 kB
30d3c4334a23: Pushing [==================================================>] 209.9 kB
f2fa9f4cf8fd: Retrying in 5 seconds
Received unexpected HTTP status: 500 Internal Server Error
问题找到了,是oss子账户的秘钥的权限不足;导致push报错,但是提示的不够明显;
(1)yml配置,OSS镜像路径
oss://genekangshenzhen/dockers_test/docker/registry/v2/repositories/nginx-image
oss://genekangshenzhen/dockers/docker/registry/v2/repositories/multipseq2
(2)目录挂载,OSS镜像路径在:oss://genekangshenzhen/v2/repositories/nginx-image-01/
通过yml挂载成功的情况:
docker push localhost:5000/nginx-image:v1
The push refers to repository [localhost:5000/nginx-image]
36c17e634752: Pushed
a8540037937b: Pushed
9b3a4aefa712: Pushed
d47e4d19ddec: Pushed
8e58314e4a4f: Pushed
ed94af62a494: Pushed
875b5b50454b: Pushed
63b5f2c0d071: Pushed
d000633a5681: Pushed
v1: digest: sha256:e242f22dd1661c68238b5d084357ac1f74841d839801c98a26528a3181f98448 size: 2191