使用专用 Docker 注册表

创建专用 Docker 注册表的存档

若要从专用 Docker 注册表中提供拉取凭据,请创建 Docker 凭据的存档,然后将其添加为服务或 pod 定义中的 URI。在 DC/OS Enterprise 中,您还可以将 Docker 注册表凭据上传到 DC/OS 密钥存储库](#secret-store-instructions),并在服务或 pod 定义中进行引用。

将专用 Docker 注册表凭据以 URI 的形式来使用

第 1 步:压缩 Docker 凭据

  1. 手动登录专用注册表。登录后会在主目录中创建 .docker 文件夹和 .docker/config.json 文件。

    1. docker login some.docker.host.com
    2. Username: foo
    3. Password:
    4. Email: foo@bar.com
  2. 压缩 .docker 文件夹及其内容。

    1. cd ~
    2. tar -czf docker.tar.gz .docker
  3. 验证两个文件都在存档中。

    1. tar -tvf ~/docker.tar.gz
    2. drwx------ root/root 0 2015-07-28 02:54 .docker/
    3. -rw------- root/root 114 2015-07-28 01:31 .docker/config.json
  4. 将存档文件放置在您的应用定义可访问的位置。

    1. cp docker.tar.gz /etc/

重要信息:URI 必须能够通过所有会启动您应用的节点访问。可以将文件分发到所有节点的本地文件系统,例如,通过 RSYNC/SCP 分发,或将其存储在共享网络驱动器上,例如 Amazon S3。仔细考虑所选方法的安全影响。

第 2 步:将 URI 路径添加到服务定义

  1. 将存档文件登录凭据的路径添加到服务定义。

    1. "fetch": [
    2. {
    3. "uri": "file:///etc/docker.tar.gz"
    4. }
    5. ]

    例如:

    1. {
    2. "id": "/some/name/or/id",
    3. "cpus": 1,
    4. "mem": 1024,
    5. "instances": 1,
    6. "container": {
    7. "type": "DOCKER",
    8. "docker": {
    9. "image": "some.docker.host.com/namespace/repo"
    10. }
    11. },
    12. "fetch": [
    13. {
    14. "uri": "file:///etc/docker.tar.gz"
    15. }
    16. ]
    17. }

Docker 镜像现在将使用提供的安全凭证进行拉取。

引用密钥存储库中的专用 Docker 注册表凭据 Enterprise

按照以下步骤向 [DC/OS Enterprise 密钥存储库] 添加 Docker 注册表凭据(/cn/1.11/security/ent/secrets/),然后在服务定义中引用该密钥。

注意: 此功能仅适用于 通用 Containerizer 运行时间。如果需要使用 Docker Engine,请遵循上述 URI 说明

第 1 步:创建凭据文件

  1. 手动登录您的专用注册表。这会创建 ~/.docker 目录和 ~/.docker/config.json 文件。

    1. docker login some.docker.host.com
    2. Username: foo
    3. Password:
    4. Email: foo@bar.com
  2. 检查您是否有 ~/.docker/config.json 文件。

    1. ls ~/.docker
    2. config.json

    您的 config.json 文件应该是这样的,其中 auth 的值是基于 64 位编码的 username:password 字符串。

    1. {
    2. "auths": {
    3. "https://index.docker.io/v1/": {
    4. "auth": "XXXXX",
    5. "email": "<your-email>"
    6. }
    7. }
    8. }

注意: 如果使用的是 Mac OSX,就需要手动编码 `username:password` 字符串并修改您的 `config.json` ,以便与上面的片段匹配。

  1. 添加 config.json 文件到 DC/OS 密钥存储库。了解创建密钥的详细信息

注意: 自 DC/OS 版本 1.10.0 开始,您只能使用 DC/OS CLI 将文件添加到密钥存储库。

  1. dcos security secrets create --value-file=config.json <path/to/secret>

如果您打算遵循以下示例,请输入以下命令以添加密钥:

  1. dcos security secrets create --value-file=config.json mesos-docker/pullConfig

第 2 步:为您的服务或 pod 定义添加密钥

对于服务

  1. secrets 参数中添加密钥位置,并在 docker.pullConfig 参数中引用密钥。

注意: 此功能**仅** 获得 **通用容器运行时间**支持: `container.type` 必须为 `MESOS`。

  1. {
  2. "id": "/mesos-docker",
  3. "container": {
  4. "docker": {
  5. "image": "<your/private/image>",
  6. "pullConfig": {
  7. "secret": "pullConfigSecret"
  8. }
  9. },
  10. "type": "MESOS"
  11. },
  12. "secrets": {
  13. "pullConfigSecret": {
  14. "source": "/mesos-docker/pullConfig"
  15. }
  16. },
  17. "args": ["hello"],
  18. "cpus": 0.2,
  19. "mem": 16.0,
  20. "instances": 1
  21. }
  1. 将服务添加到 DC/OS。如果您使用上述示例,则为<svc-name> is mesos-docker

    1. dcos marathon app add <svc-name>.json

Docker 镜像现在将使用提供的安全凭证进行拉取。

对于 pod

  1. secrets 参数中添加密钥位置,并在 containers.image.pullConfig 参数中指向密钥。

注意: 只有在 `image.kind` 设置为 `DOCKER` 时,支持此功能。

  1. {
  2. "id":"/simple-pod",
  3. "containers":[
  4. {
  5. "name":"simpletask1",
  6. "exec":{
  7. "command":{
  8. "shell":"env && sleep 1000"
  9. }
  10. },
  11. "resources":{
  12. "cpus":0.1,
  13. "mem":32
  14. },
  15. "image":{
  16. "kind":"DOCKER",
  17. "id":"<your/private/image>",
  18. "pullConfig":{
  19. "secret":"pullConfigSecret"
  20. }
  21. }
  22. }
  23. ],
  24. "networks":[
  25. {
  26. "mode":"host"
  27. }
  28. ],
  29. "secrets":{
  30. "pullConfigSecret":{
  31. "source":"/pod/pullConfig"
  32. }
  33. }
  34. }
  1. 将 pod 添加到 DC/OS。如果您使用上述示例,则为<pod-name> is simple-pod

    1. dcos marathon pod add <pod-name>.json

Docker 镜像现在将使用提供的安全凭证进行拉取。