侧边栏壁纸
  • 累计撰写 4 篇文章
  • 累计创建 5 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

Docker 常用命令

jerry
2022-09-15 / 0 评论 / 1 点赞 / 2,044 阅读 / 5,040 字

查看命令

查看 Docker 帮助

命令:dockerdocker --help

[jirenyoudeMacBook-Pro:~ jirry]$ docker --help

Usage:    docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default "/Users/jirry/.docker")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/Users/jirry/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/Users/jirry/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/Users/jirry/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Management Commands:
  builder     Manage builds
  config      Manage Docker configs
  container   Manage containers
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Run 'docker COMMAND --help' for more information on a command.

查看 Docker 版本

命令:docker --versiondocker version

[jirenyoudeMacBook-Pro:~ jirry]$ docker --version
Docker version 18.09.2, build 6247962
[jirenyoudeMacBook-Pro:~ jirry]$ docker version
Client: Docker Engine - Community
 Version:           18.09.2
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        6247962
 Built:             Sun Feb 10 04:12:39 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.2
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       6247962
  Built:            Sun Feb 10 04:13:06 2019
  OS/Arch:          linux/amd64
  Experimental:     false

查看 Docker 命令帮助

可以使用 docker [commond] --help 查看命令更多使用方法

命令:docker [COMMOND] --help

  • COMMOND:命令

如:查看 stats 命令详细使用(docker stats 命令用来显示容器使用的系统资源)

[jirenyoudeMacBook-Pro:~ jirry]$ docker stats --help
Usage:    docker stats [OPTIONS] [CONTAINER...]
Display a live stream of container(s) resource usage statistics
Options:
  -a, --all             Show all containers (default shows just running)
      --format string   Pretty-print images using a Go template
      --no-stream       Disable streaming stats and only pull the first result
      --no-trunc        Do not truncate output

查看容器底层信息

查看容器系统相关底层信息

命令:docker inspect [NAME|ID]

  • NAME:容器名称
  • ID:容器ID

查看 MyCentOS 容器底层系统信息

[jirenyoudeMacBook-Pro:local jirry]$ docker inspect MyCentOS
[
    {
        "Id": "e03121d8af5966a1918202ffdfa92d4e285d6ba76bed5a2e16f421493fe27919",
        "Created": "2019-12-29T13:40:17.5184458Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 3552,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2019-12-29T14:29:48.4907232Z",
            "FinishedAt": "2019-12-29T14:29:47.0012324Z"
        },
        "Image": "sha256:0f3e07c0138fbe05abcb7a9cc7d63d9bd4c980c3f61fea5efa32e7c4217ef4da",
        ...
    }
    ...
]

镜像命令

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载

查看镜像

使用 docker images 查看本地镜像列表

命令:docker images [OPTIONS]

  • OPTIONS:参数选项
[jirenyoudeMacBook-Pro:~ jirry]$ docker images -a
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
jirry/openresty                 1.13                24f48f1e3683        5 months ago        74.7MB

参数说明

参数 描述
-a, --all 查看所有镜像

输出内容

字段 描述
REPOSITORY 镜像仓库源
TAG 镜像标签版本
IMAGE ID 镜像ID
CREATED 创建时间
SIZE 镜像大小

同一仓库源可以有多个 TAG,代表这个仓库源的多个不同版本

搜索镜像

命令:docker search [NAME]

  • NAME:镜像名称

如:搜索 openresty 镜像

[jirenyoudeMacBook-Pro:~ jirry]$ docker search openresty
NAME                            DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
openresty/openresty             OpenResty Official Docker Images - a dynamic…   264                                     [OK]
ficusio/openresty               Minimalist OpenResty image                      23                                      [OK]
3scale/openresty                Latest Openresty with redis and some handy p…   16                                      [OK]
domecloud/openresty             OpenResty By DomeCloud - a dynamic web platf…   3                                       [OK]
oondeo/openresty                Ngnix + openresty + naxsi                       2                                       [OK]
pahud/openresty                 openresty with docker                           2                                       [OK]
quiq/openresty                  Enhanced openresty image with pre-installed …   1                                       
travix/openresty                Openresty-based sidecar to terminate ssl, au…   1                                       [OK]
flixtech/openresty-oidc-proxy   An openresty based OpenID Connect Single Sig…   1                                       [OK]
songshenzong/openresty          Docker Image packaging for OpenResty            1                                       [OK]
thesoul/openresty               OpenResty® is a full-fledged web platform.      1                                       
myobplatform/openresty-oidc     Openresty                                       1                                       [OK]
vikings/openresty               Openresty image base on centos 7                1                                       [OK]
saksmlz/openresty-docker        Tiny image with nginx and openresty based on…   1                                       [OK]
hasura/openresty                Openresty 1.9 debian image built nginx strea…   0                                       
estafette/openresty-sidecar                                                     0                                       
rmoriz/openresty_autossl        see https://github.com/rmoriz/docker_openres…   0                                       [OK]
qzkc/openresty_base                                                             0                                       
gotamedia/openresty-php         OpenResty and PHP-FPM with supervisord          0                                       
spaziodati/openresty            Openresty docker image                          0                                       [OK]
pcel/openresty                                                                  0                                       
swaglive/openresty              Openresty                                       0                                       [OK]
tansoft/openresty-php           php with openresty, yaf, swoole                 0                                       
selim13/openresty-prometheus    An extended OpenResty image with the Prometh…   0                                       [OK]
saagie/openresty-luarocks       OpenResty with some Lua modules installed       0                                       [OK]

输出内容

字段 描述
NAME 镜像仓库源的名称
DESCRIPTION 镜像描述
STARS 类似 Github 里面的 stars,表示点赞、喜欢的意思
OFFICIAL 是否 Docker 官方发布
AUTOMATED 是否自动构建

获取镜像

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

命令:docker pull [NAME:TAG]

  • NAME:镜像名称
  • TAG:镜像标签 (默认:lastest)
[jirenyoudeMacBook-Pro:~ jirry]$ docker pull centos
Using default tag: latest
latest: Pulling from library/centos
729ec3a6ada3: Pull complete 
Digest: sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
Status: Downloaded newer image for centos:latest

删除镜像

删除一个或多个镜像

命令:docker images rm [NAME|ID]docker rmi [NAME|ID]

  • NAME: 镜像名称
  • ID:镜像ID

容器命令

查看容器

使用 docker container psdocker ps 来查看正在运行或未运行的容器

命令:docker container ps [OPTIONS]docker ps [OPTIONS]

  • OPTIONS:参数选项
[jirenyoudeMacBook-Pro:~ jirry]$ docker container ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

参数说明

参数 描述
-a,--all 查看所有容器(包括:运行或停止的容器)

输出内容

字段 描述
CONTAINER ID 容器ID
IMAGE 容器运行镜像
COMMAND 容器运行命令
PORTS 容器端口监听及宿主机端口映射

创建并运行容器

命令:docker run [OPTIONS] [NAME:TAG] [CMD]

  • OPTIONS: 参数选项
  • NAME:TAG:镜像名称:镜像标签
  • CMD:运行命令

创建并运行 myCentOS 容器

docker run -it --name myCentOS centos /bin/bash

进入容器后;可以输入 exit 退出容器

参数说明

参数 描述
-i,--interactive 交互式操作
-t,--terminal 终端
-d,--daemon 后台运行模式
-p,--port 主机端口与容器端口映射
-P 使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口
--name 容器名称
-v,--volumes 主机目录挂载容器目录 (容器目录不可以为相对路径)
--rm 退出或停止容器,自动销毁容器

启动容器

启动一个已存在停止的容器

命令:docker start [NAME|ID]docker kill [NAME|ID]

  • NAME:容器名称
  • ID:容器ID
[jirenyoudeMacBook-Pro:~ jirry]$ docker start myCentOS
myCentOS

容器自启动

在运行容器时,指定 --restart参数自启动策略,Docker容器的重启策略是面向生产环境的一个启动策略,在开发过程中可以忽略该策略。

容器重启策略

  • no:默认策略,在容器退出时不重启容器
  • on-failure:在容器非正常退出时(退出状态非0),才会重启容器
  • on-failure:3:在容器非正常退出时重启容器,最多重启3次
  • always:在容器退出时总是重启容器
  • unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器unless
  • stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

容器退出状态码

  • 0:表示正常退出
  • 非0:表示异常退出(退出状态码采用chroot标准)
  • 125:Docker守护进程本身的错误
  • 126:容器启动后,要执行的默认命令无法调用
  • 127:容器启动后,要执行的默认命令不存在

运行并自启动 MyCentOS 容器,运行容器时增加 --restart=always

[jirenyoudeMacBook-Pro:~ jirry]$ docker run -itd --restart=always --name MyCentOS centos /bin/bash

如果在运行容器时,未指定重启策略,可以使用docker container update修改容器重启策略

命令:docker container update --restart=always [NAME|ID]

  • NAME:容器名称
  • ID:容器ID

停止容器

停止正在运行的容器,有两种方式停止容器

  1. 优雅停止容器docker stop等待容器结束任务后停止容器
  2. 强制停止容器docker kill直接退出杀掉容器进程,不等待容器结束任务

命令:docker stop [NAME|ID]

  • NAME:容器名称
  • ID:容器ID
[jirenyoudeMacBook-Pro:~ jirry]$ docker stop myCentOS
myCentOS

停止所有容器

停止所有容器docker没有提供直接的命令,需要查出所有容器ID,然后批量停止容器

命令:docker stop $(docker ps -a -q)

  • $(docker ps -a -q) :查出所有容器ID,-q:打印容器ID
[jirenyoudeMacBook-Pro:~ jirry]$ docker stop $(docker ps -a -q)

重启容器

命令:docker restart [NAME|ID]

  • NAME:容器名称
  • ID:容器ID
[jirenyoudeMacBook-Pro:~ jirry]$ docker restart MyCentOS
MyCentOS

删除容器

删除已创建的容器

命令:docker rm [OPTIONS] [NAME|ID]

  • OPTIONS:参数选项
  • NAME:容器名称
  • ID:容器ID
[jirenyoudeMacBook-Pro:~ jirry]$ docker rm -f myCentOS
myCentOS

参数说明

参数 描述
-f,--force 通过信号强制移除运行中的容器
-l,--link 移除容器之间的链接
-v,--volumes 删除与关联的挂载目录

清理已停止容器

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

命令:docker container prune

[jirenyoudeMacBook-Pro:~ jirry]$ docker container prune
# 警告!这将删除所有停止的容器。
WARNING! This will remove all stopped containers.
# 确定要继续吗?[是/否]
Are you sure you want to continue? [y/N] 

进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下两种命令进入一个正在运行的后台容器

[方式一]命令:docker attach [NAME|ID]

  • NAME:容器名称
  • ID:容器ID
[jirenyoudeMacBook-Pro:~ jirry]$ docker attach MyCentOS

注:这种方式进入容器,使用 exit退出后,容器运行状态也会随着停止,推荐使用第二种方式进入容器

[方式二]命令:docker exec [OPTIONS] [NAME|ID] [CMD]

  • OPTIONS:参数选项
  • NAME:容器名称
  • ID:容器ID
  • CMD:运行命令
[jirenyoudeMacBook-Pro:~ jirry]$ docker exec -it MyCentOS /bin/bash

这种方式进入容器,退出容器后,不会停止容器运行状态

参数说明

参数 说明
-i,—interactive 交互式操作
-t,--terminal 终端

退出容器

命令:exit

进入 MyCentOS 容器,退出容器

[jirenyoudeMacBook-Pro:~ jirry]$ docker exec -it MyCentOS /bin/bash
[root@e03121d8af59 /]# pwd
/
[root@e03121d8af59 /]# exit
exit

查看容器日志

查看容器内部标准输出

命令:docker logs [OPTIONS] [NAME|ID]

  • OPTIONS:参数选项
  • NAME:容器名称
  • ID:容器ID

查看 MyCentOS 容器日志

[jirenyoudeMacBook-Pro:~ jirry]$ docker logs -f MyCentOS

参数说明

参数 描述
-f tail -f 命令,实时监听日志

查看容器进程

可以使用 docker top 来查看容器内部运行的进程

命令:docker top [NAME|ID]

  • NAME:容器名称
  • ID:容器ID

查看 MyCentOS 容器进程

[jirenyoudeMacBook-Pro:~ jirry]$ docker top MyCentOS
PID                 USER                TIME                COMMAND
3552                root                0:00                /bin/bash

导出容器

命令:docker export [NAME|ID] > [PATH]

  • NAME:容器名称
  • ID:容器ID
  • PATH:导出容器快照文件

将 MyCentOS 容器导出快照到本地 /data/MyCentOS.tar.gz

[jirenyoudeMacBook-Pro:~ jirry]$ docker export MyCentOS > /data/MyCentOS.tar.gz

导入容器

命令:docker import [PATH] [NAME:TAG]

  • PATH:导入容器快照文件
  • NAME:镜像名
  • TAG:镜像标签

将本地容器快照 /data/MyCentOS.tar.gz 导入镜像名为 jirry/mycentos:v1.0

[jirenyoudeMacBook-Pro:~ jirry]$ docker import /data/MyCentOS.tar.gz jirry/mycentos:v1.0

注:镜像名必须全部小写

网络命令

通常网络一般用于容器之间通讯连接, Docker 提供了 5 种网络驱动模式,要构建具有安全的一致行为的 Web 应用程序,可以使用 Docker 网络特性。根据定义网络,为容器实现完全隔离。

所有 Docker 安装后都存在的 docker0 网络,除非使用 docker run --network= 选项另行指定,否则 Docker 守护进程默认情况下会将容器连接到 docker0 这个网络

默认网络

安装 Docker 时,默认会自动创建 3 个网络,分别为:bridge、host、none,可以通过命令docker network ls查看所有网络

运行一个容器时,可以使用 --network 参数指定在哪种网络模式下运行该容器

参考资料:Docker Network—Bridge 模式

[jirenyoudeMacBook-Pro:config jirry]$ docker network ls
NETWORK ID          NAME                          DRIVER              SCOPE
aa65a578400f        bridge                        bridge              local
32f4054e8429        host                          host                local
503c3adf1517        none                          null                local

网络模式

模式 描述
bridge 默认的网络驱动模式。如果不指定驱动程序,bridge 便会作为默认的网络驱动模式。当应用程序运行在需要通信的独立容器 (standalone containers) 中时,通常会选择 bridge 模式
host 移除容器和 Docker 宿主机之间的网络隔离,并直接使用主机的网络。host 模式仅适用于 Docker 17.06+
overlay overlay 网络将多个 Docker 守护进程连接在一起,并使集群服务能够相互通信。您还可以使用 overlay 网络来实现 swarm 集群和独立容器之间的通信,或者不同 Docker 守护进程上的两个独立容器之间的通信。该策略实现了在这些容器之间进行操作系统级别路由的需求
macvlan macvlan 网络允许为容器分配 MAC 地址,使其显示为网络上的物理设备。 Docker 守护进程通过其 MAC 地址将流量路由到容器。对于希望直连到物理网络的传统应用程序而言,使用 macvlan 模式一般是最佳选择,而不应该通过 Docker 宿主机的网络进行路由
none 对于此容器,禁用所有联网。通常与自定义网络驱动程序一起使用。none 模式不适用于集群服务

查看网络

命令:docker network ls

创建网络

命令:docker network create [OPTIONS] [MODEL] [NETWORK_NAME]

  • OPTIONS:参数选项
  • MODEL:网络模式
  • NETWORK_NAME:网络名称
[jirenyoudeMacBook-Pro:config jirry]$ docker network create -d bridge network-1
4d7cb1b46f2f94577dfa8529c36d680bc3ae3a38e19fd4c40a48da14a893302f

参数说明

参数 描述
-d 指定 Docker 网络模式,bridge、overlay 等

删除网络

命令:docker network rm [NETWORK_NAME]

  • NETWORK_NAME:网络名称

系统命令

查看容器资源

docker stats 命令用来显示容器使用的系统资源,默认情况下,stats 命令会每隔 1 秒钟刷新一次输出的内容直到你按下 ctrl + c。下面是输出的主要内容:

命令:docker stats [OPTIONS] [NAME|ID,...]

  • OPTIONS:参数选项
  • IMAGE:镜像名称
  • ID:镜像ID

命令参数

参数 作用 描述
--no-stream 返回当前容器状态 如果不想持续的监控容器使用资源的情况,可以通过 --no-stream 选项只输出当前的状态
[NAME] [ID] 输出指定的容器状态 name 容器名称 或 id 容器ID (注意:多个容器的名称或者是 ID 之间需要用空格进行分割)

输出内容

字段 描述
CONTAINER ID 容器的 ID (以短格式显示)
NAME 容器名称
CPU % CPU 的使用情况
MEM USAGE / LIMIT 当前使用的内存和最大可以使用的内存
MEM % 以百分比的形式显示内存使用情况
NET I/O 网络 I/O 数据
BLOCK I/O 磁盘 I/O 数据
PIDS PID 号

数据卷挂载

Docker Volume能让容器从宿主主机中读取文件或持久化数据到宿主主机内,让容器与容器产生的数据分离开来。你可以简单地把它理解为linux服务器上的挂载点。一个容器可以挂载多个不同的目录。Volume的生命周期是独立于容器的生命周期之外的,即使容器删除了,volume也会被保留下来,Docker也不会因为这个volume没有被容器使用而回收。在容器中,添加或修改这个文件夹里的文件也不会影响容器的联合文件系统。

背景

数据卷不使用分层文件系统,这对经常读取和写入的数据很有利。在开发过程中,你可以把代码目录挂载到容器中,这样,如果你更改代码,容器会实时地得到文件修改的反馈。容器中的挂载点必须是绝对路径,不支持相对路径。宿主机上的地址可以是一个绝对路径,也可以是一个数据卷名(如果数据卷不存在,docker会自动创建数据卷)。

注意:不要在Dockerfile中指定挂载一个host主机的目录。不够灵活,因为在别的主机上不一定有这样一个目录。

参考资料:Docker Volume入门用法详解

帮助命令:docker volume --help

命令 说明
create Create a volume
创建一个数据卷
inspect Display detailed information on one or more volumes
打印一个或多个数据卷的详细信息
ls List volumes
列出所有数据卷
prune Remove all unused local volumes
删除所有未使用的数据卷
rm Remove one or more volumes
删除一个或多个数据卷

查看所有数据卷

命令:docker volume ls

查看所有未使用的数据卷

命令:docker volume ls -f dangling=true

查看数据卷详细信息

命令:docker inspect [VOLUME_NAME]

  • VOLUME_NAME:数据卷名称

创建数据卷

命令:docker volume create [VOLUME_NAME]

  • VOLUME_NAME:数据卷名称

删除数据卷

命令:docker volume rm [VOLUME_NAME]

  • VOLUME_NAME:数据卷名称

删除所有未使用数据卷

命令:docker volume prune

文件拷贝

从容器里面拷文件或文件夹到宿主机,或者从宿主机拷贝文件或文件夹到容器中,在宿主机里面执行以下命令

从容器拷贝到宿主机

命令:docker cp [CONTAINER:/CONTAINER_PATH] HOST_PATH

  • CONTAINER:容器名称或ID

  • CONTAINER_PATH:容器文件或文件夹路径

  • HOST_PATH:宿主机文件或文件夹路径

    示例: 从容器 MyCentOS 中拷贝 /home/test.txt 到宿主机 /home/test.txt

docker cp MyCentOS:/home/test.txt /home/test.txt

从宿主机拷贝到容器

命令:docker cp HOST_PATH [CONTAINER:/CONTAINER_PATH]

  • CONTAINER:容器名称或ID
  • HOST_PATH:宿主机文件或文件夹路径
  • CONTAINER_PATH:容器文件或文件夹路径

示例: 从宿主机拷贝 /home/test.txt 到容器 MyCentOS 中

docker cp /home/test.txt MyCentOS:/home/test.txt
1

评论区