容器
容器是另外一种轻量级的虚拟化,容器是共用主 机内核,利用内核的虚拟化技术隔离出一个独立的运行环境,拥有独立的一个文件系统,网络空间,进程空间视图等
容器与虚拟机的区别
容器跟虚拟机很相似,但是依然有不同,容器与虚拟机本质的区别是:
容器是进程级别的资源隔离。虚拟机是操作系统级别的资源隔离
Docker
Docker是一个开源的容器化平台,在Linux,Windows,Mac上都可以使用。
Docker可以分为三部分:
Docker client
Docker客户端是命令行工具,它与Docker守护进程(deamon)通信,用于创建、管理和操作Docker容器、镜像、网络等资源。Docker客户端可以在本地或远程计算机上运行,以便与Docker守护进程通信。
Docker deamon
Docker守护进程是运行在主机上的后台进程,负责管理Docker容器、镜像、网络等资源。它通过与Docker客户端通信来响应请求,包括创建、启动、停止、删除容器等操作。
Docker registry
Docker镜像库是Docker镜像(Docker image)的存储库,可以存储和分享Docker镜像
Docker deamon必须运行在Linux上。所以Window或Mac上都是用的是Docker Desktop。Docker Desktop在电脑上创建一个Linux虚拟机,将Docker deamon运行在Linunx上,并为用户提供Docker client,来与Docker deamon进行交互。
docker run命令
docker run …
-d
: 后台运行容器,并返回容器ID-i
: 以交互模式运行容器,通常与-t
同时使用-t
: 为容器重新分配一个伪输入终端,通常与-i
同时使用-p
: 指定(发布)端口映射,格式为:主机(宿主)端口:容器端口这是小写的p
-P
: 随机端口映射,容器内部端口随机映射到主机的高端口这是大写的P
--name=nginx-lb
: 为容器指定一个名称-e username=ritchie
: 设置环境变量--env-file=c:/temp1/t1.txt
: 从指定文件读入环境变量--expose=2000-2002
: 开放(暴露)一个端口或一组端口;--link my_sql:sql_server
: 添加链接到另一个容器-v C:\temp:/data
: 绑定一个卷(volume)冒号左边是宿主机目录格式,右边是Linux目录格式
--rm
退出时自动删除容器
Docker网络
Docker网络有四种类型,分别是:
Bridge
桥接式网络模式,也是默认的网络模式
Host
开放式网络模式,和宿主机共享网络
Container
联合挂载式网络模式,和其他容器共享网络
None
封闭式网络模式,不为容器配置网络
ps.从Windows宿主机是无法ping通Docker容器的,但从容器里可以ping通宿主机。因为容器是在一个Linux虚拟机里,宿主机是看不到的。但是从容器到宿主机是有网关的,所以可以通信。
下面主要讲一下Bridge网络
Bridge网络使用虚拟网桥。连接到同一个网桥上容器是可以互相通信的,不同网桥之间的容器一般是不能互相通信的。
Docker启动时会会默认创建一个bridge网络,如果不自行创建新的网络,那么创建的容器默认都在这个bridge上。
如果不同bridge之间的容器想要通信怎么办:
只需用docker network connect
命令将容器搭到另一个bridge上即可。这样该容器会有不止一个ip地址,同一bridge下的ip可以互相ping通