Docker网络配置
网络模式
Docker 使用了 Linux 的 Namespaces 技术来进行资源隔离,如 PID Namespace 隔离进程,Mount Namespace 隔离文件系统,Network Namespace 隔离网络等。一个 Network Namespace 提供了一份独立的网络环境,包括网卡、路由、Iptable 规则等都与其他的 Network Namespace 隔离。一个 Docker 容器一般会分配一个独立的 Network Namespace
host
如果启动容器的时候使用 host 模式,那么这个容器将不会获得一个独立的 Network Namespace,而是和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的IP 和端口。
container
这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信
none
这个模式和前两个不同。在这种模式下,Docker 容器拥有自己的 Network Namespace,但是,并不为 Docker 容器进行任何网络配置。也就是说,这个 Docker 容器没有网卡、IP、路由等信息。需要我们自己为 Docker 容器添加网卡、配置 IP 等。
bridge
bridge 模式是 Docker 默认的网络设置,此模式会为每一个容器分配 Network Namespace、设置 IP 等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上
使用pipework配置静态IP
# --net=none
[root@SR ~]# unzip pipework-master.zip # 解压
[root@SR ~]# cp /root/pipework-master/pipework /usr/local/bin/ # 添加命令环境变量
[root@SR ~]# docker run -itd --net=none --privileged=true centos /bin/bash
'''
privileged=true:是否让容器拥有root权限
'''
[root@SR ~]# docker run -it centos:latest bash # 没有开启root权限
[root@fe0a5863aba5 /]# ls /dev
'''console core fd full mqueue null ptmx pts random shm stderr stdin stdout tty urandom zero
查看文件内容较少
'''
[root@SR ~]# docker run -it --privileged centos:latest bash # 启用root进行运行
[root@8b711bcca77c /]# mount /dev/sda1 /opt/ # 能挂载成功
[root@SR ~]# pipework br0 cdfb47497dfe 10.1.1.111/24 # 配置静态IP IP+掩码@网关
Docker私有化仓库
有时候使用 Docker Hub 这样的公共仓库可能不方便(有时候无法访问),用户可以创建一个本地仓库供私人使用,这里使用官方提供的工具 docker-registry 来配置私有库
配置
[root@SR ~]# docker pull registry # 拉取仓库镜像
# 使用5000端口该目录做映射
[root@SR ]# docker run -d -p 5000:5000 -v /opt/registry:/var/lib/registry registry:latest
[root@SR]# netstat -antup | grep 5000 # 查看监听端口
[root@SR ~]# vim /etc/docker/daemon.json # 配置仓库地址
{
"insecure-registries": [ "10.1.1.2:5000" ]
}
[root@SR ~]# systemctl restart docker
# 上传镜像
[root@SR ~]# docker push 10.1.1.3:5000/centos