目录
一、docker网络
1、网络模式分类
Host :与宿主机共享网络名称空间/网络协议栈(通过共享宿主机的ip,使用不同的端口)
Container:多个容器之间共享一个network namespaces
None:自闭空间
Bridge:默认模式通过veth,对连接容器与dockero网桥,网桥分配给容器IP,同时docker0作为“局域网”内容器的网关,最后和宿主机网卡进行通讯
2、命令
查看网络模式列表
docker network ls
查看容器信息
docker inspect 容器ID
自定义网络固定ip(需要先定义network类型,其次name和ip不能重复)
docker network create --subnet=172.18.0.0/16 ly
docker run -itd --name test2 --net ly --ip 172.18.0.10 nginx:latest /bin/bash
#暴露端口
-p自定义端口(宿主机端口:容器内端口)
-P随机端口(-P 49153起始49153到65535)
暴露端口8081,相当于把容器的80端口映射到宿主机上的8081端口
docker run -itd -p 8081:80 nginx /bin/bash ( docker 0)
docker run -itd -P nginx /bin/bash
在宿主机环境执行容器内命令,进入这个容器并启动nginx #-c:在宿主机环境执行容器内命令
docker exec -it容器ID /bin/ bash -c " nginx'
docker exec容器ID/容器name执行的命令
怎么把宿主机的文件传入到容器内部
docker cp 源文件路径 容器ID:目标文件路径
docker cp /opt/1.txt 容器ID:/home
进入容器没有systemctl命令解决方法
docker run -itd --name centos7 --privileged=true centos:7 /sbin/init
# /sbin/init 内核启动时主动呼叫的第一个进程
#可以使用docker inspect 容器ID
提权后(进入就可以使用systemctl了)
docker exec -it 容器id /bin/bash
yum install net-tools # 安装后可以使用ifconfig
yum install vim -y #安装后可以使用vim编辑器
二、docker数据卷
数据卷是一个提供容器使用的特殊目录
我们之前用过nfs,其实效果差不多,就是我们要多次修改docker内部的文件时候,我们多次使用exec进入改动,就相当于经常用ssh免密登录一样,存在很大的危险系数
使用场景:修改宿主机的配置文件,容器运行是需要的文件,需要运行的脚本,日志
挂载数据卷
格式:docker run -v 宿主机目录:挂载容器中的目录
#例
docker run -it -v /var/www/html:/data1 --name test01 centos:7 /bin/bash
#这时候另开一个终端,去宿主机创建一个abc
cd /var/www/html
touch abc
#再回到上一个终端查看/data1目录下就会多出一个abc
数据卷容器
原理:让两个容器实现数据共享
1.创建一个数据卷容器,指定名字为web100,两个卷:/data1 和 /data2
docker run -it --name web100 -v /data1 -v /data2 centos:7 /bin/bash
2.另起一个终端,将这个数据卷容器挂载到centos:7的容器上
docker run -it --name db1 --volumes-from web100 centos:7 /bin/bash
#此时 ls / 查看就会发现有 /data1 和 /data2 两个目录
三、容器互联(使用centos镜像)
docker run -itd -P --name web1 centos:7 /bin/bash //创建并运行容器取名web1,端口号随机映射
docker exec -it 容器ID /bin/bash
#另起一个终端(link web1:web1 也可通信)
docker run -itd -P --name web2 --link web1:web2 centos:7 /bin/bash //创建并运行容器取名web2,链接到web1和其通信
#--link:打通隧道
docker exec -it 容器ID /bin/bash
#两个容器都下载
yum -y install net-tools //各自下载ifconfig的工具
验证:
进web2容器 ping web1
总结
docker主要是四种网络模式,
第一就是host,共用宿主机的ip,但是不同端口;
第二,是container,多个容器共用一个指定容器的ip;
第三,none就是啥也不是,什么都没有;
第四,就是bridge,就是通过veth,在新建一个容器的时候,会有一个docker0,在其上有一个端口,和容器上一个端口进行转换;
常用命令
查看网络模式:docker network ls
查看容器信息:docker inspect 容器id
自定义网络固定ip:docker network create --subnet=172.18.0.0/16 ly;先定义网段类型;
docker exec -itd --name test --net ly --ip 172.18.0.10 nginx:latest /bin/bash,指定ip,进入容器
暴露端口:docker run -itd -p 8081:80 nginx /bin/bash
在宿主机启动Nginx:docker exec -it容器ID /bin/ bash -c nginx
把宿主机文件传到容器:docker cp 源文件路径 容器ID:目标文件路径
容器内安装部分功能:docker run -itd --name centos7 --privileged=true centos:7 /sbin/init,先提提权;在安装部分功能yum install net-tools
挂载数据卷:docker run -v 宿主机目录:容器目录 --name 名称 容器 /bin/bash
两个容器共享:docker run -it --name web100 -v /data1 -v /data2 centos:7 /bin/bash (
docker run -it --name db1 --volumes-from web100 centos:7 /bin/bash)
容器互联:docker run -itd -P --name web1 centos:7 /bin/bash(做link;docker run -itd -P --name web2 --link web1:web2 centos:7 /bin/bash)