共计 5895 个字符,预计需要花费 15 分钟才能阅读完成。
Docker 装置及 Docker 公有仓库部署流程
docker 装置
此文档是基于 Centos7 操作。用户为 root。
零碎内核须要 3.8 或更高版本
// 查看内核 | |
$ uname -a | |
// 装置 docker, 此脚本会查看内核并装置 | |
$ curl -fsSL https://get.docker.com/ | sh | |
// 启动服务 | |
$ systemctl start docker | |
// 查看版本 | |
$ docker --version |
部署公有仓库
镜像在私有仓库 dockerhub 拉取推送十分慢,而且把我的项目的镜像放在公网很不平安,在局域网内搭建公有仓库平安快捷。
docker registry server 分为 2 个版本,第一版是 python 写成的,第二版是 go 写的。本文档基于 go 版本,须要 docker version 1.6 以上。
// 查看镜像 | |
$ docker images | |
// 删除镜像 - f 示意强制删除 | |
$ docker rmi -f 镜像 id | |
// 运行基于容器的 registry. registry:2 镜像不存在时 会去 dockerhub 下面下载镜像并运行。--restart 设置为 always,无论容器的退出代码是什么,Docker 都会重启该容器,设置为 on-failure 时 只有当容器的退出代码为非 0 时才会重启,如 --restart=on-failure:5 示意最多重启 5 次 | |
$ docker run -d -p 5000:5000 --restart=always --name registry registry:2 | |
// 默认的 registry data 是存储在容器 docker volume 中的,如果 registry 进行 volume 是会被删除的 | |
// 把 data 共享进去到宿主机目录 /data 下 | |
$ docker run -d -p 5000:5000 --restart=always --name registry -v /data:/var/lib/registry registry:2 | |
// 获取容器日志 与 tail -f 相似 | |
$ docker logs centos_d_container -f | |
// 来查看以后零碎中正在运行的容器列表 | |
$ docker ps | |
// 命令会列出所有的容器 | |
$ docker ps -a | |
// 进行容器 start restart | |
$ docker stop registry (容器名或容器 id) | |
// 删除容器 | |
$ docker rm registry (容器名或容器 id) | |
// 删除全副容器 | |
$ docker rm `docker ps -a -q` | |
// 当初测试下公有仓库 | |
// 下载 ubuntu 镜像 | |
$ docker pull ubuntu | |
// 打 tag 将 ubuntu 取名为 192.168.1.182:5000/ubuntu 不写 tag 默认为 latest | |
$ docker tag ubuntu 192.168.1.182:5000/ubuntu | |
// 推送到公有仓库 | |
$ docker push 192.168.1.182:5000/ubuntu | |
// 查看 | |
// 能够间接在宿主机共享目录 查到 ubuntu | |
$ ll /data/docker/registry/v2/repositories/ | |
// 应用 API 查看 | |
$ curl https://192.168.1.182:5000/v2/_catalog |
客户端应用公有仓库
先装置好 Docker 请看上文
// 配置公有仓库地址 | |
$ echo '{"insecure-registries":["192.168.1.182:5000"] }' > /etc/docker/daemon.json | |
// 重启失效 | |
$ systemctl restart docker | |
// 拉取公有仓库中的 ubuntu 镜像 | |
$ docker pull 192.168.1.182:5000/ubuntu | |
// 也能够推送到公有仓库, 比方本地有个 centos 镜像 | |
$ docker tag centos 192.168.1.182:5000/centos | |
$ docker push 192.168.1.182:5000/centos | |
// 应用 API 查看 | |
$ curl https://192.168.1.182:5000/v2/_catalog |
创立证书
如果公有仓库想放到外网拜访,这样谁都能够拜访,就不平安了,须要登录认证
running a domain registry using TLS
// 须要装置 openssl | |
$ which openssl | |
// 创立证书 | |
$ openssl genrsa -out server.key 2048 | |
$ openssl req -new -key server.key -out server.csr | |
You are about to be asked to enter information that will be incorporated | |
into your certificate request. | |
What you are about to enter is what is called a Distinguished Name or a DN. | |
There are quite a few fields but you can leave some blank | |
For some fields there will be a default value, | |
If you enter '.', the field will be left blank. | |
----- | |
Country Name (2 letter code) [XX]:CN | |
State or Province Name (full name) []:guangdong | |
Locality Name (eg, city) [Default City]:shenzhen | |
Organization Name (eg, company) [Default Company Ltd]:mobi | |
Organizational Unit Name (eg, section) []:soft | |
Common Name (eg, your name or your server's hostname) []:registrydomain.com | |
Email Address []:liangxxx@xxx.com | |
Please enter the following 'extra' attributes | |
to be sent with your certificate request | |
A challenge password []: | |
An optional company name []: | |
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt | |
而后把证书装置到零碎中.
$ cp server.crt /etc/pki/ca-trust/source/anchors/ | |
$ update-ca-trust enable | |
$ update-ca-trust extract |
而后在 /etc/hosts 中配置域名,重启 docker 过程
$ vim /etc/hosts | |
192.168.1.182 registrydomain.com | |
$ systemctl restart docker |
而后应用证书启动容器。
$ mkdir certs | |
$ cp server.crt certs/ | |
$ cp server.key certs/ | |
$ docker run -d -p 5000:5000 --name registry --restart=always -v /data:/var/lib/registry -v $PWD/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt -e REGISTRY_HTTP_TLS_KEY=/certs/server.key registry:2 |
在其余客户端中也进行装置证书和配置域名并重启 docker 过程后就能够应用了
用户名明码利用
// 用户名:hello, 明码:world | |
$ sh -c "docker run --entrypoint htpasswd registry:2 -Bbn hello world > auth/htpasswd" | |
$ docker run -d -p 5000:5000 --restart=always --name registry -v `pwd`/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v `pwd`/certs:/certs -v /data:/var/lib/registry -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt -e REGISTRY_HTTP_TLS_KEY=/certs/server.key registry:2 | |
// 登录 输出用户名明码 hello:world | |
$ docker login registrydomain.com:5000 | |
// 登出 | |
$ docker logout registrydomain.com:5000 |
客户端用户名明码登录应用公有仓库
//server.crt 仓库生成的证书 | |
$ cp server.crt /etc/pki/ca-trust/source/anchors/ | |
$ update-ca-trust enable | |
$ update-ca-trust extract | |
// 而后在 /etc/hosts 中配置域名,重启 docker 过程 | |
$ vim /etc/hosts | |
192.168.1.182 registrydomain.com | |
$ systemctl restart docker | |
$ docker login registrydomain.com -u hello -p world |
界面治理公有仓库
// 登录胜利后查 BASIC_AUTH 值 | |
$ cat /root/.docker/config.json | |
// 启动界面 | |
$ docker run -d -p 8080:8080 --name web --link registry \ | |
-e REGISTRY_URL=https://192.168.1.182:5000/v2 \ | |
-e REGISTRY_TRUST_ANY_SSL=true \ | |
-e REGISTRY_READONLY=false \ | |
-e REGISTRY_BASIC_AUTH="aGVsbG86d29ybGQ=" \ | |
-e REGISTRY_NAME=localhost:5000 hyper/docker-registry-web |
浏览器拜访:http://192.168.1.182:8080/
能够界面上删除镜像,减少 delete 配置
// 把配置文件拷贝进去 | |
docker cp registry:/etc/docker/registry/config.yml config.yml | |
$ vim config.yml | |
storage: | |
cache: | |
blobdescriptor: inmemory | |
filesystem: | |
rootdirectory: /var/lib/registry | |
delete: | |
enabled: true | |
. | |
. | |
. | |
// 指定配置文件启动 | |
$ docker run -d -p 5000:5000 --restart=always --name registry -v `pwd`/config.yml:/etc/docker/registry/config.yml -v `pwd`/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v `pwd`/certs:/certs -v /data:/var/lib/registry -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt -e REGISTRY_HTTP_TLS_KEY=/certs/server.key registry:2 |
留神:不倡议应用删除,镜像是以层的概念,每个镜像可能依赖雷同的层,在这里删除不会物理删除
Docker Compose
装置 docker-compose
$ curl -L https://github.com/docker/compose/releases/download/1.11.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose | |
$ chmod +x /usr/local/bin/docker-compose | |
$ docker-compose --version | |
// 列出容器 | |
$ docker-compose ps | |
//version 1 当初已不反对, 倡议应用 version 2 | |
// 上面应用 docker-compose 以服务形式 启动公有仓库和界面治理 | |
$ vim docker-compose.yml | |
version: '2' | |
services: | |
registry: | |
restart: always | |
image: registry:2 | |
ports: | |
- 5000:5000 | |
environment: | |
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/server.crt | |
REGISTRY_HTTP_TLS_KEY: /certs/server.key | |
REGISTRY_AUTH: htpasswd | |
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd | |
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm | |
volumes: | |
- ./config.yml:/etc/docker/registry/config.yml | |
- ./auth:/auth | |
- ./certs:/certs | |
- /data:/var/lib/registry | |
networks: | |
- registry-net | |
web: | |
restart: always | |
image: hyper/docker-registry-web | |
ports: | |
- 8080:8080 | |
environment: | |
REGISTRY_URL: https://registry:5000/v2 | |
REGISTRY_TRUST_ANY_SSL: "true" | |
REGISTRY_READONLY: "false" | |
REGISTRY_BASIC_AUTH: aGVsbG86d29ybGQ= | |
REGISTRY_NAME: registry:5000 | |
networks: | |
- registry-net | |
networks: | |
registry-net: | |
// 后盾启动 | |
$ docker-compose up -d |
正文完