docker常用命令列表

本文大部分内容来自Docker–从入门到实践

命令功能
docker images [-a]查看本地镜像
docker images -q只显示镜像的id信息
docker rmi [-f] <镜像>删除指定镜像
docker ps [-a]查看当前正在运行的容器,-a表示显示所有的容器
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]从 Docker 镜像仓库获取镜像
docker run <镜像>根据某个镜像创建容器,如果镜像不存在,就去远方拉取
docker run -d让容器在后台运行,其实就是一个进程
docker run --name NAME给容器指定一个名字
docker run -p [容器宿主机端口]:[容器端口]将容器的端口映射到宿主机的端口
docker exec -it <容器> [bash|/bin/bash|sh]进入到某个容器中,通过命令交互

镜像操作

获取镜像

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

具体的选项可以通过 docker pull --help 命令看到,这里我们说一下镜像名称的格式。

  • Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub。
  • 仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。
docker pull ubuntu:18.04
# 18.04: Pulling from library/ubuntu
# 23884877105a: Pull complete
# bc38caa0f5b9: Pull complete
# 2910811b6c42: Pull complete
# 36505266dcc6: Pull complete
# Digest: sha256:3235326357dfb65f1781dbc4df3b834546d8bf914e82cce58e6e6b676e23ce8f
# Status: Downloaded newer image for ubuntu:18.04
# docker.io/library/ubuntu:18.04

上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub 获取镜像。而镜像名称是 ubuntu:18.04,因此将会获取官方镜像 library/ubuntu 仓库中标签为 18.04 的镜像。

从下载过程中可以看到我们之前提及的分层存储的概念,镜像是由多层存储所构成。下载也是一层层的去下载,并非单一文件。下载过程中给出了每一层的 ID 的前 12 位。并且下载结束后,给出该镜像完整的 sha256 的摘要,以确保下载一致性。

列出镜像

要想列出已经下载下来的镜像,可以使用 docker image ls 命令。镜像 ID 则是镜像的唯一标识,一个镜像可以对应多个 标签

$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              18.04               c3c304cb4f22        4 weeks ago         64.2MB
gitlab/gitlab-ce    latest              6597e56a80f3        5 weeks ago         1.92GB
hello-world         latest              bf756fb1ae65        4 months ago        13.3kB

列出特定的某个镜像

# 仓库名列出镜像
$ docker image ls ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              18.04               f753707788c5        4 weeks ago         127 MB
ubuntu              latest              f753707788c5        4 weeks ago         127 MB
# 指定仓库名和标签
$ docker image ls ubuntu:18.04
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              18.04               f753707788c5        4 weeks ago         127 MB

指定过滤器显示镜像

# mongo:3.2 之后建立的镜像
$ docker image ls -f since=mongo:3.2
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              5f515359c7f8        5 days ago          183 MB
nginx               latest              05a60462f8ba        5 days ago          181 MB
# mongo:3.2 之前建立的镜像
$ docker image ls -f before=mongo:3.2
...
# 使用label过滤
$ docker image ls -f label=com.example.version=0.1
...

显示镜像摘要 DIGEST

$ docker image ls --digests
REPOSITORY          TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
ubuntu              18.04               sha256:3235326357dfb65f1781dbc4df3b834546d8bf914e82cce58e6e6b676e23ce8f   c3c304cb4f22        4 weeks ago         64.2MB
gitlab/gitlab-ce    latest              sha256:9be324293de2447c7b19146b58b01d2fae5b8539364bc4b4e0b3ffc45625006e   6597e56a80f3        5 weeks ago         1.92GB
hello-world         latest              sha256:8e3114318a995a1ee497790535e7b88365222a21771ae7e53687ad76563e8e76   bf756fb1ae65        4 months ago        13.3kB

显示镜像的ID

$ docker image ls -q
c3c304cb4f22
6597e56a80f3
bf756fb1ae65
# 删除所有仓库名为 redis 的镜像:
$ docker image rm $(docker image ls -q redis)
# 删除所有在 mongo:3.2 之前的镜像:
$ docker image rm $(docker image ls -q -f before=mongo:3.2)

自定义显示列表,这里用到了Go 的模板语法

$ docker image ls --format "{{.ID}}: {{.Repository}}"
5f515359c7f8: redis
05a60462f8ba: nginx
# 以表格等距显示,并且有标题行
$ docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID            REPOSITORY          TAG
5f515359c7f8        redis               latest
05a60462f8ba        nginx               latest
fe9198c04d62        mongo               3.2

删除本地镜像

docker image rm [选项] <镜像短 ID|镜像长 ID|镜像名|镜像摘要1> [<镜像2> ...]
Aliases:
  rm, rmi, remove

容器操作

新建并启动容器

下面的命令于ubuntu:18.04镜像新建一个容器并启动输出一个 “Hello World”,之后终止容器

docker run ubuntu:18.04 /bin/echo 'Hello world'
# Hello world

启动一个 bash 终端,允许用户进行交互

docker run -t -i ubuntu:18.04 /bin/bash
root@af8bae53bdd3:/#

-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,

-i 则让容器的标准输入保持打开。在交互模式下的操作,就跟使用一台虚拟机一样了。

当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

容器名字和映射端口

-p 参数用来指定容器和宿主机的映射端口,-name用来指定容器的名字。

docker run --name webserver -d -p 80:80 nginx

后台运行

通过添加 -d 参数来实现

$ docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
77b2dc01fe0f3f1265df143181e7b9af5e05279a884f4776ee75350ea9d8017a

启动已经终止的容器

docker <containerName|containerID> start

终止一个容器

docker <containerName|containerID> stop

终止状态的容器可以用 docker container ls -a 命令查看。

重启一个容器

docker <containerName|containerID> restart

进入容器

在使用 -d 参数时,容器启动后会进入后台。某些时候需要进入容器进行操作,就可以使用exec命令。

docker exec -it <containerName|containerID> /bin/bash

只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。

-i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。

$ docker exec -i 69d1 bash
ls
bin
boot
dev
...

$ docker exec -it 69d1 bash
root@69d137adef7a:/#

删除容器

可以使用 docker container rm 来删除一个处于终止状态的容器。例如

$ docker container rm  <containerName|containerID>
trusting_newton

如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器。

清理所有处于终止状态的容器

docker container ls -a 命令可以查看所有已经创建的包括终止状态的容器,如果数量太多要一个个删除可能会很麻烦,用下面的命令可以清理掉所有处于终止状态的容器。

$ docker container prune

容器的导入和导出

Docker之间导出/导入镜像

将文件拷贝到本机

docker container cp命令用于从正在运行的 Docker 容器里面,将文件拷贝到本机。下面是拷贝到当前目录的写法。

docker container cp [containID]:[/path/to/file] .

查看日志

docker container logs命令用来查看 docker 容器的输出,即容器里面 Shell 的标准输出。如果docker run命令运行容器的时候,没有使用-it参数,就要用这个命令查看输出。

docker container logs [containerID]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值