docker 容器相关命令使用
一,容器概述
容器时指docker对外提供服务的一个实例,容器要想启动必须满足至少有一个进程运行在前台(容器内部的前台)。
查看容器使用资源
docker stats --no-stream --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" | sort -k 4 -h
docker stats 监控容器资源消耗
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 命令显式的指定目标容器的名称或者是 ID。
docker stats --no-stream 【指定目标容器的名称或者是 ID】
你如果想要知道,一个运行起来的容器,占用了多少磁盘空间该怎么做呢?
docker ps -s
没错SIZE列,就是容器占用空间的大小,那这个括号外面的和里面的分别是什么意思
SIZE:
括号外面的,如:2B. 表示现在向容器的可写层写入的数据量的大小。
括号里面的(virtual 43.6MB。表示:镜像大小 + 可写层数据量大小 之和。
二、启动容器
格式:
docker run [参数] [镜像名称|ID] [指定的容器运行命令(如果不设置则使用默认命令)]
流程:
1、执行一个docker run
2、检查本地是否存在所需镜像,如果没有则去远程镜像仓库下载。
3、按照镜像和参数启动一个容器
示例:
[root@docker ~]# docker run -d nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
Digest: sha256:4cf620a5c81390ee209398ecc18e5fb9dd0f5155cd82adcbae532fec94006fb9
Status: Downloaded newer image for nginx:latest
22b601ab6f9f7010221440f1158e0ece348768e4df1b133690f1c503ed012e4d
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
22b601ab6f9f nginx "/docker-entrypoint.…" About a minute ago Up About a minute 80/tcp interesting_banach
参数:
-d : 只以守护进程的模式运行一个容器
-i : 打开标准输出
-t : 创建一个窗口(伪终端)
-p(小写的p字母) : 指定映射端口
docker run -d -p 30080:80 nginx;docker ps
-P(大写的P字母) : 随机映射端口
docker run -d -P nginx; docker ps
-v : 指定挂载卷(将本机的目录映射到容器内部)
作用:
1、将本机目录"软链接"容器内部
2、可以持久化容器内部数据
示例:
docker run -d -P -v /root/test:/usr/share/nginx/html nginx:latest
--name : 指定容器的名称
作用:
1、指定容器名称
2、将名称解析到docker dns上
示例:
docker run -d --name nginx nginx
--link : 将一个容器的网络连接到另外一个容器
格式:
--link 容器名称:连接别名
示例:
docker run -d --name test_nginx nginx
docker run -it --link test_nginx:test_nginx centos
--rm : 当容器的生命周期结束时,自动删除容器
示例:
docker run -d --rm centos sleep 10
--network : 连接网桥(同一个网桥内的所有容器网络互通)
示例:
docker network create chenyang
docker run -d --network chenyang nginx
三、停止容器
停止容器,并没有删除容器。
格式:
docker stop [容器ID及名称]
示例:
docker stop agitated_newton
[root@docker ~/test]# docker ps -a | grep agitated_newton
d4b2a919cb7f nginx "/docker-entrypoint.…" 21 minutes ago Exited (0) 28 seconds ago agitated_newton
四、启动容器
格式:
docker start [容器ID及名称]
示例:
[root@docker ~/test]# docker start agitated_newton
agitated_newton
[root@docker ~/test]# docker ps -a | grep agitated_newton
d4b2a919cb7f nginx "/docker-entrypoint.…" 23 minutes ago Up 2 seconds 80/tcp agitated_newton
五、删除容器
格式:
docker rm [容器ID及名称]
示例:
[root@docker ~/test]# docker rm laughing_hopper
laughing_hopper
参数:
-f : 强制删除
六、查询容器
docker ps 默认查询正在运行的容器
格式:
docker ps [参数]
示例:
[root@docker ~/test]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4b2a919cb7f nginx "/docker-entrypoint.…" 26 minutes ago Up 3 minutes 80/tcp agitated_newton
参数:
-a : 查询本机上所有的容器(包括已经停止了的)
-q : 只显示容器ID
列表参数:
CONTAINER ID:容器ID
IMAGE :镜像ID
COMMAND :启动容器运行的命令
CREATED :容器创建的时间
STATUS :状态(Up:启动状态 Exitd:停止状态)
PORTS :端口映射
NAMES :容器名称
七、查看容器的详细信息
格式:
docker inspect [容器ID或名称]
示例:
[root@docker ~/test]# docker inspect 22b601ab6f9f
[
{
"Id": "22b601ab6f9f7010221440f1158e0ece348768e4df1b133690f1c503ed012e4d",
"Created": "2021-01-12T09:29:07.881750107Z",
"Path": "/docker-entrypoint.sh",
"Args": [
"nginx",
"-g",
"daemon off;"
],
...
参数:
-f : 指定使用golang语言模板
示例:
[root@docker ~/test]# docker inspect -f '{{ .State.Status }}' d4b2a919cb7f
running
八、复制命令
格式:
第一种:复制到容器内
docker cp [宿主主机的路径] [容器ID]:[容器内的路径]
第二种:复制到容器外
docker cp [容器ID]:[容器内的路径] [宿主主机的路径]
示例:
[root@docker ~]# docker cp test/demo.html f50bb42dd583:/usr/share/nginx/html
[root@docker ~]# docker cp f50bb42dd583:/usr/share/nginx/html/50x.html .
[root@docker ~]# ll
total 3284696
-rw-r--r-- 1 root root 494 Dec 15 21:59 50x.html
九、进入容器
exec(推荐)
解释:
exec不是进入容器的命令,而是碰巧有这种功能。其功能是在容器外向容器内执行一条命令的命令。
格式:
docker exec [参数] [容器的ID或名称] [命令]
示例:
[root@docker ~]# docker exec -i -t ead6cdefcd01 bash
attach
解释:
进入容器。通过一个管道连接到容器的顶级进程。
缺点:当attach退出是,顺带把顶级进程也带走了。
格式:
docker attach [容器ID或名称]
示例:
[root@docker ~]# docker attach mystifying_kirch
nsenter
解释:建立两个进程之间的互通管道
格式:
nsenter --target $( docker inspect -f {{.State.Pid}} nginxv1 ) --mount --uts --ipc --net --pid
ssh
解释:通过ssh隧道连接
格式:
ssh root@x.x.x.x
十,查看容器启动日志
格式:
docker log [参数] [容器名称或ID]
示例:
[root@docker ~]# docker logs my_ngixn
十一,docker容器网络模式
格式:
docker network [command]
命令:
ls:查看网桥列表
示例
[root@docker ~/conf.d]# docker network ls
NETWORK ID NAME DRIVER SCOPE
a985cfca04ae bridge bridge local
c3d4dd997242 chenyang bridge local
a425f4733836 host host local
5902bdedd1b1 lnmd bridge local
ce7e9b514c2a none null local
create:创建网桥
示例:
[root@docker ~/conf.d]# docker network create test
[root@docker ~/conf.d]# docker network ls | grep test
45a9b8795a7c test bridge local
rm : 删除网桥
示例:
[root@docker ~/conf.d]# docker network rm test
test
[root@docker ~/conf.d]# docker network ls | grep test
inspect : 查看网桥详细信息
示例:
[root@docker ~/conf.d]# docker network inspect -f '{{ .Containers }}' lnmd
prune: 清理网桥(未被使用的网络模式)
示例:
docker network prune
connect: 连接一个网桥
示例
docker network connect [参数] [网桥名称] [容器名称]
disconnetc: 断开一个网桥连接
示例:
[root@docker ~/conf.d]# docker network disconnect lnmd sleepy_shaw
[root@docker ~/conf.d]# docker exec -it sleepy_shaw bash
[root@c548b0b76e31 /]# ping 767f43bc01d7
ping: 767f43bc01d7: Name or service not known