docker的小细节

本质上docker是一层一层进行分层处理的,层与层之间都是dockfile的命令
镜像层只读层,容器层可读写
以前的docker 默认是100MB 现在默认是10G,最大可用达到100G-一个容器可容纳的大小
改这个的方法
1、启动的时候
docker 启动时候 加载参数 --storage-opt dm.basesize=100G
2、进入docker的配置文件 /etc/docker/deamon.json
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

Day05-docker-仓库_json

产线中的问题

在docker 1,13版本,1.13是一个分水岭,注意配置文件里面的东西。
不同版本的实际操作存在些许差异的
/etc/docker/deamon.json 是data-root
而老版本是graph
  • 1.
  • 2.
  • 3.
  • 4.

Day05-docker-仓库_json_02
Day05-docker-仓库_json_03

默认目录是/var/lib
但是要是目录的大小不够了,我们需要去迁移,怎么迁移呢?
1、和客户商量,能不能停,确定能停,和开发讲清楚情况,怎么停,什么顺序,怎么要求,停下来
2、把/var/lib/docker 引入到一个大的空间下面去,比如/data92
3、把deamon.json下面的配置 graph 或者 data-root 改成新的目录

想达到持久化改动,就可以通过docker commit
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

1、阿里云镜像仓库

Day05-docker-仓库_json_04

$ docker login --username=jichaoitn1 registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/gerencangku/jichaopersoncangku:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/gerencangku/jichaopersoncangku:[镜像版本号]
这样我们就可以把镜像上传到我们个人的阿里云仓库中
  • 1.
  • 2.
  • 3.
  • 4.
从docker history 和阿里云镜像仓库都可以看到,其实我们的上传都是通过一层一层来实现的
每一层似曾相识的地方就是像dockerfile
这些命令和dockerfile十分类似
  • 1.
  • 2.
  • 3.

Day05-docker-仓库_json_05

2、本地docker-registory

部署本地的registry
docker pull registry
docker run -d -p 5000:5000 --restart=always --name registry registry:latest
  • 1.
  • 2.
  • 3.

Day05-docker-仓库_json_06
Day05-docker-仓库_docker_07

上传一个镜像
docker tag http:latest localhost:5000/nginx:test
docker push localhost:5000/nginx:test
  • 1.
  • 2.
  • 3.

Day05-docker-仓库_json_08

验证一下
curl localhost:5000/v2/_catalog
  • 1.
  • 2.

Day05-docker-仓库_json_09

一些需要注意的小细节-补充

docker  属于是调用全局的
ctr -n ctr是有命名空间的 images pull docker.io/library/ubuntu:latest
ctr可以改为cri-ctl\nerdctl 他们三个都是调用的/var/run/containerd 都可以去启动容器
如果底层走cri-o 调镜像就是podman,不是docker 也不是containerd  命令 podman image ls
  • 1.
  • 2.
  • 3.
  • 4.
我们发现这个版本号看不到,我们去哪里看?
/var/lib/docker/volumes/镜像id/_data/docker/registry
  • 1.
  • 2.

Day05-docker-仓库_docker_10

/var/lib/docker/volumes/db136c8930a992ff46792f2a0f801ab3e45c5f9a835e4ec4c3e8f264cdb8c564/_data/docker/registry/v2/repositories/nginx/_manifests/tags
这个可以看到具体的版本
  • 1.
  • 2.

为本地私有仓库设置证书

# 生成openssL证书
cd
mkdir -p certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/jichao.test.key -addext "subjectAltName = DNS:reg.jichao.test" -x509 -days 365 -out certs/jichao.test.crt
  • 1.
  • 2.
  • 3.
  • 4.

Day05-docker-仓库_json_11

删除容器
docker stop
docker rm
  • 1.
  • 2.
  • 3.

Day05-docker-仓库_json_12

mkdir -p /opt/registry
docker run -d --restart=always --name registry -v /root/certs:/certs -v /opt/registry:/var/lib/registry -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/jichao.test.crt -e REGISTRY_HTTP_TLS_KEY=/certs/jichao.test.key -p 443:443 registry

# 解释
docker run -d 
--restart=always --name registry  重启策略 容器名字
-v /root/certs:/certs -v /opt/registry:/var/lib/registry   挂载目录
-e REGISTRY_HTTP_ADDR=0.0.0.0:443    允许的端口
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/jichao.test.crt  证书名称以及域名
-e REGISTRY_HTTP_TLS_KEY=/certs/jichao.test.key  证书名称以及域名
-p 443:443 registry 开放端口 

# 没有dns服务器 写入hosts文件
# 在daemon.json中也要添加
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

Day05-docker-仓库_docker_13
Day05-docker-仓库_json_14

#上图的代理也要删除掉
docker tag http:latest reg.jichao.test/http:test
docker push reg.jichao.test/http:test
  • 1.
  • 2.
  • 3.

Day05-docker-仓库_docker_15

mkdir -p /etc/docker/certs.d/reg.jichao.test
cd certs/
cp jichao.test.crt /etc/docker/certs.d/reg.jichao.test/ca.crt
#就可以成功推送了
docker push reg.jichao.test/busybox:test
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

推送上去的镜像在 /opt/registry/docker/registry/v2/repositories/下
Day05-docker-仓库_docker_16
Day05-docker-仓库_json_17
Day05-docker-仓库_json_18

创建本地私有仓库用户

docker rm -f regisrtry
mkdir auth 
yum install -y httpd-tools
yum install -y httpd
htpasswd -cB auth/htpasswd admin -admin admin
htpasswd -B auth/htpasswd doubao
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

Day05-docker-仓库_docker_19

docker run -d \
--restart=always \
--name registry   \
-v /root/certs:/certs \
-v /opt/registry:/var/lib/registry  \
-v /root/auth:/auth  \
-e "REGISTRY_AUTH=htpasswd"   \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"  \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd  \
-v /opt/registry:/var/lib/registry  \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/jichao.test.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/jichao.test.key \
-p 443:443 \
registry

docker run -d  --restart=always --name registry -v /root/certs:/certs -v /opt/registry:/var/lib/registry -v /root/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v /opt/registry:/var/lib/registry -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/jichao.test.crt  -e REGISTRY_HTTP_TLS_KEY=/certs/jichao.test.key  -p 443:443 registry
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

Day05-docker-仓库_json_20

curl -k https://reg.jichao.test/v2/_catalog -u admin:admin
curl -k https://reg.jichao.test/v2/_catalog -u doubao:doubao
  • 1.
  • 2.

这块要注意,我们要把/etc/docker/daemon.json下面的代理删除,如果不删除的话它就会报这个错误
Day05-docker-仓库_json_21
Day05-docker-仓库_docker_22

如果出现了上面的问题,首先把这块的代理删除掉,然后去docker logout https://reg.jichao.test 登出操作
接着 service docker restart 重启一下docker的服务,我们就可以正常访问到docker registry的仓库内容了
  • 1.
  • 2.

Day05-docker-仓库_docker_23

跨主机通信
主机 192.168.0.12
跨节点访问11的registry的仓库
  • 1.
  • 2.

Day05-docker-仓库_docker_24
Day05-docker-仓库_json_25

cd /etc/docker/certs.d/reg.jichao.test
scp /etc/docker/certs.d/reg.jichao.test/ca.crt root@192.168.0.12:/etc/docker/certs.d/reg.jichao.test/

scp /etc/docker/daemon.json root@192.168.0.12:/etc/docker/daemon.json
  • 1.
  • 2.
  • 3.
  • 4.

Day05-docker-仓库_docker_26
Day05-docker-仓库_docker_27
Day05-docker-仓库_json_28
推送拉取测试
Day05-docker-仓库_json_29
Day05-docker-仓库_json_30

拉取惊险成功
Day05-docker-仓库_docker_31
在推送一个试试
Day05-docker-仓库_docker_32