• 下载镜像 Docker Registry
    1. $ docker pull registry
    2. $ docker images registry
    3. REPOSITORY TAG IMAGE ID CREATED SIZE
    4. registry latest b8604a3fe854 8 months ago 26.2MB

    Docker Registry 自建私库 - 图1

    • 运行私有库 Registry,相当于本地有个私有Docker Hub
    1. $ mkdir -pv /app/registry
    2. $ docker run -d -p 5000:5000 \
    3. -v /app/registry:/tmp/registry \
    4. --privileged=true \
    5. --name myregistry \
    6. --restart=always registry
    7. $ docker ps -l
    8. # 默认情况下,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调
    • 案例演示创建一个新镜像,ubuntu安装ifconfig命令
    1. # 从Hub上下载ubuntu镜像到本地并成功运行
    2. $ docker pull ubuntu
    3. $ docker run -it -d --name u1 ubuntu /bin/bash
    4. # 原始的ubuntu镜像是不带着ifconfig命令
    5. $ docker exec -it u1 /bin/bash
    6. root@061f7b3bc044:/# apt update -y
    7. root@061f7b3bc044:/# apt install -y net-tools
    8. # 外网联通的情况下,安装ifconfig命令并测试通过
    9. root@061f7b3bc044:/# ifconfig
    10. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    11. inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255
    12. ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet)
    13. RX packets 10486 bytes 21412251 (21.4 MB)
    14. RX errors 0 dropped 0 overruns 0 frame 0
    15. TX packets 10507 bytes 988690 (988.6 KB)
    16. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
    17. lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
    18. inet 127.0.0.1 netmask 255.0.0.0
    19. loop txqueuelen 1000 (Local Loopback)
    20. RX packets 0 bytes 0 (0.0 B)
    21. RX errors 0 dropped 0 overruns 0 frame 0
    22. TX packets 0 bytes 0 (0.0 B)
    23. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
    24. root@061f7b3bc044:/# exit
    25. # 安装完成后,commit的新镜像
    26. # 公式:docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
    27. # 命令:在容器外执行
    28. $ docker commit -m "Add ifconfig tools" -a "zhongzhiwei <935523993@qq.com>" u1 zzwubuntu:v1.0
    29. # 启动我们的新镜像并和原来的对比
    30. $ docker history zzwubuntu:v1.0
    31. $ docker history ubuntu:latest
    • curl验证私服库上有什么镜像
    1. # 模拟发送一个Get请求
    2. $ curl -XGET http://139.198.105.99:5000/v2/_catalog
    3. {"repositories":[]}
    4. # 可以看到,目前私服库没有任何镜像上传过......

    Docker Registry 自建私库 - 图2

    • 将新镜像修改符合私服规范的Tag
    1. # 按照公式:docker tag 镜像:tag Host:Port/Registory:Tag
    2. 使用命令docker tag将新制作的镜像修改为139.198.105.99:5000/zzwubuntu:v1.0
    3. $ docker tag zzwubuntu:v1.0 139.198.105.99:5000/zzwubuntu:v1.0
    • 修改配置文件使之支持http
    1. # 修改配置文件使之支持http
    2. $ vim /etc/docker/daemon.json
    3. {
    4. "registry-mirrors": ["https://po13h3y1.mirror.aliyuncs.com","https://registry.docker-cn.com"],
    5. "exec-opts": ["native.cgroupdriver=systemd"],
    6. #"comment" : "添加以下内容",
    7. "insecure-registries": ["139.198.105.99:5000"],
    8. "log-driver": "json-file",
    9. "log-opts": {
    10. "max-size": "100m"
    11. },
    12. "storage-driver": "overlay2"
    13. }
    14. # registry-mirrors 配置的是国内阿里云提供的镜像加速地址,不用加速的化访问官网会很慢。
    15. ### 2个配置中间有个逗号',',这个配置是 json 格式的。
    16. # 上述理由:由于Docker默认不允许 http 方式推送镜像,通过配置选项来取消这个限制
    17. # ---> 修改完后如果不生效,建议重启 Docker
    18. $ systemctl daemon-reload ; systemctl restart docker
    • push推送到私服库
    1. $ docker push 139.198.105.99:5000/zzwubuntu:v1.0
    • curl验证私服库上有什么镜像
    1. $ curl -XGET http://139.198.105.99:5000/v2/_catalog
    2. {"repositories":["zzwubuntu"]}

    范例:

    1. ~ curl -XGET http://10.0.0.101:5000/v2/_catalog
    2. {"repositories":["kubesphere-ubuntu"]}
    3. ~ curl -XGET http://10.0.0.101:5000/v2/kubesphere-ubuntu/tags/list
    4. {"name":"kubesphere-ubuntu","tags":["1.1"]}

    Docker Registry 自建私库 - 图3

    • pull到本地并运行
    1. $ docker pull 139.198.105.99:5000/zzwubuntu:v1.0