Code Crafting

There are two equivalence classes of idiots: Those who yearn for the past that never was. AND Those who dream of the future that never will be.

0%

Docker入门与Docker网络

容器

容器是另外一种轻量级的虚拟化,容器是共用主 机内核,利用内核的虚拟化技术隔离出一个独立的运行环境,拥有独立的一个文件系统,网络空间,进程空间视图等

容器与虚拟机的区别

容器跟虚拟机很相似,但是依然有不同,容器与虚拟机本质的区别是:

容器是进程级别的资源隔离。虚拟机是操作系统级别的资源隔离

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镜像

image-20230323142740024

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通