Docker私有仓库搭建、Docker数据卷、和Docker容器互联互通

一、Docker私有仓库搭建

1.首先需要下载registry镜像到本地

[root@localhost ~]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
cbdbe7a5bc2a: Pull complete 
47112e65547d: Pull complete 
46bcb632e506: Pull complete 
c1cc712bcecd: Pull complete 
3db6272dcbfa: Pull complete 
Digest: sha256:8be26f81ffea54106bae012c6f349df70f4d5e7e2ec01b143c46e2c03b9e551d
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest

2.在daemon.json中添加仓库路径
vi /etc/docker/daemon.json,
“insecure-registries”: [“镜像仓库的IP地址:5000”],
如果下面有镜像加速,则注意后面要加逗号。

[root@localhost ~]# cat /etc/docker/daemon.json 
{
  "insecure-registries": ["http://20.0.0.16:5000"],
  "registry-mirrors": ["https://hd7w96z1.mirror.aliyuncs.com"]
}

3,重启docker容器。

[root@localhost ~]# systemctl restart docker

4,创建registry容器

[root@localhost ~]# docker create -it registry /bin/bash
75330cb76d53198a67b1e0e958558686e42464426a79526d1cc058711d55dd56

5.运行容器并与本地存储进行挂载

[root@localhost ~]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
cefa34a3e52ec9aa17d1ba8525a08251777efd4cdd774c2c71e75c27004c1a0a

6.修改要上传的镜像标签

[root@localhost ~]# docker tag centos:7 20.0.0.16:5000/centos

7,上传镜像
docker push 仓库IP地址:5000/centos

[root@localhost ~]# docker push 20.0.0.16:5000/centos
The push refers to repository [20.0.0.16:5000/centos]
174f56854903: Pushed 
latest: digest: sha256:e4ca2ed0202e76be184e75fb26d14bf974193579039d5573fb2348664deef76e size: 529

8 .用curl命令查看镜像是否在仓库里
curl -XGET http://镜像仓库IP地址:5000/v2/catalog

[root@localhost ~]# curl -XGET http://20.0.0.16:5000/v2/_catalog
{"repositories":["centos"]}

二、Docker数据卷

2.1基于容器和宿主机

2.1.1 docker数据卷应用场景
  • 在多个容器之间共享数据,多个容器可以同时以只读或者读写的方式挂载统一个数据卷,从而共享数据卷中的数据
  • 当宿主机不能保证一定存在某一个目录或一些固定的文件路径时,使用数据卷可以规避这种限制带来的问题
  • 当想把容器中的数据存储在宿主机之外的地方时,比如远程主机上和云存储上
  • 当你需要把容器数据在不同宿主机之间备份、恢复或迁移时,数据卷是很好的选择
2.1.2 数据覆盖问题

如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中
如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录会显示数据卷中的数据。如果原来容器中的目录有数据,那么原始数据会被隐藏掉

在这里插入图片描述

2.1.3 创建数据卷示例
1、将宿主机目录中的/data1挂载到容器中的/data2中(如果目录不存在都会自动创建)
[root@localhost ~]# docker run -v /data1:/data2 --name web1 -it centos:7 /bin/bash
2、在容器中/data2目录下创建文件进行测试
[root@5f87b2db6dd6 /]# cd /data2/
[root@5f87b2db6dd6 data2]# touch 111.txt
[root@5f87b2db6dd6 data2]# exit
3、回到宿主机/data1查看
[root@localhost ~]# ls /data1
111.txt

再来验证一下

[root@localhost ~]# docker ps -a   ##centos:7容器必须要时运行状态才能进入
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                    NAMES
5f87b2db6dd6        centos:7            "/bin/bash"              2 minutes ago       Exited (0) 2 minutes ago                               web1

[root@localhost ~]# docker start 5f87b2db6dd6
5f87b2db6dd6
[root@localhost ~]# docker exec -it 5f87b2db6dd6 bash    ##进入centos:7容器
[root@5f87b2db6dd6 /]# ll
total 12
-rw-r--r--.   1 root root 12114 Nov 13 01:55 anaconda-post.log
lrwxrwxrwx.   1 root root     7 Nov 13 01:53 bin -> usr/bin
drwxr-xr-x.   2 root root    21 Nov 26 09:06 data2     ##生成的目录
drwxr-xr-x.   5 root root   360 Nov 26 09:09 dev
drwxr-xr-x.   1 root root    66 Nov 26 09:05 etc
drwxr-xr-x.   2 root root     6 Apr 11  2018 home
lrwxrwxrwx.   1 root root     7 Nov 13 01:53 lib -> usr/lib
lrwxrwxrwx.   1 root root     9 Nov 13 01:53 lib64 -> usr/lib64
drwxr-xr-x.   2 root root     6 Apr 11  2018 media
drwxr-xr-x.   2 root root     6 Apr 11  2018 mnt
drwxr-xr-x.   2 root root     6 Apr 11  2018 opt
dr-xr-xr-x. 226 root root     0 Nov 26 09:09 proc
dr-xr-x---.   1 root root    27 Nov 26 09:06 root
drwxr-xr-x.  11 root root   148 Nov 13 01:55 run
lrwxrwxrwx.   1 root root     8 Nov 13 01:53 sbin -> usr/sbin
drwxr-xr-x.   2 root root     6 Apr 11  2018 srv
dr-xr-xr-x.  13 root root     0 Nov 12 07:10 sys
drwxrwxrwt.   7 root root   132 Nov 13 01:55 tmp
drwxr-xr-x.  13 root root   155 Nov 13 01:53 usr
drwxr-xr-x.  18 root root   238 Nov 13 01:54 var
[root@5f87b2db6dd6 /]# cd data2/
[root@5f87b2db6dd6 data2]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 26 09:06 111.txt   ##刚才创键的文件
[root@5f87b2db6dd6 data2]# exit     ##退出
exit 
[root@localhost ~]# cd /data1    ###回到宿主机目录
[root@localhost data1]# ll
总用量 0
-rw-r--r--. 1 root root 0 11月 26 06:06 111.txt    ##同步生成的文件

2.2 基于容器和容器之间

在这里插入图片描述
1,创建数据库容器web110

[root@localhost ~]# docker run --name web110 -v /data1 -v /data2 -it centos:7 /bin/bash
[root@fdfb68b5acc6 /]# exit
exit

2,新容器web100挂载数据卷容器web110上

[root@localhost ~]# docker run -it --volumes-from web110 --name web100 centos:7 /bin/bash
[root@ed1395daa78b /]# ll
total 12
-rw-r--r--.   1 root root 12114 Nov 13 01:55 anaconda-post.log
lrwxrwxrwx.   1 root root     7 Nov 13 01:53 bin -> usr/bin
drwxr-xr-x.   2 root root     6 Nov 26 10:45 data1
drwxr-xr-x.   2 root root     6 Nov 26 10:45 data2
[root@ed1395daa78b /]# cd data1   ##在目录中创建文件
[root@ed1395daa78b data1]# ll
total 0
[root@ed1395daa78b data1]# touch 123.txt
[root@ed1395daa78b data1]# touch abc.txt
[root@ed1395daa78b data1]# cd ../data2
[root@ed1395daa78b data2]# touch 1234.txt
[root@ed1395daa78b data2]# touch 123456.txt
[root@ed1395daa78b data2]# exit
exit

3,在新容器web100的/data1和/data2中创建文件进行测试

[root@localhost ~]# docker exec -it fdfb68b5acc6 bash
[root@fdfb68b5acc6 /]# ll
total 12
-rw-r--r--.   1 root root 12114 Nov 13 01:55 anaconda-post.log
lrwxrwxrwx.   1 root root     7 Nov 13 01:53 bin -> usr/bin
drwxr-xr-x.   2 root root    36 Nov 26 10:49 data1
drwxr-xr-x.   2 root root    40 Nov 26 10:50 data2
[root@fdfb68b5acc6 /]# cd data2     ##也生成了文件
[root@fdfb68b5acc6 data2]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 26 10:50 1234.txt
-rw-r--r--. 1 root root 0 Nov 26 10:50 123456.txt
[root@fdfb68b5acc6 data2]# cd ../data1
[root@fdfb68b5acc6 data1]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 26 10:49 123.txt
-rw-r--r--. 1 root root 0 Nov 26 10:49 abc.txt

三,Docker容器的互联互通

3.1 端口映射

docker run -d -P httpd:centos    (大写的P)
//-P:随机某个端口(从32678开始)
docker run -d -p 1261:80 httpd:centos   (小写的p)
//-p:具体指定映射哪个端口(1216)


[root@localhost ~]# docker run -d -P httpd:centos   ##随机端口的从32678开始
3b44d4a78ea00f8d67d0503c043b7f2dc8ba3d9f242f8f9da818dfccd6c6e0b4
[root@localhost ~]# docker run -d -p 1314:80 httpd:centos   ##指定端口
ff2860a25a687a078dec162fb91b1c5357d75ac38e9d27b42cd247570a6bde52
[root@localhost ~]# docker ps -a
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                    NAMES
ff2860a25a68        httpd:centos        "/run.sh"                14 minutes ago      Up 14 minutes               0.0.0.0:1314->80/tcp     elegant_sammet
3b44d4a78ea0        httpd:centos        "/run.sh"                15 minutes ago      Up 15 minutes               0.0.0.0:32768->80/tcp    fervent_curie

3.2 容器互联互通(例如centos镜像)

1,创建容器web11

[root@localhost ~]# docker run -dit --name web11 centos:7 /bin/bash
df220a05c04f5591626b06a5327a547284e77c09dd60e9065ecec81640807254

2,基于容器web11创建容器web111

[root@localhost ~]# docker run -it --name web111 --link  web11 centos:7 /bin/bash

3 ,验证

[root@9c7868ddcd2b /]# ping web11
PING web11 (172.17.0.7) 56(84) bytes of data.
64 bytes from web11 (172.17.0.7): icmp_seq=1 ttl=64 time=0.038 ms
64 bytes from web11 (172.17.0.7): icmp_seq=2 ttl=64 time=0.058 ms
64 bytes from web11 (172.17.0.7): icmp_seq=3 ttl=64 time=0.041 ms
^C
--- web11 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.038/0.045/0.058/0.011 ms

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值