三、Docker 安装及基础命令介绍:
官方网址:https://www.docker.com/
系统版本选择:
Docker目前已经支持多种操作系统的安装运行,比如Ubuntu、CentOS、 Redhat、Debian、Fedora,甚至是还支持了Mac和Windows,在linux系统上需要内核版本在3.10或以上,docker版本号之前一直是0.X版本或 1.X 版本,
但是从2017年3月1号开始改为每个季度发布一次稳版,其版本号规则也统一变更为YY.MM,例如17.09表示是2017年9 月份发布的,本次演示的操作系统使用Centos 7.5为例。
Docker版本选择:
Docker之前没有区分版本,但是2017年初推出(将docker更名为)新的项目Moby,
github地址:https://github.com/moby/moby
Moby项目属于Docker项目的全新上游,Docker将是一个隶属于的Moby的子产品,而且之后的版本之后开始区分为CE版本(社区版本)和EE(企业收费版),CE 社区版本和 EE 企业版本都是每个季度发布一个新版本,但是EE版本提供后期安全维护1年,而CE版本是4个月,本次演示的Docker版本为18.03,
以下为官方原文: https://blog.docker.com/2017/03/docker-enterprise-edition/
与kubernetes结合使用的时候,要安装经过kubernetes官方测试通过的docker版本,避免出现不兼容等未知的及不可预估的问题发生,kubernetes测试过的docker版本可以在github查询。
具体如下:
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.14.md#external-dependencies
3.1 apt/yum 安装docker
在阿里云找到docker的镜像
https://developer.aliyun.com/mirror
docker-ce
########### Ubuntu apt 安装
step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
Step 3: 写入软件源信息(写入阿里云docker源)
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
##### 安装指定版本的Docker-CE:
Step 1: 查找Docker-CE的版本:
apt-cache madison docker-ce #查看doeker仓库可以安装哪些版本
docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
sudo apt-get -y install docker-ce=[VERSION]
############## CentOS7 yum安装
rm -rf /etc/yum.repos.d/*
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce
安装kubernetes匹配的docker版本,kubernetes的代码在github托管
https://github.com/kubernetes/kubernetes
尽量使用kubernetes支持的docker版本
3.2 rpm 包安装 Docker
官方rpm包下载地址:
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
阿里云镜像站点下载地址:
https://developer.aliyun.com/mirror
二进制下载地址:
https://download.docker.com/
https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/
阿里镜像下载地址:
https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/
卸载docker
ubuntu:
apt remove docker docker-ce docker-ce-cli
docker --version 检查版本信息
查询相关软件包,进行卸载
dpkg -l | grep docker
3.3 二进制安装docker
下载二进制安装包,上传到服务器
ll /usr/local/src/
docker-18.09.9.tgz
解压二进制安装包
tar xvf docker-18.09.9.tgz
docker/
docker/runc
docker/dockerd
docker/docker
docker/containerd-shim
docker/docker-init
docker/docker-proxy
docker/containerd
docker/ctr
将docker的所有文件拷贝到/usr/bin目录下
cp docker/* /usr/bin/
生成三个配置文件
scp /lib/systemd/system/docker.service 172.18.0.123:/lib/systemd/system/docker.service
scp /lib/systemd/system/containerd.service 172.18.0.123:/lib/systemd/system/containerd.service
scp /lib/systemd/system/docker.socket 172.18.0.123:/lib/systemd/system/docker.socket
启动containerd,并设置为开机自启
systemctl enable --now containerd
验证是否是生成sock文件
/run/containerd/containerd.sock=
docker.socket执行文件需要用docker组启动
创建docker组
groupadd docker -g 999
3.4 验证docker信息
$ docker info
Client:
Debug Mode: false 不开启dubug
Sercer:
Containers: 2 #当前主机的容器总数
Running: 1 #有几个容器是正在运行的
Paused: 0 #有几个容器是暂停的
Stopped: 1 #有几个容器是停止的
Images: 3 #当前服务器的镜像数
Server Version: 18.09.9 #服务端版本
Storage Driver: overlay2 #正在使用的存储引擎
Backing Filesystem: xfs #后端文件系统,即服务器的磁盘文件系统
Supports d_type: true #是否支持 d_type ,必须支持,d_type在磁盘上实现了联合挂载
Native Overlay Diff: true #是否支持差异数据存储,容器的差异性数据会保存在diff目录
Logging Driver: json-file #日志类型,以json的方式显示日志
Cgroup Driver: cgroupfs #Cgroups 类型
Plugins: #插件
Volume: local #卷,默认本地存储
Network: bridge host macvlan null overlay # overlay跨主机通信
#host使用主机网络 macvlan 基于MAC地址做的一种网络技术 null 没有网络 overlay 覆盖网络
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog #日志类型
Swarm: inactive #是否支持 swarm
Runtimes: runc #已安装的容器运行时
Default Runtime: runc #默认使用的容器运行时
Init Binary: docker-init #初始化容器的守护进程,即pid为1的进程
containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb #版本
runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f # runc 版本
init version: fec3683 #init 版本
Security Options: #安全选项
Apparmor #安全模块, https://docs.docker.com/engine/security/apparmor/
seccomp #审计(操作),https://docs.docker.com/engine/security/seccomp/
Profile: default #默认的配置文件
Kernel Version: 4.15.0-55-generic #宿主机内核版本
Operating System: Ubuntu 18.04.3 LTS #宿主机操作系统
OSType: linux #宿主机操作系统类型
Architecture: x86_64 #宿主机架构
CPUs: 1 #宿主机 CPU 数量
Total Memory: 1.924GiB #宿主机总内存
Name: docker-server1.magedu.net #宿主机 hostname
ID: ZFPD:UIA5:SR6E:Y6SS:52QL:5MPT:VDY3:ATVI:QMVG:HAFF:MN74:2HPD #宿主机ID
Docker Root Dir: /var/lib/docker #宿主机数据保存目录
Debug Mode (client): false #client 端是否开启 debug
Debug Mode (server): false #server 端是否开启 debug
Registry: https://index.docker.io/v1/ #镜像仓库
Labels: #其他标签
Experimental: false #是否测试版
Insecure Registries: #非安全的镜像仓库
127.0.0.0/8
Live Restore Enabled: false #是否开启活动重启(重启 docker-daemon 不关闭容器)
Product License: Community Engine #产品许可信息
WARNING: No swap limit support #系统警告信息(没有开启swap资源限制)
3.5 解决不支持swap限制警告
$ vim /etc/default/grub
添加cgroup_enable=memory swapaccount=1参数
开启对内存的限制,开启对交换分区的限制
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=2
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 cgroup_enable=memory swapaccount=1"
$ update-grub
$ reboot
3.6 docker 镜像加速配置
国内下载国外的镜像有时候会很慢,因此可以更改docker配置文件添加一个加速器,可以通过加速器达到加速下载镜像的目的。
获取加速地址:
浏览器打开http://cr.console.aliyun.com,注册或登录阿里云账号,点击左侧的镜像加速器,将会得到一个专属的加速地址,而且下面有使用配置说明.
生成配置文件:
mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://kk3s0t8k.mirror.aliyuncs.com"]
> }
> EOF
# 重启docker服务:
systemctl daemon-reload
systemctl restart docker
# 查看docker信息
docker info
3.7 docker配置参数详解
/etc/docker/daemon.json完整参数
docker-daemon.json各配置详解
{
“api-cors-header”:"", # 在引擎API中设置CORS标头
“authorization-plugins”:[], # 要加载的授权插件
“bridge”:"", # 将容器附加到网桥
“cgroup-parent”:"", # 为所有容器设置父cgroup
“cluster-store”:"", # 分布式存储后端的URL
“cluster-store-opts”:{}, # 设置集群存储选项(默认map [])
“cluster-advertise”:"", # 要通告的地址或接口名称
“debug”: true, # 启用调试模式,启用后,可以看到很多的启动信息。默认false
“default-gateway”:"", # 容器默认网关IPv4地址
“default-gateway-v6”:"", # 容器默认网关IPv6地址
“default-runtime”:“runc”, # 容器的默认OCI运行时(默认为“ runc”)
“default-ulimits”:{}, # 容器的默认ulimit(默认[])
“dns”: [“192.168.1.1”], # 设定容器DNS的地址,在容器的 /etc/resolv.conf文件中可查看。
“dns-opts”: [], # 容器 /etc/resolv.conf 文件,其他设置
“dns-search”: [], # 设定容器的搜索域,当设定搜索域为.example.com时,在搜索一个名为host的主机时,DNS不仅搜索host,还会搜索host.example.com。 注意:如果不设置, Docker会默认用主机上的 /etc/resolv.conf 来配置容器。
“exec-opts”: [], # 运行时执行选项
“exec-root”:"", # 执行状态文件的根目录(默认为’/var/run/docker‘)
“fixed-cidr”:"", # 固定IP的IPv4子网
“fixed-cidr-v6”:"", # 固定IP的IPv6子网
“data-root”:"/var/lib/docker", # Docker运行时使用的根路径,默认/var/lib/docker
“group”: “”, # UNIX套接字的组(默认为“docker”)
“hosts”: [], # 设置容器hosts
“icc”: false, # 启用容器间通信(默认为true)
“ip”:“0.0.0.0”, # 绑定容器端口时的默认IP(默认0.0.0.0)
“iptables”: false, # 启用iptables规则添加(默认为true)
“ipv6”: false, # 启用IPv6网络
“ip-forward”: false,# 默认true, 启用net.ipv4.ip_forward ,进入容器后使用sysctl -a | grepnet.ipv4.ip_forward查看
“ip-masq”:false, # 启用IP伪装(默认为true)
“labels”:[“nodeName=node-121”], # docker主机的标签,很实用的功能,例如定义:–label nodeName=host-121
“live-restore”: true, # 在容器仍在运行时启用docker的实时还原
“log-driver”:"", # 容器日志的默认驱动程序(默认为“ json-file”)
“log-level”:"", # 设置日志记录级别(“调试”,“信息”,“警告”,“错误”,“致命”)(默认为“信息”)
“max-concurrent-downloads”:3, # 设置每个请求的最大并发下载量(默认为3)
“max-concurrent-uploads”:5, # 设置每次推送的最大同时上传数(默认为5)
“mtu”: 0, # 设置容器网络MTU
“oom-score-adjust”:-500, # 设置守护程序的oom_score_adj(默认值为-500)
“pidfile”: “”, # Docker守护进程的PID文件
“raw-logs”: false, # 全时间戳机制
“selinux-enabled”: false, # 默认 false,启用selinux支持
“storage-driver”:"", # 要使用的存储驱动程序
“swarm-default-advertise-addr”:"", # 设置默认地址或群集广告地址的接口
“tls”: true, # 默认 false, 启动TLS认证开关
“tlscacert”: “”, # 默认 ~/.docker/ca.pem,通过CA认证过的的certificate文件路径
“tlscert”: “”, # 默认 ~/.docker/cert.pem ,TLS的certificate文件路径
“tlskey”: “”, # 默认~/.docker/key.pem,TLS的key文件路径
“tlsverify”: true, # 默认false,使用TLS并做后台进程与客户端通讯的验证
“userland-proxy”:false, # 使用userland代理进行环回流量(默认为true)
“userns-remap”:"", # 用户名称空间的用户/组设置
“bip”:“192.168.88.0/22”, # ——指定网桥IP
“registry-mirrors”: [“https://192.498.89.232:89”], # 设置镜像加速
“insecure-registries”: [“120.123.122.123:12312”], # 设置私有仓库地址可以设为http
“storage-opts”: [
“overlay2.override_kernel_check=true”,
“overlay2.size=15G”
], # 存储驱动程序选项
“log-opts”: {
“max-file”: “3”,
“max-size”: “10m”,
}, # 容器默认日志驱动程序选项
“iptables”: false # 启用iptables规则添加(默认为true)
}
3.8 容器操作基础命令
docker run使用命令行的方式创建容器
命令格式:
docker run [选项] [镜像名] [shell命令/脚本] [参数]
docker run [参数选项] [镜像名称,必须在所有选项的后面] [/bin/echo 'hello wold'] #单次执行,没有自定义容器名称
例:
docker run nginx
如果本地没有nginx镜像,会直接从官网拉取镜像,tage为latest
docker run centos /bin/echo 'hello wold'
启动的容器在执行完shell命令就退出了
从镜像启动一个容器:
会直接进入到容器,并随机生成容器 ID 和名称
docker run -it docker.io/centos bash
-t TTY指定一个终端输入
-i 从标准终端做输入
例:
docke run -i -t centos:7.6.1810 bash
退出以后容器会被回收
退出容器不注销 ctrl+p+q
显示正在运行的容器:
查看正在运行的容器
docker ps
显示所有容器:
查看包括当前正在运行以及已经关闭的所有容器:
docker ps -a
查看正在运行的容器ID
docker ps -q
删除运行中的容器:
即使容器正在运行当中,也会被强制删除掉
docker rm -f 11445b3a84d3
随机映射端口: (不常用)
docker pull nginx # 下载nginx镜像
前台启动并随机映射本地端口到容器的80端口,只试用与测试
docker run -P docker.io/nginx
查看容器端口号
docker
默认范围,从32768开始,启用多个容器,端口号会顺序往后使用
指定端口映射:
方式 1:本地端口81映射到容器80端口:
docker run -p 81:80 --name nginx-test-port1 nginx
方式 2:本地IP:本地端口:容器端口
docker run -p 192.168.10.205:82:80 --name nginx-test-port2 docker.io/nginx
方式 3:本地 IP:本地随机端口:容器端口
docker run -p 192.168.10.205::80 --name nginx-test-port3 docker.io/nginx
方式 4:本机 ip:本地端口:容器端口/协议,默认为 tcp 协议
docker run -p 192.168.10.205:83:80/udp --name nginx-test-port4 docker.io/nginx
方式 5:一次性映射多个端口+协议: (常用)
docker run -p 86:80/tcp -p 443:443/tcp -p 53:53/udp --name nginx-test-port5 docker.io/nginx
查看 Nginx 容器访问日志:
docker logs nginx-test-port3 #一次查看
docker logs -f nginx-test-port3 #持续查看
生产环境中
使用-p 指定端口启动容器
例:
docker run -p 80:80 nginx
宿主机的80端口映射到容器的80端口
通过iptables -t nat -nvL观察到,会做一个iptables 目标地址转换规则:
源地址是任意一个地址,访问任何一个地址的时候,目标端口是80的话,
将会转发到172.17.0.2:80(nginx容器地址)
通过这样的方式将访问宿主机的端口转发到容器的80上
iptables规则自动维护,容器有了新的映射就会加上,删除就会回收,所以端口映射不需要我们去管理
启用多个容器使用同一个镜像的时候,宿主机的端口不能冲突,容器中的端口可以一样,因为他是通过namespace隔离开的。
两个容器在一定的程度上可以说是两个不同的namespace,namespace中的东西可以一样,是隔离开的
容器的地址是由docker的dhcp分配给容器的,它能够拿到不同于当前宿主机已经运行容器的ip地址
查看容器已经映射的端口:
docker port [ID/容器名称]
docker port nginx-test-port5
自定义容器名称:
自定义名称不可以重复
docker run -it --name nginx-test nginx
后台启动容器:
docker run -d -P --name nginx-test1 docker.io/nginx
9aaad776850bc06f516a770d42698e3b8f4ccce30d4b142f102ed3cb34399b31
-d 将容器放到当前终端的后台
例:
docker run -it -d -p 172.18.0.101:80:80 -p 172.18.0.101:443:443 -p 172.18.0.101:10053:53/udp nginx
创建并进入容器:
用于测试环境
docker run -t -i --name test-centos2 docker.io/centos /bin/bash # 指定一个bash环境
[root@a8fb69e71c73 /]# 创建容器后直接进入,执行exit退出后容器关闭
docker run -d --name centos-test1 docker.io/centos 2cbbec43ba939476d798a5e1c454dd62d4d893ee12a09b587556ba6395353152
单次运行:
对于明确是测试的,会再启动容器的时候添加--rm选项
--rm: 单次运行一个容器
容器退出后自动删除:
docker run -it --rm --name nginx-delete-test docker.io/nginx
删除当前宿主机的所有容器:
docker rm -f `docker ps -a -q`
传递运行命令:
容器需要有一个前台运行的进程才能保持容器的运行,通过传递运行参数是一种方式,另外也可以在构建镜像的时候指定容器启动时运行的前台命令。
docker run -d centos /usr/bin/tail -f '/etc/hosts'
使用tail -f 设置容器里面的守护进程
在打镜像的时候,需要考虑启动完成一个容器以后,它的PID为1的进程是谁
在容器中PID为1的进程就是子进程的父进程,相当于容器的守护进程
容器中PID为1的守护进程的实现方式:
服务类: nginx -g daemon off
tomcat carterlinna run
apache
缺点: 服务不能停,服务一旦终止,容器就会被回收,容器中一旦没有PID为1的守护进程,容器就会停止
命令类: tail -f 某个文件
tail -f则会一直去检查此文件,不强制终止的话就会一直占用终端,就会成为容器的守护进程
使用tail -f 设置为容器的守护进程,nginx服务等就可以进入容器进行重启,关闭等操作
例:
tail -f /etc/hosts 只要tail 命令不终止,用户可以进入容器重启服务
tail -f 不建议检查服务的日志文件,因为tail -f 访问日志的话,每一个访问日志都会被tail -f 从磁盘中读取出来,会消耗大量的磁盘IO。因此,建议检查一个不会发生变化的文件
tail -f 仅用于测试环境,不可以在生产环境中使用
在centos容器中安装一个nginx服务,尝试重启、关闭服务等操作
#安装epel-release源
yum install epel-release
#安装nginx
yun install nginx
#启动nginx
nginx
#关闭nginx进程
nginx -s stop
容器正常运行
在nginx容器中nginx服务的PID为1 ,无法使用kill命令终止nginx进程
如果使用nginx -s stop 将会关闭容器
nginx -s reload 不会关闭容器,因为nginx的主进程不会发生变化
但是不适用于java服务,httpd等大型服务
容器的启动和关闭:
docker stop f821d0cd5a99
docker start f821d0cd5a99
进入到正在运行的容器:
1:使用 attach 命令: (不常用)
使用方式为 docker attach 容器名,attach 类似于vnc,操作会在各个容器界面显示,
所有使用此方式进入容器的操作都是同步显示的且exit后容器将被关闭,且使用exit退出后容器关闭,
不推荐使用,需要进入到有shell环境的容器,比如centos为例:
docker run -it centos bash
[root@63fbc2d5a3ec /]#
docker attach 63fbc2d5a3ec
[root@63fbc2d5a3ec /]#
在另外一个窗口启动测试页面是否同步:
2:使用 exec 命令:
执行单次命令与进入容器,不是很推荐此方式,虽然exit退出容器还在运行
3:使用 nsenter 命令:
推荐使用此方式,nsenter命令需要通过PID进入到容器内部,
不过可以使用 docker inspect 获取到容器的 PID:
yum install util-linux #centos系统安装nsenter命令,ubuntu系统自带
nsenter 使用方式:
nsenter [选项] [参数]
进入一个正在运行的PID当中去
参数:
-a 映射所有 namespace
-m 映射一个文件系统namespace
-p 映射一个PID namespace
-U 映射一个用户 namespace
-C 映射一个cgroup namespace
-n 映射一个network namespace
docker inspect命令可以查看到容器的详细信息,以json格式显示信息
docker inspect -f "{{.NetworkSettings.IPAddress}}" 91fc190cb538 #取出容器的IP地址
172.17.0.2
docker inspect -f "{{.State.Pid}}" mydocker #获取到某个docker容器的PID,可以通过PID进入到容器内
docker inspect -f "{{.State.Pid}}" centos-test3
5892
nsenter -t 5892 -m -u -i -n -p
[root@66f511bb15af /]# ls
4:脚本方式:将nsenter命令写入到脚本进行调用
如下:
cat docker-in.sh
#!/bin/bash
docker_in(){
NAME_ID=$1
PID=$(docker inspect -f "{{.State.Pid}}" ${NAME_ID}) #通过inspect指令取出PID
nsenter -t ${PID} -m -u -i -n -p #使用nsenter -t 进入此PID的容器中
}
docker_in $1
#测试脚本是否可以正常进入到容器且退出后仍然正常运行:
[root@docker-server1 ~]# chmod a+x docker-in.sh
[root@docker-server1 ~]# ./docker-in.sh centos-test3
[root@66f511bb15af /]# pwd
/
[root@66f511bb15af /]# exit logout
[root@docker-server1 ~]# ./docker-in.sh centos-test3
[root@66f511bb15af /]# exit
Logout
查看容器内部的 hosts 文件:
host文件是在容器创建好之后,自动在host文件中加一条解析,将自己的ID解析成自己的IP地址,可以实现创建完场容器以后,用过ID实现访问容器本身。
[root@docker-server1 ~]# docker run -i -t --name test-centos3 docker.io/centos /bin/bash
[root@056bb4928b64 /]# 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 056bb4928b64 #默认会将实例的ID添加到自己的hosts文件
批量关闭正在运行的容器:
正常关闭所有运行中的容器
docker stop $(docker ps -a -q)
正常关闭单个运行中的容器
docker stop 91ab5f72cc8d #根据id关闭容器
docker stop ecstatic_perlman #根据容器名称关闭容器
启动容器
docker start 91ab5f72cc8d
容器状态:
运行中
已停止
已退出
暂停
k8s中代码更新/配置变更:
开发写的代码添加一些新功能,修复bug时会更新代码
新创建容器--接收用户请求
旧版本--继续处理之前已经连接的用户请求,当这些请求处理完成之后,容器就被回收/删除
批量强制关闭正在运行的容器:
docker kill $(docker ps -a -q) #强制关闭所有运行中的容器
批量删除已退出的所有容器: (常用)
docker rm -f `docker ps -aq -f status=exited`
批量删除所有容器: (不常用)
docker rm -f $(docker ps -a -q)
指定容器 DNS:
如果创建容器的时候没有指定DNS,公司内部会搭建内置DNS服务器,解决内网的自定义域名
这些DNS负责AIP调用,以及各个组件之间的调用,会通过PowerDNS来解析servicename
但是容器起来之后,如何让容器找到DNS解析域名?
假设宿主机的DNS为223.6.6.6,在宿主机上启动了多台容器,
如何通过DNS解析,访问到公司的mysql数据库,域名为mysql-linux38.online.local
创建docker容器的时候,强制指定DNS为公司内部DNS ,然后在公司内部DNS服务器上配置本地解析
能解析则直接给容器返回,不能解析则往外网转发,通过公司内部服务器转发到223.6.6.6,或者运营商的DNS
Dns服务,默认采用宿主机的dns地址
一是将dns地址配置在宿主机
二是将参数配置在docker启动脚本里面 –dns=1.1.1.1
docker run -it --rm --dns 223.6.6.6 centos bash # 强制指定DNS
[root@afeb628bf074 /]# cat /etc/resolv.conf nameserver 223.6.6.6