这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战
一.Dockerfile
理论
- 一个包含用于组合映像的命令的文本文档
- Docker通过读取Dockerfile中的指令自动生成image
- 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令
构建镜像命令
Docker build -t="镜像名" .
:从Dockerfile构建映像,.表示当前目录
Dockerfile指令
- 建立一个名为Dockerfile文件,写入指令
- docker首先从基础镜像运行一个容器:FROM centos,执行一条指令,对容器进行修改,执行类似commit操作提交一个镜像层,docker再基于刚提交的镜像运行一个新容器。重复以上操作,直至命令完成
二.EXPOSE端口指令
- EXPOSE 告诉容器需要对外开放的端口,在run时映射
- 宿主机端口映射到容器指定的开放的端口
- 查看expose的端口映射(随机映射)
docker run创建容器时,使用-P参数开启Dockerfile中所有指定的端口
docker ps查看宿主机与容器的端口映射
- 固定容器映射的宿主机端口 (与Dockerfile中的expose无关)
docker run -p 宿主机端口:容器端口 -it centos
①.使用docker ps来查看端口映射
②.可以跟多个-p来指定多个映射
- 动态指定共享目录,操作共享
docker run -v 宿主机目录:容器目录 -it centos:可以在容器目录后面加上 :ro(默认是:rw)让文件只读
- -h:指定主机名
三.docker network
- docker会在每一个engine上面生成一个多种网络🔗方式
1. bridge:默认,创建一个虚拟网卡,每个容器都有自己独立ip,连在同一网桥上的容器可以相互通类似于VM中的NAT,进行地址转换访问外网,如右图
2. none:容器关闭网络功能,无法通信
3. host:没有自己的虚拟网卡和ip,使用宿主机的IP和端口,类似于VM中的桥接,比bridge少地址转换
4. container:和一个指定的容器共享IP、端口范围,两个容器的进程可以通过lo网卡设备通信
命令
- docker network ls:查看已存在网络
- docker network create [NetName] -d [Tpye] --subnet ip:创建网络,指定子网络
- docker network connect [NetName] [ContainerName]:将已存在容器放入指定网络
- docker network inspect [NetName]:查看网络详细