Docker教程:常用命令


Docker image相关命令

docker images

检查已经下载的docker镜像。

docker image rm IMAGE_NAME

删除指定的docker镜像

docker pull

用于下载对应的docker image,比如:

bash
docker pull redis

docker rmi

删除一个镜像

bash
docker rmi IMAGE_ID

删除多个镜像

bash
docker rmi IMAGE_ID_1 IMAGE_ID_2 IMAGE_ID_3

删除所有镜像

bash
docker rmi ${docker images -qa}

在Docker中有一种既没有名字,也没有标签(版本)的镜像,叫做dangling image,这种镜像通常是Docker在运行时自动创建的,一般都可以进行删除。

bash
docker image prune

docker search

搜索一个Docker镜像,例如:

bash
docker search redis

也可以限定返回的记录数:

bash
docker search redis --limit 10

Docker container相关命令

docker attach

重新和容器的交互式终端关联,如果键入exit,会导致容器停止。

bash
docker attach CONTAINER_ID/CONTAINER_NAME

docker exec

通过交互模式进入容器内shell,进入后如果键入exit,不会导致容器停止

bash
docker exec -it CONTAINER_ID/CONTAINER_NAME /bin/bash

注意,有些镜像中没有安装bash,这时可以尝试sh:

bash
docker exec -it CONTAINER_ID/CONTAINER_NAME /bin/sh

注意,在Mac中输入exit可能无法返回host。这时可以键入Cmd+A+K

docker inspect

查看某个容器的详细信息:

bash
docker inspect CONTAINER_ID

docker logs CONTAINER_ID

查看容器日志

也可以使用:

bash
docker logs CONTAINER_NAME

docker ps

查看所有运行的容器

bash
docker ps

查看所有容器(包括已经运行结束的容器)的详细信息

bash
docker ps -a

查看最近使用的n个容器

bash
docker ps -a -n5

只查看容器编号

bash
docker ps -a -q

查看最近使用的容器

bash
docker ps -l

docker run

注意事项

当运行一个Docker容器时,默认情况下,容器运行结束后会自动退出。比如,当运行Hello-world,ubuntu时都会自动退出。如果不想让容器自动退出,可以运行一个前台进程,比如:redis等。或者以交互模式运行(在前台运行bash等)

从Docker镜像启动一个Docker容器

bash
docker run redis

指定镜像版本号

也可以在运行时指定redis的版本号,默认情况下使用最新的版本(latest):

bash
docker run redis:7.0

以后台方式运行

以后台方式运行则需要添加-d:

bash
docker run -d redis

指定容器名称

bash
docker run -d --name my-redis redis

其实,docker run = docker pull + docker start

但两者也有区别,对于docker stop之后的容器,其id及配置参数仍被保留,因此之后可以通过docker start重新启动已经停止的容器。

端口的绑定

通过上面的命令(docker run redis),尽管Redis在容器中运行,但从host无法访问Redis,原因在于只声明了Redis的运行端口,但该端口并未与host的端口绑定。如果要实现端口的绑定:

bash
docker run -p6379:6379 redis

需要注意,第一个是host端口,第二个是容器端口。

以交互式模式启动容器

bash
docker run -it ubuntu /bin/bash

docker rm

删除一个container

这种方式只能删除已经停止的容器

bash
docker rm CONTAINER_ID / CONTAINER_NAME

强制删除一个容器

这样即使容器正在运行,也会被删除

bash
docker rm -f CONTAINER_ID / CONTAINER_NAME

同时删除所有容器

bash
docker rm ${docker ps -a -q}

或者

bash
docker ps -a -q | xargs docker rm

docker start CONTAINER_ID

重新启动一个容器。

docker stop CONTAINER_ID

停止指定容器。

docker top

查看容器内的进程:

bash
docker top CONTAINER_ID

退出容器的交互模式

这里指的是以交互式方式进入容器内部(Shell)时如何退出。比如在运行如下命令之后:

bash
docker run -it redis

exit

通过这种方式会退出容器

Ctrl + p + q

退出交互模式,容器仍在运行

Docker network相关命令

查看Docker网络

bash
docker network ls

创建Docker网络

bash
docker network create NETWORK_NAME

其他类命令

显示Docker磁盘空间使用情况

bash
docker system df

其输出结果类似:

bash
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          3         2         945.6MB   116.8MB (12%)
Containers      2         0         55B       55B (100%)
Local Volumes   14        2         675.5MB   358.5MB (53%)
Build Cache     0         0         0B        0B

统计Docker容器资源使用

bash
docker stats

主机和容器互通

docker cp

docker cp命令可以将文件从host复制到容器中。

bash
docker cp file.txt container-name:/path/to/copy/file.txt

docker export导出容器

将整个容器导出到一个tar文件:

bash
docker export CONTAIN_ID > my_container.tar

导入到容器

bash
cat my_container.tar | docker import lcoding/redis:6.0

这时再查看docker镜像,就会看到新创建的lcoding/redis:6.0:

bash
docker images
docker run -it lcoding/redis:6.0 /bin/bash

文章作者: 逻思
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 逻思 !