这章的内容不多,就是端口映射(第一篇讲过),docker-compose使用和docker的网络模式。
端口映射
具体内容可以参见第一章容器端口的相关内容。补充一个命令docker container inspect xxid可以查看容器提供的端口之类的信息,当然还有一些其他的信息,有时间可以看看。总之端口映射就是运行容器的时候设定一下,很简单的。
docker-compose
大概是个打包多条Docker命令成shell脚本的工具。下载建议去翻官方文档,linux平台有安装教程,大概是三条命令。但是github由于访问有问题可能下不下来。可以试试道客的国内镜像,再就是可以试试用pip安装(就是Python的那个包管理器),不过我没试。windows平台因为安装的直接是Docker Desktop所以直接自带。
因为写这个文件感觉纯粹就是多写就会了,基本上就是把命令转个说法,所以下面举个例子:
docker container run -d -p 5001:80 wordpress转成docker-compose.yaml大概是这样的:
version: "3.8"
services:
my-wordpress:
image: wordpress:latest
ports:
- 5001:80
版本号version对应的是Docker的版本号,具体的对应关系可以上网查。
yaml写的时候有几个坑,首先是,每一个键值之间的冒号后边必须有一个空格,哪怕值是空的也必须要有,但是Docker命令内容里的冒号不用这样处理;其次,缩进不能用制表符,只能用空格。(一开始直接照抄的我是各种报错……)最后,docker-compose的脚本必须命名成docker-compose.yml或者是docker-compose.yaml,其他情况会报错,跑不了命令。
命令相关
写完上面的内容然后保存,在终端中运行
docker-compose up (-d)就可以运行写的脚本了。-d是后台运行。当然这样并不能显示出脚本的优越之处,因为文档中描述这种方式是为了多容器的应用开发的。
docker-compose ps,查看容器的运行情况。
docker-compose stop,停止service。
docker-compose rm,清理service,会直接把docker-compose生成的容器删除。
生成的容器名字是对应所在的文件夹的名字,再和yaml文件夹种起的名字拼接在一起,最后还有一个阿拉伯数字的后缀生成的。想修改前缀可以在启动时添加-p参数命名一个新的名字。整个容器名字也可以在yaml文件里用container_name来命名,但是这样前缀后缀就没了。可以起好文件夹的名字,再启动容器。
自定义镜像的构建,给自定义镜像命名,启动镜像前拉取镜像。
Docker的网络模式
容器之间,容器和宿主机之间建立的网络关系进行一下了解是很重要的,这是进一步了解集群之类知识的基础。
docker inspect
默认情况下,启动容器获得的IP是自动分配的,也就是说,每次启动获得的IP不固定,对于某些任务使用时,不固定IP并不方便。用--name NAME来指定容器的名字为NAME。
docker network ls 查看主机上已有的网络配置列表
桥接模式:为每个容器分配IP,默认连到docker0虚拟网桥。再由网桥和主机端口进行连接。默认的连接模式。
主机模式:用的是宿主机的IP和端口,不生成自己的虚拟网卡,不配置自己的IP。使用--network host或--net host来指定启动时按主机模式启动。这之后访问主机IP就会看到对应的容器页面了。
none:禁用网络功能,只有127.0.0.1本地环回接口,创建时通过--net none或者--network none来指定。
container:和另一个容器共享对面的IP和端口,自己不生成自己的虚拟网卡和IP。启动时通过--net container: 已运行的网络名称|ID或--network container: 已运行的容器名称|ID指定,两个容器除了网络方面相同之外,其他的像是文件系统和进程列表还是隔离的。主容器退出了,副容器是没办法连网的,因为副容器的网络访问依赖于主容器。