本文已参与「新人创作礼」活动,一起开启掘金创作之路。
镜像与容器的使用
镜像操作
-
在docker index中搜索image
# docker search < image > docker search centos -
拉取镜像(下载centos镜像)
docker pull centos:latest -
查看镜像
# 列出images docker images # 列出所有的images(包含历史) docker images -a # 显示镜像的所有层(layer) docker images --tree # 删除一个或多个image docker rmi <image ID> -
删除镜像
docker rmi <镜像名或ID> # 删除 untagged images (id 为 <none> 的image) docker rmi $(docker images | grep "^<none>" | awk "{print $3}") # 删除全部 images docker rmi $(docker images -q)
容器操作
-
启动一个容器 Docker允许启动一个伪tty终端,使用交互运行的方式启动一个容器,所用到的参数为:-t -i ==注==:centos为基础镜像,首先Docker会检查本地是否有centos镜像,如果没有就会连接官方维护的Docker Hub Regustry查看,一旦有就会下载该镜像并将其保存在本地宿主机中。
# 基于centos镜像启动了一个容器 docker run -it centos:latest /bin/bash -
容器命名(名称必须唯一) 启动容器Docker会创建为容器自动生成一个随机的名字; 可以用 ==--name== 标志来实现自己命名。
# docker run -i -t <image> /bin/bash # 使用image创建container并进入交互模式, login shell是/bin/bash sudo docker run --name Luffy -it centos /bin/bash -
查看容器
# 列出当前所有正在运行的container docker ps # 列出最近一次启动的container docker ps -l: # 列出所有的container(包含历史,即运行过的container) docker ps -a : # 列出最近一次运行的container ID docker ps -q : -
进入容器
docker exec -it <name/ID> bin/bash -
退出 输入exit就可以返回到centos宿主机的命令行提示符了,一旦退出容器,/bin/bash命令也就结束了,容器也随之停止了运行。
exit -
重启容器 ==注==:使用start是启动已经创建过得container,使用run则通过image开启一个新的container。
# 开启/停止/重启container docker start/stop/restart <container> # 停止所有container docker stop $(docker ps -a -q) # 再次运行某个container(包括历史container) docker start [container_id] # 映射 HOST端口到容器,方便外部访问容器内服务,host_port可以省略,省略表示把 container_port映射到一个动态端口 docker run -i -t -p <host_port:contain_port> -
删除容器
# 删除一个或多个container docker rm <container...> # 删除一个正在运行的容器 docker rm -f <> # 删除所有的container docker rm `docker ps -a -q` docker rm $(docker ps -a -q) # 同上,删除所有的container docker ps -a -q | xargs docker rm -
进入容器 连接一个正在运行的container实例(即实例必须为start状态,可以多个窗口同时attach 一个container实例)容器的主机名就是该容器的ID
docker attach ****(容器ID或名) -
查看ip主机配置
cat /etc/hosts -
将容器封装为一个镜像
docker commit 6c4b67800f97(为容器名/ID) node:node1(为新的镜像名) -
基于新镜像运行容器 -p为端口映射
docker run -it -d -p 88:80 --name test1 node:node1 /bin/bash
容器资源使用情况
默认输出
docker stats
默认情况下,stats 命令会每隔 1 秒钟刷新一次输出的内容直到你按下 ctrl + c。下面是输出的主要内容:
- [CONTAINER]:以短格式显示容器的 ID
- [CPU %]:CPU 的使用情况
- [MEM USAGE / LIMIT]:当前使用的内存和最大可以使用的内存
- [MEM %]:以百分比的形式显示内存使用情况
- [NET I/O]:网络 I/O 数据
- [BLOCK I/O]:磁盘 I/O 数据
- [PIDS]:PID 号
只返回当前的状态
docker stats --no-stream
不想持续的监控容器使用资源的情况,可以通过 --no-stream 选项只输出当前的状态
只输出指定的容器
docker stats --no-stream registry 1493
查看个别容器的资源使用情况,可以为 docker stats 命令显式的指定目标容器的名称或者是 ID
==注==:多个容器的名称或者是 ID 之间需要用空格进行分割(==registry 和 1493 分别是容器的名称和容器的 ID==)(==不再显示默认的容器 ID,而是显示了我们传入的容器名称和 ID==)
可以通过简单的方式使用容器的名称替代默认输出中的容器 ID
docker stats $(docker ps --format={{.Names}})
格式化输出的结果
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
docker stats 命令支持我们通过 --format 选项自定义输出的内容和格式
自定义的格式中可以使用的所有占位符:
- .Container 根据用户指定的名称显示容器的名称或 ID。
- .Name 容器名称。
- .ID 容器 ID。
- .CPUPerc CPU 使用率。
- .MemUsage 内存使用量。
- .NetIO 网络 I/O
- .BlockIO 磁盘 I/O
- .MemPerc 内存使用率
- .PIDs PID 号
除了以 table 格式输出结果,还可以通过 format 选项输出 json 格式的结果
docker stats --no-stream --format \
"{\"container\":\"{{ .Container }}\",\"memory\":{\"raw\":\"{{ .MemUsage }}\",\"percent\":\"{{ .MemPerc }}\"},\"cpu\":\"{{ .CPUPerc }}\"}"