70.容器分配ip
Posted liuzhanghao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了70.容器分配ip相关的知识,希望对你有一定的参考价值。
1.创建容器并赋予ip操作:
# 启动容器
linux.LinuxSend(‘docker run --privileged -itd --name %s --net=none -h localhost jmeter_influxdb_grafana:0.4 /usr/sbin/init‘ %info[‘dockername‘])
# 设置ip,子网掩码,网管
linux.LinuxSend(‘pipework br0 %s %s/%s@%s‘ % (info[‘dockername‘], info[‘dockerip‘], info[‘mask‘], info[‘gateway‘]))
2.docker容器ssh配置:
只能宿主机连接
docker search centos
docker pull centos:centos7.8.2003
1.# ssh默认的端口为22,我们将docker中centos的22端口映射到宿主机的5000端口
docker run -d -p 5001:22 --name centos7.8-base --privileged=true centos:centos7.8.2003 /usr/sbin/init
2. # 进入容器
docker exec -it centos76-javabase /bin/bash
3. # 安装常用工具
yum install -y openssh-server vim lrzsz wget gcc-c++ pcre pcre-devel zlib zlib-devel ruby openssl
openssl-devel patch bash-completion zlib.i686 libstdc++.i686 lsof unzip zip
4.service安装
yum install initscripts -y
5.ifconfig安装
yum install net-tools.x86_64
6.openssh安装
yum install openssh-server -y
yum -y install openssh-clients
7.启动sshd服务(这个是ssh服务的进程,但是一般会报错)
/usr/sbin/sshd -D
8.报错之执行下面的命令,将ssh服务的各种公私钥生成
ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ‘‘?
ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ‘‘
ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ‘‘
9.启动sshd,并查看22端口是否开启
systemctl start sshd /service start sshd
ss -an|grep 22
10.开启docker-centos76 ssh远程连接
修改/etc/ssh/sshd_config 文件 38行
RSAAuthentication yes #启用 RSA 认证
PubkeyAuthentication yes #启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径(和上面生成的文件同)
PermitRootLogin yes #root能使用ssh登录
11.给容器配置密码
passwd root
12.将修改后的容器制作成一个基础镜像,以供生成容器
docker commit -m ‘install openssh‘ -a ‘Docker Newbee‘ f8513ec39154 centos6-jdk7:ssh
其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建
镜像的容器的ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。
13.使用制作好的镜像生成容器
将新的镜像启动,并将docker服务器的50001端口映射到容器的22端口上
docker run -d -p 50001:22 --name centos1 base-centos:v1 /usr/sbin/sshd -D
其中50001是docker容器的端口,22是宿主机的端口
14.在宿主机上连接容器
[root@docker-test docker]# ssh root@172.17.0.2
3.pipework分配容器ip:
其他服务器可以连接
1.需求
在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求。要实现这个需求,我们只要将
Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了。
下面我们就使用pipework工具来实现这一需求。
2.安装pipework
$ git clone https://github.com/jpetazzo/pipework
$ sudo cp pipework/pipework /usr/local/bin/
3.pipework使用
首先创建一个容器
$ sudo docker run -itd --name centos1 base-centos:v1 /bin/bash
4.查看此时服务器的ip
# 只用lo和eth0(这是我调整的,你的有可能是ens33)和docker0网卡
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether 00:0c:29:3d:1e:4d brd ff:ff:ff:ff:ff:ff
inet6 fe80::e6dc:247e:5d7c:2522/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:7f:0a:21:e6 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:7fff:fe0a:21e6/64 scope link
valid_lft forever preferred_lft forever
5.使用pipework为容器配置ip
pipework br0 centos1 10.20.70.230/24@10.20.70.2
这一步中,pipework首先会检查主机是否存在br0网桥,若不存在,就自己创建一个。这里以”br”开头,所以创建的是
Linux bridge。如果以”ovs”开头,就会创建OpenVswitch网桥。
另外,如果主机环境中有DHCP服务,也可以通过DHCP的方式获取IP
# pipework br0 test dhcp
6.再次查看服务器ip
多出来一个br0网卡,只需要让它有这个网卡就行了,分配的ip是随机的
12: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:3d:1e:4d brd ff:ff:ff:ff:ff:ff
inet 170.17.0.3/24 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::7411:7ff:fefc:3172/64 scope link
valid_lft forever preferred_lft forever
7.桥接网络
将主机eth0桥接到br0上,并把eth0的IP配置在br0上。这里由于是远程操作,中间网络会断掉,所以放在一条命令中执行。
yum install bridge-utils -y
sudo ip addr add 10.20.70.230/24 dev br0; sudo ip addr del 10.20.70.230/24 dev eth0; sudo brctl addif br0 eth0; sudo ip route del default; sudo ip route add default via 10.20.70.2 dev br0
8.分配容器ip
注:上面这一步只有在第一次绑定容器地址的时候会用到,一旦执行过后,就会在主机上把原来eth0的IP地址分配给br0,然后把eth0
和br0连起来。所以以后再创建容器就不需要执行这一步了。而只需要执行下面的绑定容器地址的命令就可以了。
pipework br0 centos1 10.20.70.235/24@10.20.70.2
9.查看宿主机ip a
会发现br0将原本eth0的ip替代了.
12: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:3d:1e:4d brd ff:ff:ff:ff:ff:ff
inet 10.20.70.230/24 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::7411:7ff:fefc:3172/64 scope link
valid_lft forever preferred_lft forever
10.通过其他服务器连接容器
230宿主机
235容器ip
222其他服务器
通过222连接235 ssh root@10.20.70.235你会发现可以连接了,虽然有点慢,可以自己调整/etc/ssh/sshd_config文件.
参考:
https://www.qedev.com/cloud/139821.html
以上是关于70.容器分配ip的主要内容,如果未能解决你的问题,请参考以下文章