Docker技术入门与实战 第二版-学习笔记-8-网络功能network-2-相应配置
1) 快速配置指南(详细使用下面会讲)
其中有些命令选项只有在 Docker 服务启动的时候才能配置,而且不能马上生效

下面2个命令选项既可以在启动服务时指定,也可以 Docker 容器启动(docker run )时候指定。在 Docker 服务启动的时候指定则会成为默认值,后面执行docker run时可以覆盖设置的默认值。

最后这些选项只有在 docker run执行时使用,因为它是针对容器的特性内容:

2) 配置 DNS
怎么自定义配置容器的主机名和 DNS 配置呢? 秘诀就是它利用虚拟文件来挂载到来容器的 3 个相关配置文件:
- /etc/resolv.conf : 记录了容器的配置信息
- /etc/hostname : 记录了容器的主机名
- /etc/hosts : 默认只记录了容器自身的一些地址和名称
这种机制可以让宿主主机 DNS 信息发生更新后,所有 Docker 容器的 dns 配置通过 /etc/resolv.conf文件立刻得到更新。
如果用户想要手动指定容器的配置,可以利用下面的选项:
- -h HOSTNAME 或 --hostname = HOSTNAME :设定容器的主机名,它会被写到容器内的/etc/hostname 和 /etc/hosts中。但它在容器外部看不到,既不会在docker ps中显示,也不会在其他的容器的 /etc/hosts看到
- --links = CONTAINER_NAME:ALIAS 选项会在创建容器的时候,添加一个其他容器的主机名到/etc/hosts文件中,让新的容器的进程可以使用主机名ALIAS就可以连接它
- --dns = IP_ADDRESS : 添加DNS服务到容器的/etc/resolv.conf中,让容器用这个服务器来解析所有不在/etc/hosts上的主机名
- --dns-search = DOMAIN : 设定容器的搜索域,当设定搜索域为.example.com时,在搜索一个名为host的主机时,DNS不仅搜索host,还会搜索host.example.com。注意,如果没有上述最后的两个选项,Docker会默认主机上的/etc/resolv.conf来配置容器
在容器中使用 mount 命令可以看到挂载信息,在之前连接的是host网络的ubuntu6容器上运行:
userdeMBP:~ user$ docker exec -it ubuntu6 /bin/bash
root@linuxkit-025000000001:/# mount
...
/dev/sda1 on /etc/resolv.conf type ext4 (rw,relatime,data=ordered)
/dev/sda1 on /etc/hostname type ext4 (rw,relatime,data=ordered)
/dev/sda1 on /etc/hosts type ext4 (rw,relatime,data=ordered)
...
1.查看其/etc/resolv.conf内容:
root@linuxkit-:/# cat /etc/resolv.conf
# This file is included on the metadata iso
nameserver 192.168.65.1 // 相当于运行docker run时使用--dns=192.168.65.1
domain lan //表示局域网,相当于运行docker run时使用--dns-search=lan
⚠️如果是直接手动对/etc/resolv.conf进行更改,那么再次重启时,里面更改的内容就会恢复原状,希望不回复的方法就是在run时使用-dns和--dns-search参数来设置
此时任意打开一个连接的是自定义的bridge——myNetwork2的ubuntu7容器,查看它的/etc/resolv.conf配置文件,可以看见,和上面的内容是相同的
这是因为创建容器时,默认会与宿主机的/etc/resolv.conf内容保持一致
2.查看其/etc/hosts内容:
root@linuxkit-025000000001:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
当我们使用--link=container:alias参数连接了其他容器的话,该文件中就会出现连接容器的ip地址,如下面是容器ubuntu7没有连接其他容器前文件的内容:
root@8eef1c93a7d4:/# vi /etc/hosts 127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.20.11.2 8eef1c93a7d4
⚠️设置了alias的好处是:重启容器IP变化时,别名alias正常使用
然后后面打开另一个容器ubuntu8,让其通过--link连接了容器db,然后就能够在/etc/hosts中看见db的信息:
userdeMBP:~ user$ docker run -it --name ubuntu8 --link db:db ubuntu:14.04 /bin/bash
root@1f6456e5fbfd:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.4 db 2fca948912dc
172.17.0.5 1f6456e5fbfd
就能够使用容器db的名字ping通它了:
root@1f6456e5fbfd:/# ping -c 3 db
PING db (172.17.0.4) 56(84) bytes of data.
64 bytes from db (172.17.0.4): icmp_seq=1 ttl=64 time=0.081 ms
64 bytes from db (172.17.0.4): icmp_seq=2 ttl=64 time=0.092 ms
64 bytes from db (172.17.0.4): icmp_seq=3 ttl=64 time=0.109 ms --- db ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2111ms
rtt min/avg/max/mdev = 0.081/0.094/0.109/0.011 ms
3.查看其/etc/hostname内容:
root@linuxkit-025000000001:/# cat /etc/hostname
linuxkit-
可以在run容器时自己设定自己的主机名,使用--hostname参数:
userdeMacBook-Pro:~ user$ docker run -it --hostname=myUbuntu9 --name ubuntu9 ubuntu:14.04 /bin/bash
root@myUbuntu9:/# cat /etc/hostname
myUbuntu9
上面的例子就将主机名设置为了myUbuntu9
4.使用--net参数(其实就是之前使用的--network参数)设置使用的网络是bridge、nonedeng,或者是指明与某个容器使用相同的网络,这里着重讲其如何使用container模式(其他网络模式请看上一章):
从上图可见,基本上就相当于打开了别名为ubuntu10的ubuntu8容器,两者的IP地址是完全一样的,连主机名都是一样的。当然,ubuntu10容器也是开启了的:
userdeMBP:~ user$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b854b76e02e ubuntu:14.04 "/bin/bash" minutes ago Up minutes ubuntu10
f07c50c1c6ee ubuntu:14.04 "/bin/bash" minutes ago Up minutes ubuntu8
Docker技术入门与实战 第二版-学习笔记-8-网络功能network-2-相应配置的更多相关文章
- Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥
1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...
- Docker技术入门与实战 第二版-学习笔记-8-网络功能network-1-单个host上的容器网络
Docker 中的网络功能介绍 Docker 允许通过外部访问容器或容器互联的方式来提供网络服务 1) 外部访问容器 容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -p或 -P参数 ...
- Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver
1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...
- Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-1-cli
Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境 Docker Machine是一种工具,它允许你在虚拟主机 ...
- Docker技术入门与实战 第二版-学习笔记-7-数据管理(volume)
Docker 数据管理 为什么要进行数据管理呢?因为当我们在使用container时,可能会在里面创建一些数据或文件,但是当我们停掉或删除这个容器时,这些数据或文件也会同样被删除,这是我们并不想看见的 ...
- Docker技术入门与实战 第二版-学习笔记-5-容器-命令及限制内存与cpu资源
1.启动容器 启动容器有两种方式: 基于镜像新建一个容器并启动 将在终止状态(stopped)的容器重新启动 1)新建并启动——docker run 比如在启动ubuntu:14.04容器,并输出“H ...
- Docker技术入门与实战 第二版-学习笔记-3-Dockerfile 指令详解
前面已经讲解了FROM.RUN指令,还提及了COPY.ADD,接下来学习其他的指令 5.Dockerfile 指令详解 1> COPY 复制文件 格式: COPY <源路径> .. ...
- Docker技术入门与实战 第二版-学习笔记-6-仓库
仓库(Repository)是集中存放镜像的地方 一个容易混淆的概念是注册服务器(Registry). 实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像. ...
- Docker技术入门与实战 第二版-学习笔记-2-镜像构建
3.利用 commit 理解镜像构成 在之前的例子中,我们所使用的都是来自于 Docker Hub 的镜像. 直接使用这些镜像是可以满足一定的需求,而当这些镜像无法直接满足需求时,我们就需要定制这些镜 ...
随机推荐
- 记录怎样把安全证书导入到java中的cacerts证书库
这次项目上需要去证书中解析公钥所以这里分享下方法: 首先准备一个证书文件比如叫:test.crt(一般是cer结尾) 下一步准备把证书导入到导入java中的cacerts证书库里 方法如下: 比如本地 ...
- Java基础——JSP(二)
一.JSP隐式对象概述 为了简化jsp表达式和脚本片断代码的编写,JSP一共提供了9个预先定义的变量,这些变量也称为隐式对象或内置对象. 在 jsp生成的Servlet源码中,有如下声明: publi ...
- 分机号-2015决赛C语言C组第一题
标题:分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520,321 都满足要求,而, 766,918,201 就不符合要 ...
- python正则表达式3-模式匹配
re.S,使 '.' 匹配换行在内的所有字符 >>> pattern=r'ghostwu.com' >>> import re >>> re.f ...
- PHP中类和对象的相关函数
class_exists 判断一个类是否存在,参数为一个名字! interface_exists 判断一个接口是否存在,参数也是为一个名字! method_exists 判断一个方法是否存在! 需要两 ...
- 第二十七天- 网络通信协议 TCP UDP 缓冲区
1.网络通信协议 osi七层模型:按照分工不同把互联网协议从逻辑上划分了层级 socket层 2.理解socket: Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计 ...
- js-ES6学习笔记-async函数(3)
1.await命令后面的Promise对象,运行结果可能是rejected,所以最好把await命令放在try...catch代码块中. 2.多个await命令后面的异步操作,如果不存在继发关系,最好 ...
- 将textarea实现自适应高度及IE下滚动条不出现的bug
1.<el-table-column label="备注" width="180"> <template scope="scope& ...
- windows 10安装jdk8
1.下载jdk,选择jdk软件版本和对应windows 32/64位版本 jdk下载链接:https://www.oracle.com/technetwork/java/javase/download ...
- 腾讯Ocr文字识别
简述 上篇文章记录了百度Ocr的两种模式用法,接下来这篇文章开始记录腾讯Ocr的使用方法.腾讯Ocr的通用印刷体识别模式使用比较简单,直接接入sdk即可,但手写体的识别相对比较麻烦,需要自己post表 ...