Docker其他常用命令
后台启动容器,不进入到容器
#docker run -d 镜像名centos
#docker run -d 镜像名centos
#问题:docker ps,发现centos停止了
#常见的坑,docker是容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
[root@iZwz9e60ytsp3m74u1cqhoZ /]# docker run -d centos
7ff3f0013851bb16f452432273bdb41a40547adb67869918b13a5245c113703c
[root@iZwz9e60ytsp3m74u1cqhoZ /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZwz9e60ytsp3m74u1cqhoZ /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7ff3f0013851 centos "/bin/bash" 12 seconds ago Exited (0) 11 seconds ago exciting_aryabhata
2bfc727f933c centos "/bin/bash" 3 minutes ago Exited (0) 2 minutes ago quirky_turing
[root@iZwz9e60ytsp3m74u1cqhoZ /]#
查看日志命令 docker logs
docker logs
# docker logs -f -t --tail 5 33d06f2e15e7 #容器id没有日志
因为容器中没有日志,自己编写一段shell脚本
"while true: do echo testing; sleep 2; done"
#执行shell脚本
docker run -d centos /bin/sh -c "while true; do echo etesting; sleep 1; done"
[root@iZwz9e60ytsp3m74u1cqhoZ /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a6ad27579a48 centos "/bin/sh -c 'while t…" 11 seconds ago Up 10 seconds intelligent_banach
#再次查看日志
[root@iZwz9e60ytsp3m74u1cqhoZ /]# docker logs -f -t --tail 10 a6ad27579a48
2021-01-03T10:32:51.869503736Z etesting
2021-01-03T10:32:52.871768571Z etesting
显示日志 的参数 docker logs -f -t --tail 10 a6ad27579a48
-tf #-t显示的时候带上时间戳, -f动态显示
–tail number #要显示的日志条数
查看容器中的进程信息top( linux里面用ps)
docker top 容器id
[root@iZwz9e60ytsp3m74u1cqhoZ /]# docker top a6ad27579a48
UID PID PPID C STIME TTY
root 2951 2931 0 18:31 ?
root 3614 2951 0 18:36 ?
查看容器内部的信息,查看镜像的元数据 inspect
#命令 docker inspect
[root@iZwz9e60ytsp3m74u1cqhoZ /]# docker inspect a6ad27579a48
[
{
"Id": "a6ad27579a4839ed5bfcd1c8f60661ac9ce834f8bedd96adc8c07667479bfad0",
"Created": "2021-01-03T10:31:34.39709125Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true; do echo etesting; sleep 1; done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 2951,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-01-03T10:31:34.703443547Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
"ResolvConfPath": "/var/lib/docker/containers/a6ad27579a4839ed5bfcd1c8f60661ac9ce834f8bedd96adc8c07667479bfad0/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/a6ad27579a4839ed5bfcd1c8f60661ac9ce834f8bedd96adc8c07667479bfad0/hostname",
"HostsPath": "/var/lib/docker/containers/a6ad27579a4839ed5bfcd1c8f60661ac9ce834f8bedd96adc8c07667479bfad0/hosts",
"LogPath": "/var/lib/docker/containers/a6ad27579a4839ed5bfcd1c8f60661ac9ce834f8bedd96adc8c07667479bfad0/a6ad27579a4839ed5bfcd1c8f60661ac9ce834f8bedd96adc8c07667479bfad0-json.log",
"Name": "/intelligent_banach",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"CgroupnsMode": "host",
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"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/e9bdf7d9e2eacf74e33a4fef64122fea04a7bb36d588997e0b29f1d1a0109399-init/diff:/var/lib/docker/overlay2/54a9b186772b637a767106595ed2c8049ed249fdcf49b2b36b33932c6efd5aba/diff",
"MergedDir": "/var/lib/docker/overlay2/e9bdf7d9e2eacf74e33a4fef64122fea04a7bb36d588997e0b29f1d1a0109399/merged",
"UpperDir": "/var/lib/docker/overlay2/e9bdf7d9e2eacf74e33a4fef64122fea04a7bb36d588997e0b29f1d1a0109399/diff",
"WorkDir": "/var/lib/docker/overlay2/e9bdf7d9e2eacf74e33a4fef64122fea04a7bb36d588997e0b29f1d1a0109399/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "a6ad27579a48",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh",
"-c",
"while true; do echo etesting; sleep 1; done"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20201204",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "7fd057a81aed122c0598dccf7fb3086da08da0d4988d2804fe809fa1b266b9c0",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/7fd057a81aed",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "232324f0d531520d3b54aa6188d6b12d82847582fc8552fcb998bd1a810a1607",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "020e8dae014a7cd1c96f3d17b91fe5fdc4fbb36d5cb3ca238b70b2ae5754ada0",
"EndpointID": "232324f0d531520d3b54aa6188d6b12d82847582fc8552fcb998bd1a810a1607",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
进入当前正在运行的容器
通常容器都是使用后台方式运行,这个时候需要进入容器,修改一些配置
命令 一docker exec -it 容器id /bin/bash
#docker exec -it 容器id /bin/bash
#测试
[root@iZwz9e60ytsp3m74u1cqhoZ /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a6ad27579a48 centos "/bin/sh -c 'while t…" 22 minutes ago Up 22 minutes intelligent_banach
[root@iZwz9e60ytsp3m74u1cqhoZ /]# docker exec -it a6ad27579a48 /bin/bash
[root@a6ad27579a48 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@a6ad27579a48 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:31 ? 00:00:00 /bin/sh -c while true; do echo etesting; sleep 1; done
root 1385 0 0 10:54 pts/0 00:00:00 /bin/bash
root 1417 1 0 10:54 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root 1418 1385 0 10:54 pts/0 00:00:00 ps -ef
进入容器的方式二,docker attach 容器id
docker attach 容器id
#这个attach 的方式会正在执行当前的代码
#对比docker exec 和 docker attach
#docker exec -it 容器id /bin/bash #进入容器后开启一个新的终端,可以在里面操作(常用)
#docker attach #进入容器执行的终端,不会启动新的进程
从容器中拷贝文件到外部主机上
docker cp 容器id:容器内路径 目的路径
docker cp 787f9ca47b95:/home/testInContainer.java /home
#测试
[root@iZwz9e60ytsp3m74u1cqhoZ home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
787f9ca47b95 centos "/bin/bash" About a minute ago Up About a minute frosty_keldysh
[root@iZwz9e60ytsp3m74u1cqhoZ home]# docker attach 787f9ca47b95
[root@787f9ca47b95 /]# cd /home
[root@787f9ca47b95 home]# ls
[root@787f9ca47b95 home]# touch testInContainer.java #dockers容器内部新建文件
[root@787f9ca47b95 home]# ls
testInContainer.java
[root@787f9ca47b95 home]# exit
exit
[root@iZwz9e60ytsp3m74u1cqhoZ home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZwz9e60ytsp3m74u1cqhoZ home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
787f9ca47b95 centos "/bin/bash" 4 minutes ago Exited (0) 20 seconds ago frosty_keldysh
#docker里面的数据拷贝到主机上
[root@iZwz9e60ytsp3m74u1cqhoZ home]# docker cp 787f9ca47b95:/home/testInContainer.java /home
[root@iZwz9e60ytsp3m74u1cqhoZ home]# ls
itiffany.java redis testInContainer.java www
docker stats 查看cpu的状态
小结
attach, 当前shell下attach 连接指定运行镜像
build 通过dockerfile定制镜像
commit 提交当前容器为新的镜像
cp 从容器中拷贝指定文件或者目录到主机中
create 创建一个新的容器,同run,但是不会启动容器
diff 查看容器变化
events 从docker服务获取容器实时时间
exec 在已经存在的容器上运行命令
export 导出容器的内容作为一个tar归档文件
history 展示一个镜像形成历史
images 理出系统当前镜像
import 从tar包中的内容创建一个新的文件系统映像
info 显示系统相关信息
inspect 查看容器详情信息
kill kill掉指定docker容器
load 一个tar 包中加载一个镜像,对应sava
login 注册或者登陆一个docker源服务器
logout 从当前docker registry退出
logs输出当前容器日志信息
port 查看映射端口对应的容器内部源端口
pause 暂停容器
ps 列出容器列表
pull 拉取指定镜像
push 推送指定镜像或者库镜像到docker源服务器
restart 重启运行的容器
rm 移除一个或者多个容器
rmi 移除一个或者多个镜像(需要没有容器使用镜像时删除,或者-f强制删除)
run 创建一个新的容器并且运行一个命令
save 保存一个镜像为tar包,跟load对应
search 在docker hub中搜索镜像
start 启动容器
stop 停止容器
tag 给源中镜像打标签
top 查看容器中运行的进程信息
unpause 取消暂停容器
version 查看docker的版本号
wait 截取容器停止时的退出状态值