Docker搭建私服(本地镜像库)+实战案例(全面易懂,步骤详尽)

先准备两台虚拟机,Ubuntu18.04;两台机器上都配好apt源,安装好docker,设置好docker加速器。

0.更换镜像源(因为默认的太慢了,国内的更快)

sudo vim /etc/default/docker
输入以下参数:
DOCKER_OPTS="--registry-mirror=http://hub-mirror.c.163.com" //网易的

Docker客户端:192.168.1.160;

Docker私有仓库服务器:192.168.1.161

1.在服务端192.168.1.161上拉取仓库镜像:registry

注:如果你是刚刚安装ubuntu环境的话,最好配置apt源,并且更新:sudo apt  update;sudo apt upgrade

[root@localhost ~]# docker pull registry 
查看是否下载成功:
sudo docker images

2.在服务端192.168.1.161运行docker私有仓库

下载后以后启动该容器,可以将容器内的数据映射挂载在自己指定的目录上,这里以/opt/data/registry为宿主机存储的目录

mkdir -p /opt/data/registry  //创建目录

[root@localhost ~]# docker run -d -v /opt/data/registry:/var/lib/registry -p 5000:5000 --restart=always --privileged=true --name private_registry registry:latest

执行结果:06a972de6218b1f1c3bf9b53eb9068dc66d147d14e18a89ab51db13e339d3dc9

 -d : 让容器可以后台运行

-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
-v:把宿主机的opt/data/registry目录绑定 到 容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了(前者是宿主机的端口号,后者是容器的端口号);
--restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
--name private_registry:创建容器命名为private_registry,你可以随便命名;
registry:latest:这个是刚才pull下来的镜像;

如果成功执行,则表示我们的docker私有仓库搭建成功。

下面对这条命令的部分内容做下说明。

/registry表示宿主机目录,该目录如果不存在会自动创建。

docker -v 宿主机目录:容器目录

在网上看到的解释:把宿主机的目录挂载到容器中或者把docker 容器中某目录的数据 加载到 宿主机的某个目录。这样做的目的是为了防止docker私有仓库这个容器被删除时,仓库里的镜像也会被删除。

3.然后查看是否成功启动该容器

sudo docker ps

4.在客户端制作镜像

以hello-world为例,先把它拉取下来

[root@localhost ~]# docker pull hello-world

给hello-world镜像打个tag,表示新的版本

[root@localhost ~]# docker tag hello-world 192.168.1.161:5000/hello-world:latest 

5.将新的hello-world镜像上传到私有仓库

[root@localhost ~]# docker push 192.168.1.161:5000/hello-world:latest

发现会报以下错误:

The push refers to a repository [192.168.1.161:5000/hello-world]
Get https://192.168.1.161:5000/v1/_ping: http: server gave HTTP response to HTTPS client

原因是docker私有仓库服务器,默认是基于https传输的,所以我们需要在客户端192.168.1.160做相关设置,不使用https传输

[root@localhost ~]# vi /etc/docker/daemon.json

将下面的代码放进去保存并退出。

"insecure-registries":["192.168.1.161:5000"]

最终如下所示:

{
        "registry-mirrors": ["https://njrds9qc.mirror.aliyuncs.com"],
        "insecure-registries":["192.168.1.161:5000"]
}

注:如果你找不到daemon.json,那么可以 vim  /etc/default/docker

在DOCKER_OPTS=" --registry-mirror=https://njrds9qc.mirror.aliyuncs.com  --insecure-registry 192.168.1.161:5000"这里添加,这里代表私服IP。

 

 

依次执行下面两条命令,重新启动docker:

[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker

再次执行推送命令:

[root@localhost ~]# docker push 192.168.1.161:5000/hello-world:latest

6.在私有仓库192.168.1.161查看上传的镜像

[root@localhost repositories]# ls /opt/data/registry/docker/registry/v2/repositories

或者在客户端执行以下命令查看--列出所有镜像:

[root@localhost ~]# curl http://192.168.1.161:5000/v2/_catalog

会输出:

{"repositories":["hello-world"]}

列出hello-world镜像有哪些tag:

[root@node ~]# curl  http://172.18.18.90:5000/v2/hello-world/tags/list
{"name":"hello-world","tags":["v1",“latest"]}

好,大功告成。

7.测试:

案例一:

1.拉取一个镜像并打tag(以busybox为例,因为busybox比较小)

sudo docker pull busybox:latest   //拉取镜像
sudo docker tag busybox:latest 192.168.147.129:5000/busybox

2.提交tag镜像到自己的本地镜像仓库

sudo docker push 192.168.147.129:5000/busybox

3.删除所有的关于busybox镜像并查看

sudo docker rmi busybox 192.168.147.129:5000/busybox  //删除busybox镜像
sudo docker images //查看是否还有busybox镜像的信息

4.从本地镜像仓库pull busybox镜像并查看

sudo docker pull 192.168.147.129:5000/busybox
sudo docker images //查看192.168.147.129:5000/busybox镜像的信息
 

案例二:

推送镜像到私有仓库

    接下来我们在客户端先下载一个镜像,再将这个镜像推送到私有仓库中去;
    登录客户端机器。

    执行命令docker pull tomcat,从hub.docker.com下载最新版本的tomcat镜像,如下图:
   

    下载完毕后,执行docker images查看镜像的信息,如下图:
 

    如上图红框所示,这个镜像的ID是3dcfe809147d,所以我们执行以下命令,给这个镜像添加一个带有私有仓库IP的TAG,这样后面才能成功推送到私有仓库:

docker   tag   3dcfe809147d   192.168.119.148(服务器地址):5000/tomcat

    再执行docker images查看镜像的信息,如下图,出现了一个新的镜像,REPOSITORY是192.168.119.148:5000/tomcat:
   

    执行以下命令进行推送:

docker push 192.168.119.148:5000/tomcat

可以看到顺利进行中,如下图:

    推送成功后,在客户端(docker-app)和服务器(docker-registor)上分别执行curl -X GET http://192.168.119.148:5000/v2/_catalog,查看私有仓库的镜像信息,都能见到如下内容:


使用私有仓库的镜像

    在docker-app机器上,先执行以下命令将本地镜像删掉:

docker rmi 192.168.119.148:5000/tomcat tomcat

    再执行以下命令,用私服上的镜像来创建一个容器,映射8080端口:

docker run --name tomcat001 -p 8089:8080 -idt 192.168.119.148:5000/tomcat

    本地没有镜像就去私服下载,如下图:

    docker-app的IP是192.168.119.155,所以在当前电脑上打开浏览器,输入:192.168.119.155:8089,可以看到下图熟悉的tomcat欢迎页:


 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值