镜像操作
搜索镜像
这种方法只能用于官方镜像库
搜索基于 centos 操作系统的镜像
docker search centos
按星级搜索镜像:
查找 star 数至少为 100 的镜像,默认不加 s 选项找出所有相关 ubuntu 镜像:
docker search ubuntu -f stars=100
拉取镜像
docker pull centos
查看本地镜像
docker image list
查看镜像详情
docker image inspect 镜像id
images子命令选项
-a
--all=true
列出所有(包括临时文件)镜像文件,默认为否
--digests=true|false
列出镜像的数字摘要值,默认为否
-f --filter=[]
过滤列出的镜像,如dangling=true只显示没有被使用的镜像;也可以指定带有特殊标注的镜像等
--format="TEMPLATE"
控制输出格式,如.ID代表ID信息,Repository代表仓库信息
--no-trunc=true|false
对输出结果中太长的部分是否进行截断,如镜像的ID,默认为true
-q, --quiet=true|false
仅输出ID信息,默认为否
使用tag命令添加镜像标签
为了方便在后续工作中使用特定镜像,还可以使用docker tag命令来为本地镜像任意添加标签。
docker tag centos:centos7 mycentos:latest
使用history命令查看镜像历史
镜像文件由多个层组成,可以使用history子命令,该命令将列出各层的创建信息。
docker history f00
过长的命令会被自动截断,可以使用--no-trunc选项来输出完整命令
删除镜像
删除一个或多个,多个之间用空格隔开,可以使用镜像名称或id
docker rmi daocloud.io/library/mysql
强制删除:--force
如果镜像正在被使用中可以使用--force强制删除
docker rmi docker.io/ubuntu:latest --force
删除所有镜像
docker rmi $(docker images -q)
只查看所有镜像的id
docker images -q
查看镜像制作的过程
相当于dockfile
docker history daocloud.io/ubuntu
容器操作
创建新容器但不启动
docker create -it daocloud.io/library/centos:5 /bin/bash
创建并运行一个新Docker容器
同一个镜像可以启动多个容器,每次执行run子命令都会运行一个全新的容器
docker run -it --restart=always centos /bin/bash
如果执行成功,说明CentOS容器已经被启动,并且应该已经得到了bash提示符。
-i
捕获标准输入输出
-t
分配一个终端或控制台
--restart=always
容器随docker engine自启动,因为在重启docker的时候默认容器都会被关闭
--rm
默认情况下,每个容器在退出时,它的文件系统也会保存下来,这样一方面调试会方便些,因为可以通过查看日志等方式来确定最终状态。另一方面,也可以保存容器所产生的数据。但是仅仅需要短暂的运行一个容器,并且这些数据不需要保存,可能就希望Docker能在容器结束时自动清理其所产生的数据。这个时候就需要--rm参数了。注意:--rm 和 -d不能共用
断开与容器的连接,并且关闭容器
容器内部执行如下命令
exit
只想断开和容器的连接而不关闭容器
快捷键:ctrl+p+q
查看容器
只查看运行状态的容器
docker ps
docker ps -a
-a
查看所有容器
只查看所有容器id
docker ps -a -q
列出最近一次启动的容器
docker ps -l
启动容器
docker start name
关闭容器
docker stop name
docker kill name
强制终止容器
杀死所有running状态的容器
docker kill $(docker ps -q)
stop和kill的区别:
docker stop命令给容器中的进程发送SIGTERM信号,默认行为是会导致容器退出。
当然,容器内程序可以捕获该信号并自行处理,例如可以选择忽略。
而docker kill则是给容器的进程发送SIGKILL信号,该信号将会使容器必然退出。
删除容器
docker rm 容器id或名称
要删除一个运行中的容器,添加 -f 参数
根据格式删除所有容器
docker rm $(docker ps -qf status=exited)
重启容器
docker restart name
暂停容器
pause 暂停容器内的所有进程
通过docker stats可以观察到此时的资源使用情况是固定不变的,通过docker logs -f也观察不到日志的进一步输出。
恢复容器
docker start infallible_ramanujan
这里的名字是状态里面NAMES列列出的名字,这种方式同样会让容器运行在后台
让容器运行在后台
如果在docker run后面追加-d=true
或者-d
,那么容器将会运行在后台模式。
此时所有I/O数据只能通过网络资源或者共享卷组来进行交互。
因为容器不再监听你执行docker run的这个终端命令行窗口。
但可以通过执行docker attach来重新附着到该容器的回话中。
注意,容器运行在后台模式下,是不能使用--rm
选项的
docker run -d IMAGE[:TAG]
docker logs 容器ID
打印该容器的输出
rename
修改容器名
docker rename 容器ID 新容器名
stats
动态显示容器的资源消耗情况,包括:CPU、内存、网络I/O
docker stats 容器ID
port 输出容器端口与宿主机端口的映射情况
docker port 容器ID
连接容器
方法1.attacc
docker attach 容器id
前提是容器创建时必须指定了交互shell
方法2.exec
通过exec命令可以创建两种任务:后台型任务和交互型任务
交互型任务:
docker exec -it 容器id /bin/bash
后台型任务
docker exec 容器id touch /testfile
监控容器的运行
可以使用logs
、top
、events
、wait
这些子命令
logs
:
使用logs命令查看守护式容器
可以通过使用docker logs命令来查看容器的运行日志,其中--tail
选项可以指定查看最后几条日志,而-t
选项则可以对日志条目附加时间戳。使用-f
选项可以跟踪日志的输出,直到手动停止
top
:
显示一个运行的容器里面的进程信息
docker top birdben/ubuntu:v1
events
:
实时输出Docker服务器端的事件,包括容器的创建,启动,关闭等
docker start loving_meninsky
wait
:
捕捉容器停止时的退出码
执行此命令后,该命令会"hang
"在当前终端,直到容器停止,此时,会打印出容器的退出码
docker wait 01d8aa
//不同终端操作
diff
:
查看容器内发生改变的文件
docker diff 容器ID
宿主机和容器之间相互COPY文件
cp
的用法如下:
Usage: docker cp [OPTIONS] CONTAINER:PATH LOCALPATH
如:容器mysql中/usr/local/bin/存在docker-entrypoint.sh文件,可如下方式copy到宿主机
docker cp mysql:/usr/local/bin/docker-entrypoint.sh /root/
修改完毕后,将该文件重新copy回容器
docker cp /root/docker-entrypoint.sh mysql:/usr/local/bin/
查看容器详细信息
用于查看容器的配置信息,包含容器名、环境变量、运行命令、主机配置、网络配置和数据卷配置等
目标:
查找某一个运行中容器的id,然后使用docker inspect命令查看容器的信息。
可以使用镜像id的前面部分,不需要完整的id
docker inspect 90
[
{
"Id": "90ae508bd33aab472dfc4db635ef8a9c2d880cb89fed212882a91f5aa436e7fb",
"Created": "2020-04-30T07:41:56.834127061Z",
"Path": "nginx",
"Args": [
"-g",
.....
]
例如:
容器里在安装ip或ifconfig命令之前,查看网卡IP显示容器IP地址和端口号,如果输出是空的说明没有配置IP地址(不同的Docker容器可以通过此IP地址互相访问)
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器ID
列出所有绑定的端口:
docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' 容器ID
找出特殊的端口映射
比如找出容器里22端口所映射的docker本机的端口
docker inspect --format='{{(index (index .NetworkSettings.Ports "22/tcp") 0).HostPort}}' 容器ID
网友评论