Docker04:network和expose

374 阅读2分钟

这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战

一.Dockerfile

理论

  1. 一个包含用于组合映像的命令的文本文档
  2. Docker通过读取Dockerfile中的指令自动生成image
  3. 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令

构建镜像命令

Docker build -t="镜像名"  .

:从Dockerfile构建映像,.表示当前目录

Dockerfile指令

  1. 建立一个名为Dockerfile文件,写入指令
  2. docker首先从基础镜像运行一个容器:FROM centos,执行一条指令,对容器进行修改,执行类似commit操作提交一个镜像层,docker再基于刚提交的镜像运行一个新容器。重复以上操作,直至命令完成

二.EXPOSE端口指令

  1. EXPOSE 告诉容器需要对外开放的端口,在run时映射
  2. 宿主机端口映射到容器指定的开放的端口
  3. 查看expose的端口映射(随机映射)
docker run创建容器时,使用-P参数开启Dockerfile中所有指定的端口
docker ps查看宿主机与容器的端口映射
  1. 固定容器映射的宿主机端口 (与Dockerfile中的expose无关)
docker run -p 宿主机端口:容器端口 -it centos 

①.使用docker ps来查看端口映射

②.可以跟多个-p来指定多个映射
  1. 动态指定共享目录,操作共享
docker run -v 宿主机目录:容器目录 -it centos:可以在容器目录后面加上 :ro(默认是:rw)让文件只读
  1. -h:指定主机名

三.docker network

  1. docker会在每一个engine上面生成一个多种网络🔗方式
1. bridge:默认,创建一个虚拟网卡,每个容器都有自己独立ip,连在同一网桥上的容器可以相互通类似于VM中的NAT,进行地址转换访问外网,如右图
2. none:容器关闭网络功能,无法通信
3. host:没有自己的虚拟网卡和ip,使用宿主机的IP和端口,类似于VM中的桥接,比bridge少地址转换
4. container:和一个指定的容器共享IP、端口范围,两个容器的进程可以通过lo网卡设备通信

命令

  1. docker network ls:查看已存在网络
  2. docker network create [NetName]  -d [Tpye] --subnet ip:创建网络,指定子网络
  3. docker network connect [NetName] [ContainerName]:将已存在容器放入指定网络
  4. docker network inspect [NetName]:查看网络详细