Docker安装与基础命令

三、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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值