docker 容器

Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用

容器是从镜像创建的应用运行实例。它可以启动,开始,停止,删除,而这些容器都是彼此相互隔离,互不可见的。同时,可以把容器看作一个简易版的linux系统环境(包括root用户权限,进程空间,用户空间,网络空间等)以及运行在其中的应用程序打包而成的盒子。

创建容器常用命令选项

docker 创建容器

创建容器:
root@S1:~# docker create alpine
e3ddcf97b360624cd6f38b6edf846fac2029c8009c6ca78f5411b52986d55e7e
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e3ddcf97b360 alpine "/bin/sh" seconds ago Created sad_jang
启动容器
root@S1:~# docker start e3ddcf97b360
e3ddcf97b360
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e3ddcf97b360 alpine "/bin/sh" About a minute ago Exited () second ago sad_jang 创建并启动容器,一条docker run container 命令的时候,docker后台运行的标准操作:
.检查本地是否存在指定的镜像,不存在就从公有仓库下载
.利用镜像创建一个容器,并启动该容器
.分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层
.从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
.从网桥的地址池配置一个IP地址给容器
.给执行用户指定的应用程序
.执行完毕后容器被自动终止
eg:
root@S1:~# docker run alpine
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55c626545c72 alpine "/bin/sh" seconds ago Exited () seconds ago stoic_ritchie
e3ddcf97b360 alpine "/bin/sh" About a minute ago Exited () seconds ago sad_jang
利用docker run alpine 创建交互式bash终端
-i: 以交互模式运行容器,通常与 -t 同时使用; 
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用

root@S1:~# docker run -it alpine /bin/bash
root@S1:~# docker run -it alpine /bin/sh
/ # ps -ef
PID USER TIME COMMAND
root : /bin/sh
root : ps -ef 注意事项:错误代码
:docker daemon 执行出错,例如指定了不支持的docker 参数
:所有指令无法执行,例如权限出错
:容器内命令无法找到 后台启动docker容器
root@S1:~# docker run -it -d alpine /bin/sh
5b1a3e413a68487aa7963274f1438c8c63ecf1fb821994ed3e2959e241ca08c9
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5b1a3e413a68 alpine "/bin/sh" seconds ago Up seconds pensive_heyrovsky

docker创建容器常用参数命令

-h 指定容器 hostname
root@S1:~# docker run -it -h web01 alpine /bin/sh
/ # hostname
web01 --name 指定容器名称
root@S1:~# docker run -it -d -h nginx-web --name nginx-web alpine /bin/sh
0eb95f85ec984a8872ee5a2b12f1b02d7eff34801e217fac1d82b3991d0b6226
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0eb95f85ec98 alpine "/bin/sh" seconds ago Up seconds nginx-web -p ip:port : port
root@S1:~# docker run -it -d -h mysql01 -p 127.0.0.1:: --name mysql01 mysql /bin/sh
263b7ed4038d6d9f41e6a88560c72322a3dd5db5b7a56d67a11122adef731f56
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
263b7ed4038d mysql "docker-entrypoint.s…" seconds ago Up seconds 127.0.0.1:->/tcp, /tcp mysql01
0eb95f85ec98 alpine "/bin/sh" minutes ago Up minutes nginx-web
root@S1:~# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 127.0.0.1: 0.0.0.0:* LISTEN /docker-proxy
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd -P 随机映射端口主机
root@S1:~# docker run -it -d -h mysql02 -P --name mysql02 mysql /bin/sh
c8170d5fbb1825d0412155388a4defecaf6ca45b6f48d50681be584f5cb438cd root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c8170d5fbb18 mysql "docker-entrypoint.s…" seconds ago Up seconds 0.0.0.0:->/tcp, 0.0.0.0:->/tcp mysql02 root@S1:~# netstat -tnlp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 ::: :::* LISTEN /docker-proxy
tcp6 ::: :::* LISTEN /docker-proxy 如果在执行run命令时没有指定-a,那么docker默认会挂载所有标准数据流,包括输入输出和错误。你可以特别指定挂载哪个标准流。
root@S1:~# docker run -a stdin -a stdout -it ubuntu /bin/sh 只挂载了标准输入和标准输出 一般这个选项不经常用 -e 指定参数(环境变量)
root@S1:~# docker run -d --name web -e test=test01 -p : -h web nginx
4faf1e7d69b4d751eaca37d1992991cddc07b948631dc31d1e70ab891b2f1e40
root@S1:~#
root@S1:~# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4faf1e7d69b4 nginx "nginx -g 'daemon of…" seconds ago Up seconds 0.0.0.0:->/tcp web
root@S1:~# docker exec -it web /bin/bash
root@web:/# echo $test
test01 --link 容器之间的连接地址
root@S1:~# docker run -it -d --name test01 ubuntu /bin/bash
239115eedf1f899532387fa5536cc337684a7cd7c19ceea5d44d67023e8c581e
root@S1:~# docker run -it -d --name test02 --link test01 ubuntu /bin/bash
a1485616496fe8530e373f1cb992a3a407d5cf37e2ea353b9b51f9a8ccdf47ec
root@S1:~# docker exec -it test02 /bin/bash
root@a1485616496f:/# ping test01
PING test01 (172.17.0.2): data bytes
bytes from 172.17.0.2: icmp_seq= ttl= time=0.116 ms
bytes from 172.17.0.2: icmp_seq= ttl= time=0.088 ms
^C--- test01 ping statistics ---
packets transmitted, packets received, % packet loss
round-trip min/avg/max/stddev = 0.088/0.102/0.116/0.000 ms
root@a1485616496f:/#

管理容器常用命令

列出所有容器
root@S1:~# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1485616496f ubuntu "/bin/bash" minutes ago Up minutes test02
239115eedf1f ubuntu "/bin/bash" minutes ago Up minutes test01
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1485616496f ubuntu "/bin/bash" minutes ago Up minutes test02
239115eedf1f ubuntu "/bin/bash" minutes ago Up minutes test01 进入正在运行的容器
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3845f0c67437 ubuntu "/bin/bash" seconds ago Up second test02
21466d64e370 ubuntu "/bin/bash" seconds ago Up seconds test01
root@S1:~# docker attach test01
root@21466d64e370:/# exit
exit
root@S1:~# docker exec -it test02 /bin/bash
root@3845f0c67437:/# exit
exit
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3845f0c67437 ubuntu "/bin/bash" seconds ago Up seconds test02
21466d64e370 ubuntu "/bin/bash" seconds ago Exited () seconds ago test01
root@S1:~# 观察以上两种进入容器的方式:
attach :进入容器 退出后 容器后退出,并且如果多个终端使用attach 进入容器,界面上会同时输出相同的内容,所以我们工作过程中一般都是用exec的方式进入终端

docker commit

root@S1:~# docker commit --help

Usage:    docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:
-a, --author string 提交者的镜像作者
-c, --change list 使用Dockerfile指令来创建镜像
-m, --message string 提交时的说明文字
-p, --pause 在commit时,将容器暂停 root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3845f0c67437 ubuntu "/bin/bash" minutes ago Up minutes test02
21466d64e370 ubuntu "/bin/bash" minutes ago Up minutes test01
root@S1:~# docker commit -p -a zzl -m "add file" 21466d64e370 ubuntu_file
sha256:a48bd97b8d36091395e839cd2971f3b642ffc21668d8dda029ed5b1e777367c0
root@S1:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu_file latest a48bd97b8d36 seconds ago .9MB

docker cp:

docker cp命令类似于UNIX中的cp -a命令,递归复制目录下的所有子目录和文件
-表示通过标准输入/输出设备以流的方式读取或写入tar文件
本地文件系统中的路径可以是绝对路径,也可以是相对路径,相对于当前命令执行的路径
容器中的路径都是相对容器的/根路径
被操作的容器可以是在运行状态,也可以是停止状态
不能复制/proc, /sys, /dev, tmpfs和容器中mount的路径下的文件
root@S1:~# docker cp --help

Usage:    docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
从容器中复制文件或目录到执行命令所在机器的指定路径
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
从执行命令所在的机器复制文件或目录到容器内部的指定路径 Copy files/folders between a container and the local filesystem
在容器和本地文件系统之间复制文件/文件夹 Options:
-a, --archive Archive mode (copy all uid/gid information)
归档模式(复制所有UID / GID信息)
-L, --follow-link Always follow symbol link in SRC_PATH
总是跟在源地址符号链接 root@S1:~# docker cp /data/ 21466d64e370:/home
root@S1:~# docker exec -it 21466d64e370 /bin/bash
root@21466d64e370:/# ls /home/
data
root@21466d64e370:/# ls /home/data/
test01
root@21466d64e370:/# ls /home/data/test01/ root@21466d64e370:/# exit
exit root@S1:~# docker cp 21466d64e370:/home/data/test01 /home
root@S1:~# tree /home/
/home/
└── test01
├──
└── directory, files

查看容器日志: docker logs

root@S1:~# docker logs --help

Usage:    docker logs [OPTIONS] CONTAINER

Fetch the logs of a container

Options:
--details 显示更多的详细信息
-f, --follow 跟踪实时日志,相当于查看文件的tail -f 命令
--since string Show logs since timestamp (e.g. --02T13::) or relative (e.g. 42m for minutes)
显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string Number of lines to show from the end of the logs (default "all")
从日志末尾显示多少行日志, 默认是all
-t, --timestamps Show timestamps
显示时间戳
--until string Show logs before a timestamp (e.g. --02T13::) or relative (e.g. 42m for minutes)
显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟) 指定时间后的日志,只显示2行:
root@S1:~# docker logs -f -t --since="2019-04-08" --tail= 041f78444522
--09T11::.934492726Z 222.129.12.90 - - [/Apr/::: +] "GET / HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
--09T11::.627818454Z 222.129.12.90 - - [/Apr/::: +] "GET / HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-" 查看最近多久的日志:
root@S1:~# docker logs --since 1m 041f78444522
root@S1:~#
root@S1:~# docker logs --since 4m 041f78444522
222.129.12.90 - - [/Apr/::: +] "GET / HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-"
222.129.12.90 - - [/Apr/::: +] "GET / HTTP/1.1" "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36" "-" 查看某一个时间以后的日志:
docker logs -t --since="2019-04-09T19:08:00" 041f78444522 查看某一个时间段的日志:
docker logs -t --since="2019-04-09T19:08:00" --until "2019-04-09T19:16:00" 041f78444522

查看容器:docker top ,docker stat,docker inspect

docker top:这个命令类似于linux系统中的top命令,会打印出容器内的进程信息,包括PID,用户,时间,命令等

root@S1:~# docker top web02
UID PID PPID C STIME TTY TIME CMD
root : ? :: nginx: master process nginx -g daemon off;
systemd+ : ? :: nginx: worker process

docker stats:会显示cpu,内存,存储,网络等使用情况的统计信息

root@S1:~# docker stats --help

Usage:    docker stats [OPTIONS] [CONTAINER...]

Display a live stream of container(s) resource usage statistics

Options:
-a, --all 展示所有的容器统计信息,默认仅展示运行中的。
--format string 格式化输出信息
--no-stream 不持续输出结果,默认会自动更新持续刷新结果
--no-trunc 不截断输出信息, root@S1:~# docker stats --all --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" web02
CONTAINER CPU % MEM USAGE / LIMIT
web02 0.00% .379MiB / .796GiB root@S1:~# docker stats --all --no-stream --no-trunc web02
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
041f78444522e966db1799939d6f4d3214211e175169c467f9fd2a274e5a3dfd web02 0.00% .379MiB / .796GiB 0.02% .1kB / .9kB 0B / 0B

docker inspect :查看容器的具体信息,会以json格式返回包括容器id,创建时间,路径,状态,镜像,配置等在内的各项信息。

root@S1:~# docker inspect web02
[
{
"Id": "041f78444522e966db1799939d6f4d3214211e175169c467f9fd2a274e5a3dfd",
"Created": "2019-04-09T11:00:48.284799764Z",
"Path": "nginx",
"Args": [
"-g",
"daemon off;"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": ,
"ExitCode": ,
"Error": "",
"StartedAt": "2019-04-09T11:00:48.686519835Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:2bcb04bdb83f7c5dc30f0edaca1609a716bda1c7d2244d4f5fbbdfef33da366c",
"ResolvConfPath": "/var/lib/docker/containers/041f78444522e966db1799939d6f4d3214211e175169c467f9fd2a274e5a3dfd/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/041f78444522e966db1799939d6f4d3214211e175169c467f9fd2a274e5a3dfd/hostname",
"HostsPath": "/var/lib/docker/containers/041f78444522e966db1799939d6f4d3214211e175169c467f9fd2a274e5a3dfd/hosts",
"LogPath": "/var/lib/docker/containers/041f78444522e966db1799939d6f4d3214211e175169c467f9fd2a274e5a3dfd/041f78444522e966db1799939d6f4d3214211e175169c467f9fd2a274e5a3dfd-json.log",
"Name": "/web02",
"RestartCount": ,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "docker-default",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {
"80/tcp": [
{
"HostIp": "",
"HostPort": ""
}
]
},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount":
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "shareable",
"Cgroup": "",
"Links": null,
"OomScoreAdj": ,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": ,
"Runtime": "runc",
"ConsoleSize": [
, ],
"Isolation": "",
"CpuShares": ,
"Memory": ,
"NanoCpus": ,
"CgroupParent": "",
"BlkioWeight": ,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": ,
"CpuQuota": ,
"CpuRealtimePeriod": ,
"CpuRealtimeRuntime": ,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DiskQuota": ,
"KernelMemory": ,
"MemoryReservation": ,
"MemorySwap": ,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": ,
"Ulimits": null,
"CpuCount": ,
"CpuPercent": ,
"IOMaximumIOps": ,
"IOMaximumBandwidth": ,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/4c7f2ac8bf897e6332a8c6a3047f445404927bd09e83a7b27a04f1cc05344681-init/diff:/var/lib/docker/overlay2/9ca2d931df59289149c6b44a79f56f8062b13a7b25e59ef7beb536e0549d4903/diff:/var/lib/docker/overlay2/2ef3c325706f26099a8587acfc86ed12f1fa1caf2f2d80f47cda4376352c7208/diff:/var/lib/docker/overlay2/395f2e0d9649aafaf32df2a7bae0789b52998e1b1c5244a100e4a05ef7ca1645/diff",
"MergedDir": "/var/lib/docker/overlay2/4c7f2ac8bf897e6332a8c6a3047f445404927bd09e83a7b27a04f1cc05344681/merged",
"UpperDir": "/var/lib/docker/overlay2/4c7f2ac8bf897e6332a8c6a3047f445404927bd09e83a7b27a04f1cc05344681/diff",
"WorkDir": "/var/lib/docker/overlay2/4c7f2ac8bf897e6332a8c6a3047f445404927bd09e83a7b27a04f1cc05344681/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "web02",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NGINX_VERSION=1.15.10-1~stretch",
"NJS_VERSION=1.15.10.0.3.0-1~stretch"
],
"Cmd": [
"nginx",
"-g",
"daemon off;"
],
"ArgsEscaped": true,
"Image": "nginx",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
},
"StopSignal": "SIGTERM"
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "f4e4797bec40962423f65407c89766d857fea447d52a7ade8cfe5aaf20858061",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": ,
"Ports": {
"80/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": ""
}
]
},
"SandboxKey": "/var/run/docker/netns/f4e4797bec40",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "f77a0b8bb56d8015db589406b5dfd0b3ba0fa80909534f557bc1e7add35f3897",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": ,
"IPAddress": "172.17.0.3",
"IPPrefixLen": ,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:03",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "23bf65ad51ee330fd8c1b980da68b6cc2cd72ebb95a3c4b0782227fae94fc8f6",
"EndpointID": "f77a0b8bb56d8015db589406b5dfd0b3ba0fa80909534f557bc1e7add35f3897",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": ,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": ,
"MacAddress": "02:42:ac:11:00:03",
"DriverOpts": null
}
}
}
}
]

停止容器 :docker pause/unpause ,stop,start, restart,prune

root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
041f78444522 nginx "nginx -g 'daemon of…" minutes ago Up minutes 0.0.0.0:->/tcp web02
#暂停运行着的容器
root@S1:~# docker pause web02
web02
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
041f78444522 nginx "nginx -g 'daemon of…" minutes ago Up minutes (Paused) 0.0.0.0:->/tcp web02 #恢复暂停时的容器为运行状态
root@S1:~# docker unpause web02
web02
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
041f78444522 nginx "nginx -g 'daemon of…" minutes ago Up minutes 0.0.0.0:->/tcp web02
关闭正在运行的状态,该命令首先向容器放送一个SIGTERM信号,等待一段时间后(默认是10秒),在发送SIGKILL信号,来终止运行
root@S1:~# docker stop web02
web02
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
041f78444522 nginx "nginx -g 'daemon of…" minutes ago Exited () seconds ago web02
启动已经停止的容器
root@S1:~# docker start web02
web02
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
041f78444522 nginx "nginx -g 'daemon of…" minutes ago Up seconds 0.0.0.0:->/tcp web02
也可以重启
root@S1:~# docker restart web02
web02
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
041f78444522 nginx "nginx -g 'daemon of…" minutes ago Up seconds 0.0.0.0:->/tcp web02
该命令会擦除所有停止的容器
root@S1:~# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
041f78444522e966db1799939d6f4d3214211e175169c467f9fd2a274e5a3dfd Total reclaimed space: 0B
root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@S1:~#

删除容器:docker rm

root@S1:~# docker rm --help

Usage:    docker rm [OPTIONS] CONTAINER [CONTAINER...]

Remove one or more containers

Options:
-f, --force 强制终止并删除一个正在运行中的容器,也就是docker直接发送SIGKILL信号
-l, --link 删除容器的连接,但是保留容器
-v, --volumes 删除容器挂载的数据卷 root@S1:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ae42c0f6014c nginx "nginx -g 'daemon of…" minutes ago Up minutes 0.0.0.0:->/tcp web02
root@S1:~# docker rm ae
Error response from daemon: You cannot remove a running container ae42c0f6014c80efa723938238a33e1c0f15197f04e442daff01d4c45edad5de. Stop the container before attempting removal or force remove
root@S1:~# docker rm -f ae
ae

像以上这种命令还有很多,附上官网连接地址:https://docs.docker.com/engine/reference/run/

容器资源限制

内存限定示例:

--memory 限制容器使用内存为512m 可使用交换分区为612-=100m  禁用oom-kill
root@S1:~# docker run -d --name web01 --memory="512m" --memory-swap="612m" --oom-kill-disable nginx
81cb2576b8591a20b42a276bd8cef76d62836c5ee8df701e4cd223ec396348ba 可使用交换分区为0M
root@S1:~# docker run -d --name web02 --memory="512m" --memory-swap="512m" --oom-kill-disable nginx
2763ef83db8ef343e73dc34a8067cb703887728b955bb14af63ae029258c701e 不设置交换分区 是指可以使用交换分区为限定内存的2倍
root@S1:~# docker run -d --name web03 --memory="512m" --oom-kill-disable nginx
5a99b7a49796ce4db884ad66f13b3665c950336180dea616cc39788e05afbc01 不限制使用内存
root@S1:~# docker run -d --name web04 nginx
952cc1ee0a2f199b2bab2a188eecbfcafd65bcaac728ddd6393ac21fd412c433 root@S1:~# docker stats --no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
952cc1ee0a2f web04 0.00% .352MiB / .796GiB 0.02% 0B / 0B 0B / 0B
5a99b7a49796 web03 0.00% .359MiB / 512MiB 0.46% 0B / 0B 0B / 0B
2763ef83db8e web02 0.00% .156MiB / 512MiB 0.42% 0B / 0B 0B / 0B
81cb2576b859 web01 0.00% .273MiB / 512MiB 0.44% 0B / 0B 0B / 0B

cpu限定示例:

限定容器最多使用一个半的cpu
root@S1:~# docker run -d --name web05 --cpus="1.5" nginx
a2dbd9b0cdf75d3aa9eedda45e16fd7a0eb47567302aa612fe6481eb9696257c 限定容器最多使用百分之50的cpu
root@S1:~# docker run -d --name web06 --cpus=".5" nginx
7cd4a8f72f8dc77998f6b190c7ecc8f0df6fd86d59c096d1c00e9eedf6fe12ab

docker container(容器)的更多相关文章

  1. Docker 0x01:Docker Container容器技术

    目录 Docker Container容器技术 一句话回答什么是容器? 为什么要有容器? 容器技术的影响 容器技术浅谈原理,怎么实现的?为什么能够这样轻量级标准化 难点 容器的标准 花边 Docker ...

  2. 进入正在运行的 docker 容器(docker container)

    在使用 docker 容器的时候,我们总会想看看容器内部长什么样子:我们使用 docker exec 命令可以满足我们的期望: ➜ compose docker exec --help Usage: ...

  3. Docker的容器

    容器是一个打包了应用和服务的环境,是一个轻量级的虚拟机,每一个容器都由一组特定的应用和必要的依赖库组成. 容器的管理操作 容器常见的命令:查看.创建.启动.终止和删除 创建容器 docker crea ...

  4. 【转】深入 Docker:容器和镜像

    在本专栏往期的 Flux7 系列教程 里,我们已经简单地探讨了 Docker 的基本操作.而在那篇教程中,我们一直是简单地将容器当成是"正在运行的镜像",并没有深入地区分镜像和容器 ...

  5. 理解Docker单机容器网络

    在” 理解Docker单机容器网络 “一文中,还有一个Docker容器网络的功能尚未提及,那就是Docker容器的端口映射.即将容器的服务端口P’ 绑定到宿主机的端口P上,最终达到一种效果:外部程序通 ...

  6. Docker与容器快速入门

    Docker之风席卷全球,但很多人觉得docker入门确实不太容易,其原因在于很多知识点上没准备好,在docker解决了什么问题.怎么解决的.用什么技术解决的都还没想清楚的时候就去探索docker组件 ...

  7. FW Docker为容器分配指定物理网段的静态IP

    官方有关于网桥和IP配置的文档地址:https://docs.docker.com/articles/networking/ 1.宿主机(系统采用ubuntu-14.04.1-server-amd64 ...

  8. Docker,容器,虚拟机和红烧肉

    Docker火了,有多火你自己看看下面的统计数据就知道了 在发布4个月的时间里,下载量就超过50000次,github上收到超过4000个star,涌现了超过100个贡献者,并且有超过150个项目和超 ...

  9. Docker: 限制容器可用的 CPU

    默认情况下容器可以使用的主机 CPU 资源是不受限制的.和内存资源的使用一样,如果不对容器可以使用的 CPU 资源进行限制,一旦发生容器内程序异常使用 CPU 的情况,很可能把整个主机的 CPU 资源 ...

随机推荐

  1. 地图投影——高斯-克吕格投影、墨卡托投影和UTM投影

    地图投影(Map Projection) http://baike.baidu.com/view/94066.htm 概念: 地图投影是把地球表面的任意点,利用一定数学法则,转换到地图平面上的理论和方 ...

  2. SetTimer 和 OnTimer 的使用

    最近在公司做一个MFC项目,因为是MFC新手,所以在这里记录一些最近用到和学到的东西留着以后查阅. 今天遇到的一个问题是要在窗口刚刚初始化完成时自动检测一个配置文件是否存在(实际上就是检测是不是首次登 ...

  3. Linux环境下用C语言实现socket 通信---简单代码

    Socket编程实例: 服务器端:一直监听本机的8000号端口,如果收到连接请求,将接收请求并接收客户端发来的消息,并向客户端返回消息. 客户端:client.c /* File Name: clie ...

  4. Linux CentOS设置定时重启:crontab

    上一篇介绍了 开机自启动chkconfig命令  https://www.cnblogs.com/prefectjava/p/9399470.html 本篇介绍 crontab 设置定时任务,并且把 ...

  5. CSS 图像高级 CSS 渐变

    CSS 渐变 CSS 渐变是在 CSS3 Image Module 中新增加的 <image> 类型. 使用 CSS 渐变可以在两种颜色间制造出平滑的渐变效果.用渐变代替图片,可以加快页面 ...

  6. Win2016以及win10 IIS10 下安装IEwebcontrol的方法

    1. 公司产品需要安装IE webcontrol控件 但是在win2016以及win10 上面安装时 因为IIS 已经升级到了IIS10 安装时会提示: 兼容解决的方法比较简单,修改注册表即可 HKE ...

  7. sqli-labs(十三)(hpp)

    第二十九关 这关说的是有waf,其实只是模拟waf的场景,就是说waf处理的变量和后台程序接受的变量不一致. 考验的参数污染,具体可以参考其他文章关于HPP的解释. 先看源码吧: 输入?id=1&am ...

  8. C语言指针入门

    指针指包含地址 声明指针: int num:声明整数 int *num:声明指针,下面的声明也是等价的,空格的使用指示个人爱好 int* num; int  *  num; int  *num; in ...

  9. NTLM移除

  10. 为什么gitHub提交记录显示作者名称是unknow?

    unknow,为什么? gitHub上提交记录显示作者名称是unknow,刚开始没怎么管,后面遇到问题看提交记录时发现有两个unknow(一定有一个人遇到和我一样的问题了,哈哈..),于是解决一下吧. ...