Docker学习笔记(三)

这章的内容不多,就是端口映射(第一篇讲过),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指定,两个容器除了网络方面相同之外,其他的像是文件系统和进程列表还是隔离的。主容器退出了,副容器是没办法连网的,因为副容器的网络访问依赖于主容器。