Docker 常用命令

一、与镜像相关的命令

(一)docker pull(下载镜像)

docker pull docker.io/library/nginx:latest

一个 Docker 镜像下载地址包含 4 部分内容:

拉取特定架构的镜像(xxx为架构名称)

docker pull --platform=xxx nginx

默认情况下,docker 会选择当前宿主机 CPU 架构的镜像,大部分情况下我们不需要关注这个参数。

Mac 目前的 M 系列 CPU 都是 arm 架构的,但在运行 AMD64 架构的容器时,会自动调用 QEMU 来模拟 x86_64 指令集,从而实现兼容 AMD64 的镜像,不过可能会存在一些兼容性问题 以及额外的性能开销。

从镜像仓库拉取镜像到本地 docker pull nginx 不写默认是 latest docker pull nginx:latest docker pull nginx:1.22 docker pull nginx:1.22.0-alpine 一般不建议使用 latest,因为最新的镜像是滚动更新的,过一段时间,可能跟你本地的不是同一个。使用 docker images 命令查看本地镜像

(二)docker search(搜索镜像),需要注意网络是否通畅

docker search nginx

(三)docker images(列出本地所有镜像)

docker images

使用此命令可以查看所有 Pull 到本地的镜像。

(四)docker rmi(删除镜像)

docker rmi 镜像id/镜像名

使用此命令可以删除 pull 到本地的镜像,镜像标识可以选择 镜像的 ID(image id)或者镜像的名称(repository)

二、与容器相关的命令

(一)docker ps(查看所有的容器)

docker ps

ps 是 Process Status (进程状态) 的缩写,也是 Linux 上的一个经典命令,用于查看进程的状态信息。这一命令也被继承到 Docker 里面了

这些列含义如下:

增加 -a 参数可以看到所有的容器,包括正在运行的和已经停止的。

(二)docker run(运行容器)

docker run [镜像标识]

使用 run 命令 可以通过 镜像创建一个容器,并启动它。镜像标识可以是镜像 ID 或者镜像名称。

例如:docker run nginx 就是创建一个 Nginx 容器。

docker pull 命令可以省略,直接使用 docker run 运行,如果 docker 发现本地没有这个镜像则会自动拉取。

分离模式

默认情况下 docker run 创建容器后会导致当前终端挂起,不能进行其他操作,可以增加 -d 参数 表示容器在后台运行,不阻塞当前窗口。

docker run -d nginx

自定义容器名称

docker run -d --name my_nginx nginx

容器的名称和 容器 ID 的效果是等价的,但是名字更方便记忆。

目录映射(绑定挂载)

与端口映射类似的就是目录映射,将容器外和容器内的目录进行绑定,容器内对文件的修改会影响宿主机的文件夹,宿主机的修改也会影响容器内文件夹。这种目录也被称为挂载卷,他的最大作用是数据的持久化。 当容器删除时,容器内的所有数据都会被删除,但通过挂载卷映射到宿主机的文件夹将得以保留。

docker run -d -p 8080:80 -v ./:/usr/share/nginx/html nginx

使用绑定挂载的时候,宿主机的文件会暂时覆盖掉容器内的目录。除了这种用法还有一种叫 Docker 卷,可以在容器之间共享和重用。

环境变量

可以在命令行通过 -e 参数传递环境变量到容器内部,例如创建一个数据库应用,需要在 创建容器时,就指定数据库的账户、密码等信息。

docker run -d -p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=tech \
-e MONGO_INITDB_ROOT_PASSWORD=dbkuaizi \
mongo

如果不知道容器的环境变量有哪些,可以在 Docker Hub 上搜索一下,或者去 Github 上看一下 readme 文档,都有详细的描述。

进入容器

docker run -it alpine

通过 -it 参数可以在创建一共容器时,同时进入容器内部的终端。

(三)docker create(创建容器)

docker create nginx

与 run 命令功能类似,区别在于只创建容器,不自动启动。

(四)docker start(启动容器)

每次使用 docker run 运行都会创建一个新的容器,如果我们需要对同一个容器进行持续的操作,可以通过容器的启停命令来控制。

docker start [容器标识]

使用 start 启停容器的时候,不需要再传递创建容器时的端口映射、挂载卷、环境变量等参数都不需要重新写了,docker 已经自动保存了,重新启动可以按照原因运行。

(五)docker stop(停止容器)

docker stop [容器标识]

(六)docker restart(重启容器)

容器重启策略

docker run -d --restart always nginx

--restart 参数用来表示 容器在停止时的重启策略,它有两个选项:

(七)docker stats(查看容器状态)

docker stats {容器标识}

(八)docker logs(查看容器日志)

docker logs {容器标识}

这个命令可以看容器的日志,加上 -f 命令,可以持续输出,滚动查看。

(九)docker exec(进入容器)

参见 docker run

(十)docker rm(删除容器)

docker rm 容器id

如果拟删除的容器正在运行,则需要先停止容器,再删除容器。

使用 rm 命令可以删除容器,如果要删除运行中的容器 需要加 -f 参数强制删除。

(十一)docker inspect(查看容器创建信息)

docker inspect {容器标识}

使用这个命令可以看到容器的所有信息,输出的是一个 JSON 格式。