FreezeJ' Blog

Docker常用命令(一)

2021-12-14

官方文档:https://docs.docker.com/engine/reference/commandline/docker/
菜鸟教程:https://www.runoob.com/docker/docker-command-manual.html

Docker的操作命令和可用参数非常多,经常不用容易生疏,做个文档记录一下做个备忘,持续补充…

容器操作

create

docker create创建容器,但是不启动

常用命令

运行容器:docker create -it --name mycontainer busybox:latest bash

run

docker run用于创建并启动容器

常用命令

指定名称:docker run -d --name=web_server nginx:latest

暴露端口:docker run -d -p 8088:80 nginx:latest

共享目录:docker run -d -v /var/www:/var/www nginx:latest,若想只读可以加上--read-only

root授权:docker run -t -i --privileged ubuntu bash

打标签:docker run -d -l my-label nginx:latest

详细解析:https://www.cnblogs.com/yfalcon/p/9044246.html

start/stop/restart

启动容器并attach连接容器:docker start -a -i CONTAINER

启动容器并后台运行:docker start CONTAINER

停止容器:docker stop CONTAINER

重启容器:docker restart CONTAINER

kill

docker kill CONTAINER杀死容器,可以使用--signal指定发送的退出信号,默认信号是SIGKILL

rm

docker rm CONTAINER删除停止的容器,使用-f参数强制删除

常用命令

删除容器以及数据卷:docker rm -v CONTAINER

删除所有退出状态的容器:docker rm $(docker ps -a -q --filter status=exited)

pause/unpause

暂停容器进程:docker pause CONTAINER

恢复容器进程:docker unpause CONTAINER

列出被暂停的容器:docker ps --filter status=paused

exec

docker exec在容器中执行命令

常用命令

进入容器shell:docker exec -it CONTAINER sh

后台运行命令:docker exec -d CONTAINER sleep 10

直接执行命令并输出:docker exec -i CONTAINER ps -ef

attach

docker attach可以连接到一个当前运行的容器,默认是会传递退出信号,使用ctrl+c是会把容器进程终止,从而退出容器。

有文档说使用--sig-proxy=false来避免退出,但是我测试是无效的(我执行的CMD是ping,其它没测试过),另一种方法我测试是可行的:当使用docker attach连接到容器后,使用ctrl+p+q可以跳出,并且容器程序不会断开。效果如下:

cp

docker cp容器和宿主机之间复制文件,不支持从容器复制到容器

从宿主机复制到容器:docker cp ./test.html CONTAINER:/usr/share/nginx/html/

从容器复制到宿主机:docker cp CONTAINER:/usr/share/nginx/html/index.html ./

wait

docker wait等待容器执行完成,输出状态码。对于一个进行中的容器,会阻塞直到容器执行退出

export/import

docker export导出容器的文件系统,相当于是一个文件系统的快照

docker import导入使用docker export导出的归档文件,作为一个镜像

export 和 import 导出的是一个容器的快照, 不是镜像本身, 也就是说没有 layer。快照文件将丢弃所有的历史记录和元数据信息。

常用命令

导出到一个tar文件:docker export --output="latest.tar" CONTAINER

从tar文件导入:docker import my_busybox.tar freeze/busybox:1.0

rename

docker rename OLD_NAME NEW_NAME修改容器名称,修改镜像名使用tag命令。