频道澳门葡京手机版网址
登录注册
澳门葡京手机版网址 > 网络 > 其他 > 正文

[虚拟化]Docker镜像制作虚拟机+虚拟网络+桥接模式配置

2018-06-26 16:21:19         来源:小石头的幸福—2014  
收藏   我要投稿

本次任务:

1:使用docker镜像制作可以ssh登录的虚拟机

2:配置虚拟机桥接网络,独立ip可以保证外部登录

制作虚拟机dockfile文件

#Dockerfile
FROM centos:centos7.2.1511
MAINTAINER xiaoshitou
RUN yum install passwd openssl openssh-server openssh-clients net-tools nc net-tools wget -y
RUN echo '123456' | passwd --stdin root
RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN sed -ri 's/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/g' /etc/pam.d/sshd
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
RUN echo 'root:123456' | chpasswd
#RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum clean all
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
ADD run.sh /run.sh
RUN chmod 777 /run.sh
EXPOSE 22
EXPOSE 80
EXPOSE 8080
EXPOSE 8090
EXPOSE 3306

CMD ["/usr/sbin/init","/run.sh"]
#End

制作启动文件run.sh

#!/bin/bash
/usr/sbin/sshd -D

制作镜像
docker build -t centos7-ssh .

创建并启动容器
docker create --name=centos7-ssh -p 127.0.0.1:3333:22 -p 127.0.0.1:3334:8090 -p 127.0.0.1:3335:3006 centos7-ssh

启动容器
docker start centos7-ssh

测试登陆
ssh root@127.0.0.1 -p 3333

docker默认是nat地址转换模式
--更改网络类型为桥接【目的是让容器网络不走默认的docker0 nat地址转换,每个容器分配一个独立的外网访问ip 】
1、>宿主机创建桥接器 brctl addbr br-int 【注意,前提是要有桥接网卡eth1】
>桥接网络 brctl addif br-int eth1
>启动 ifconfig br-int up
2、创建veth设备(docker-br是连接桥接器br-int ,eth0-ns是连接docker容器接口)
>创建两个接口 ip link add name docker-br type veth peer name eth0-ns
>启动 ifconfig docker-br up
>添加端口到网桥 brctl addif br-int docker-br 桥接模式的时候,要给桥接器配置一个物理接口直达网络
课上bug,是桥接器没有物理接口eth1,这样,容器的ARP协议数据包能到br-int,最终ARP包被内核丢弃,
因为网络协议原理定义,arp请求的目标地址不是本机地址时.做丢弃处理
3、映射网络命名空间,目的是为了往一个命名空间添加一个网络接口(网线) mkdir -p /var/run/netns
>创建新的docker容器,不用指定端口,因为配置桥接模式,不用配置默认的nat网络接口(--net=none),而是手工添加桥接接口
> docker create --name=ssh02 --net=none centos7-ssh
> 启动 docker start centos7-ssh
> 查看进程,因为都是在一个命名空间,可随便挑选已进程,比如 16319
[root@localhost proc]# docker top d3d1d261830c
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                16295               16277               0                   15:02                                  00:00:00            /bin/bash /run.sh
root                16319               16295               0                   15:02                                  00:00:00            /usr/sbin/sshd -D
[root@localhost proc]#
> 查看进程16319的命名空间 cd /proc/16319/ns net为 4026532223
总用量 0
lrwxrwxrwx 1 root root 0 6月  20 15:06 ipc -> ipc:[4026532220]
lrwxrwxrwx 1 root root 0 6月  20 15:06 mnt -> mnt:[4026532218]
lrwxrwxrwx 1 root root 0 6月  20 15:06 net -> net:[4026532223]
lrwxrwxrwx 1 root root 0 6月  20 15:06 pid -> pid:[4026532221]
lrwxrwxrwx 1 root root 0 6月  20 15:06 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 6月  20 15:06 uts -> uts:[4026532219]
[root@localhost ns]#         
>隐射docker自己命名空间到系统目录下,为的是ip能看到和访问 这个命名空间的东西
格式: ln -sf /proc/{docker_pid}/ns/net /var/run/netns/ssh02
备注 ssh02可以随便命名
运行前检查 ip netns
运行 ln -sf /proc/16319/ns/net /var/run/netns/ssh02
> 将veth另一端加入容器namespace[添加另一个接口到命名空间(插入docker另一头网线]
运行前:进入运行容器ssh2,检查网络
docker exec -it ssh02 /bin/bash
\
宿主机运行 ip link set eth0-ns netns ssh02
运行 容器: ifconfig -a 多出了 eth0-ns接口
或者 宿主机 ip netns exec ssh02 ifconfig -a
>配置容器上该网络信息,添加端口,和主机同一网段:
ip netns exec ssh02 ifconfig eth0-ns 192.168.0.200/24
>如果要访问外网,需要配置默认网关(192.168.0.1为网关地址)
检查: 命名空间ssh02路由表 ip netns exec ssh02 route -n
运行: ip netns exec ssh02 route add default gw 192.168.0.1
\
上一篇:双网卡内外网同时上配置方法
下一篇:IP及网络配置常识点
相关文章
图文推荐

关于大家 | 联系大家 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 澳门葡京手机版网址_澳门新莆京娱乐_www.88807.com - 点此进入--致力于做实用的IT技术学习网站

XML 地图 | Sitemap 地图