一.私有仓库建立
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
[root@localhost ~]# cat /etc/docker/daemon.json
{
"insecure-registries": ["192.168.100.129:5000"],
"registry-mirrors": ["https://13iz3smq.mirror.aliyuncs.com"]
}
systemctl restart docker
docker create -it registry /bin/bash
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c494601428f5 registry "/entrypoint.sh /bin…" 6 seconds ago Created
//宿主机的/data/registry自动创建挂载容器中的/tmp/registry
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
//更改标记为192.168.100.129:5000/nginx
docker tag nginx:latest 192.168.100.129:5000/nginx
//上传
docker push 192.168.100.129:5000/nginx
//获取私有仓库列表
curl -XGET http://192.168.100.129:5000/v2/_catalog
//显示上传成功
{"repositories":["nginx"]}
//测试私有仓库下载
docker pull 192.168.100.129:5000/nginx
二.Docker的数据管理
1.Docker数据卷
数据卷是一个供容器使用的特殊目录,位于容器中可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类型于linux下对目录进行的mount操作。
在docker run命令中使用:
- -v 可以在容器中创建数据卷,多次使用-v选项可创建多个数据卷
- -name 可以给容器创建一个友好的自定义名称
注意:宿主机本地目录的路径必须使用绝对路径,如果路径不存在,docker会自动在宿主机创建相应的路径。
docker pull centos
//宿主机目录/var/www挂载容器中的/data1
docker run -v /var/www:/data1 --name web1 -it centos /bin/bash
[root@b8bb6784e268 /]# cd /data1/
[root@b8bb6784e268 data1]# touch aaa
[root@b8bb6784e268 data1]# exit
//退出容器,会主机查看文件是否存在
[root@localhost ~]# cd /var/www/
[root@localhost www]# ls
aaa
2.数据卷容器
如果我们需要在容器之间共享一些数据,最简单的方法就是使用使用数据卷容器。数据卷容器就是一个普通的容器,专门提供数据卷给其他容器使用。使用方法:
- 首先创建一个容器作为数据卷容器
- 然后在其他容器创建时使用 --volumes-from 挂载数据卷容器中的数据卷使用
//数据卷容器
docker run --name web100 -v /data1 -v /data2 -it centos /bin/bash
//新容器挂载数据卷容器web100
docker run -it --volumes-from web100 --name db1 centos /bin/bash
三.Docker网络通信
1.端口映射
在启动容器的时候,如果不指定对应的端口,在容器外将无法通过网络来访问容器内的服务。Docker提供端口映射机制来将容器内的服务提供给外部网络访问,实质上就是将宿主机的端口映射到容器中,使得外部网络访问宿主机的端口便可访问容器内服务。
实现端口映射,需要在运行docker run 命令时使用-P(大写)选项实现随机映射,Docker会随机映射一个端口,从32768开始,每次加1.
#-P不指定固定端口(大写P)
docker run -d -P httpd:centos
-p指定固定端口(小写p)
docker run -d -p 49280:80 httpd:centos
docker ps -a
2.容器互联
容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道从而实现容器互联。简单点说,就是会在源容器和接收容器之间建立一条隧道,接收容器可以看到源容器指定的信息。
在运行docker run 命令时使用–link 选项可以实现容器之间的互联通信
格式为:–link name:aiias
其中name是要连接的容器名称,alias是这个连接的别名
注意:容器互联是通过容器名称来执行的,–name选项可以给容器创建一个友好的名称,这个名称是唯一的。如果已经命名了一个相同名称的容器,当要再次使用这个名称时,需要使用docker rm 命令来删除之前创建的同名容器。
注意:Docker 在两个互联的容器之间创建了一条安全隧道,而且不用映射他们的端口到宿主机上,从而避免暴露端口给外部网络。
#创建源容器
docker run -itd -P --name web11 centos:7 /bin/bash //创建并运行容器取名web1,端口号自动映射
#创建接收容器
docker run -itd -P --name web22 --link web11:web11 centos:7 /bin/bash
//创建并运行容器取名web22,链接到web1和其通信
#测试容器互联
进web22 容器 ping web11,可以ping通,证明两个容器可以互联