一 Docker 的基本信息
前面已经安装了Docker,现在看一下已安装Docker的安装环境以及其他信息
1.1 系统环境
[root@localhost ~]# uname -r #查看环境版本
3.10.0-693.el7.x86_64
[root@localhost ~]# cat /etc/redhat-release #查看环境版本
CentOS Linux release 7.4.1708 (Core)
1.2 Docker 版本
[root@localhost ~]# docker version #查看Docker版本
二 拉取镜像,创建一个容器
2.1 拉取镜像容器
[root@localhost ~]# docker pull nginx #拉取代码
[root@localhost ~]# docker run -d -P nginx #启动镜像为容器
- d 表示放在后台运行
- P 大P表示随机映射nginx的默认端口 49000~49900
-p 指定一个端口号
2.2 查看容器
[root@localhost ~]# docker ps -a #查看容器
2.3 images 命令列出镜像
通过使用如下两个命令,列出本机已有的镜像:
docker images #查看已有的镜像
或:
docker image ls #查看已有的镜像
三 容器的基本介绍
3.1 容器的启动过程说明
检查本地是否存在指定的镜像,如果没有就从指定的仓库下载
利用一个镜像启动一个容器
分配一个文件系统,并且只读的镜像层外面挂载一层可读写层
从宿主机配置的网桥接口中桥接一个虚拟机接口到容器中去
从地址池配置一个IP给容器
执行用户指定的程序
执行完毕后停止容器
3.2 docker run 常用选项说明
-t: 配置一个伪终端并绑定到容器的标准输入上
-i: 让容器的标准输入保持打开
-d:将容器放后台运行
-c: 指定分配该容器的cpu分片
-m:指定分配给该容器的内存大小,单位为:B、K、M、G
查看当前节点上的容器状态
docker ps #查看当前正在运行的容器
选项:
-a:查看所以容器,包括停止的
-q:只显示容器ID
-l:显示最后一次创建的容器
[root@localhost ~]# docker ps -q #查看运行的容器
docker 的其他操作指令
[root@localhost ~]# docker rm -f f0c3ea46035c #删除、加-f强制删除
f0c3ea46035c
[root@localhost ~]# docker rm $(docker ps -qf status=exited) #删除所以停止容器
3f17eec5cfd2
[root@localhost ~]# docker ps -a 查看
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31a646c80c11 nginx "/docker-entrypoint.…" 2 minutes ago Up 2 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp webserver
[root@localhost ~]# docker start 31a646c80c11 #重启容器
31a646c80c11
[root@localhost ~]# docker stop 31a646c80c11 停止容器
31a646c80c11
[root@localhost ~]# docker ps -a #查看
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31a646c80c11 nginx "/docker-entrypoint.…" 6 minutes ago Exited (0) 52 seconds ago webserver
[root@localhost ~]# docker pause 31a646c80c11 #暂停容器
31a646c80c11
[root@localhost ~]# docker ps -a #查看容器是否暂停
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
31a646c80c11 nginx "/docker-entrypoint.…" 11 minutes ago Up About a minute (Paused) 0.0.0.0:80->80/tcp, :::80->80/tcp webserver
[root@localhost ~]# docker unpause 31a646c80c11 #启动容器
31a646c80c11
四、容器资源限制
一个docker host 上会运行若干容器,每个容器都需要CPU,内存和 资源,对于kvm,VMware等虚拟化技术,用户可以控制分配多少CPU,内存资源给每个虚拟机,对于容器,Docker也提供了类似的机制避免某个容器因占用太多资源而影响其他容器及整个host的性能。
4.1 内存限制
启动一个ubuntu容器,限制内存为200M,内存与swap的总和为300M:
[root@localhost ~]# docker run -it 200M --memory -swap 300M ubntu:16.04
选项说明:
-m:允许分配的内存大小
--memory-swap:允许分配的内存和swap的总大小
--memorry-swapiness;控制内存与swap置换比例
需要说明的是,如果启用了--memory-swap参数,相当于使用了swap,则实际内存限制并不生效,要想限制生效,可以不启动改参数,且将--memory-swapiness设置为0
下面一个压测示例:
[root@localhost ~]# docker run -it -m 200M --memory-swappiness 0 progrium/stress -vm 1 --vm-bytes 180M
选项:
--vm:设置内存工作线程数
--vm-byptes:设置单个内存工作线程使用的内存大小
上面的示例中,--vm-bytes为180M,容器工作正常;如果将其修改为230M,则容器OOM退出
4.2、cup限制
默认情况下,所有容器可以平等使用的宿主机cpu 资源且没有限制。docker 可以通过-c 或 -cpu -shares 设置容器使用的CPU的权重。如果不指定,默认认为1024.
与内存限额不同,通过-c 设置的cpu share 并不是 cpu 资源的绝对数量,而是一个相对的权重值。某个容器最终能分配到的CPU 资源取决于它的 CPU share占所有容器CPU share总和的比例。换句话说:通过 CPU share 可以设置容器使用CPU的优先级。
例如,在host 中启动了两个容器:
docker run --name container_A -c 1024 nbuntu
docker run --name container_B -c 512 ubuntu