六、Docker命名空间

一、准备工作

我需要先准备两台vagrant虚拟机,其vagrantFile如下:
Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.require_version ">= 1.6.0"

boxes = [
    {
        :name => "docker-node1",
        :eth1 => "192.168.205.10",
        :mem => "1024",
        :cpu => "1"
    },
    {
        :name => "docker-node2",
        :eth1 => "192.168.205.11",
        :mem => "1024",
        :cpu => "1"
    }
]

Vagrant.configure(2) do |config|

  config.vm.box = "centos/7"

  boxes.each do |opts|
      config.vm.define opts[:name] do |config|
        config.vm.hostname = opts[:name]
        config.vm.provider "vmware_fusion" do |v|
          v.vmx["memsize"] = opts[:mem]
          v.vmx["numvcpus"] = opts[:cpu]
        end

        config.vm.provider "virtualbox" do |v|
          v.customize ["modifyvm", :id, "--memory", opts[:mem]]
          v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
        end

        config.vm.network :private_network, ip: opts[:eth1]
      end
  end

  config.vm.synced_folder "./labs", "/home/vagrant/labs"
  config.vm.provision "shell", privileged: true, path: "./setup.sh"

end

然后还有个startup.sh

#/bin/sh

# install some tools
sudo yum install -y git vim gcc glibc-static telnet bridge-utils

# install docker
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh

# start docker service
sudo groupadd docker
sudo usermod -aG docker vagrant
sudo systemctl start docker

rm -rf get-docker.sh

其目录结构如下:


15200008-cdebbce5abe3df26.png
目录结构

如果需要labs可以私聊我或者在文下评论。

二、运行docker

运行命令:

vagrant up
vagrant status

可以看到有两个虚拟机处在运行状态:


15200008-c4b912d41142640a.png
vagrant status

进入一个虚拟机:

vagrant ssh docker-node1

进来之后输入:

sudo docker ps

可以发现连接不上,这是因为daemon没有开启的原因


15200008-61a0ab0d0ca934ca.png
docker ps

输入以下命令,即可解决:

sudo systemctl daemon-reload
sudo service docker restart

三、操作

1.创建container
sudo docker run -d --name test1 busybox /bin/sh -c "while true; do sleep 3600; done"

busybox 是一个非常小的linux的image,在里面运行一个shell命令,是一个无线循环,一直执行。
然后会返回一个id,可以看到这个容器


15200008-2f548cbddf03c058.png
容器

然后进入container中:

sudo docker exec -it a05 /bin/sh
15200008-9f1d158402f1283a.png
namespace

运行ip a 命令,可以看到一些地址相关的信息,这些信息就是namespace。

2.基本概念

退出容器之后,在虚拟机中运行ip a命令,可以看到一些接口,而这些接口跟我们在container里面看到的接口是不一样的,而且他们是完全隔离的。我们创建了一个docker容器也就是创建了一个namespace,跟主机的namespace是完全隔离的。


15200008-e5b9973c365d74cb.png
接口

同理,我再创建一个test2的容器,


15200008-0eeabbaaf87e0cd0.png
创建test2

进入test2容器里面,是可以ping通test1的
15200008-2c34a48c4006fc52.png
ping通test1

它们的网络是可以相互通信的。

3.底层

查看networknamespace

sudo ip netns list

增加networknamespace

sudo ip netns add test1

删除networknamespace

sudo ip netns delete test1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值