美文网首页
六、Docker命名空间

六、Docker命名空间

作者: 一直想上树的猪 | 来源:发表于2019-09-17 14:44 被阅读0次

一、准备工作

我需要先准备两台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

其目录结构如下:


目录结构

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

二、运行docker

运行命令:

vagrant up
vagrant status

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


vagrant status

进入一个虚拟机:

vagrant ssh docker-node1

进来之后输入:

sudo docker ps

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


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,可以看到这个容器


容器

然后进入container中:

sudo docker exec -it a05 /bin/sh
namespace

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

2.基本概念

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


接口

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


创建test2
进入test2容器里面,是可以ping通test1的
ping通test1

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

3.底层

查看networknamespace

sudo ip netns list

增加networknamespace

sudo ip netns add test1

删除networknamespace

sudo ip netns delete test1

相关文章

网友评论

      本文标题:六、Docker命名空间

      本文链接:https://www.haomeiwen.com/subject/xihhyctx.html