Docker 常用命令

Posted by Vito on May 23, 2022

帮助启动类命令

  • 启动docker: systemctl start docker
  • 停止docker: systemctl stop docker
  • 重启docker: systemctl restart docker
  • 查看docker状态: systemctl status docker
  • 开机启动: systemctl enable docker
  • 关闭开机启动: systemctl disable docker
  • 查看docker概要信息: docker info
  • 查看docker总体帮助文档: docker --help
  • 查看docker命令帮助文档: docker 具体命令 --help

镜像命令

  • 列出本地主机上的镜像: docker images [OPTIONS]
    • -a : 列出本地所有的镜像(含历史映像层)
    • -q : 只显示镜像ID
    • --digests : 显示摘要(sha256)

    REPOSITORY:表示镜像的仓库源
    TAG:镜像的标签版本号
    IMAGE ID:镜像ID
    CREATED:镜像创建时间
    SIZE:镜像大小

  • 搜索镜像: docker search [OPTIONS] 镜像名
    • --limit n : 只列出 n 个镜像,默认 25 个

    NAME: 镜像名称
    DESCRIPTION: 镜像说明
    STARS: 点赞数
    OFFICIAL: 是否是官方版
    AUTOMATED: 是否是自动构建的

  • 下载镜像: docker pull 镜像名[:TAG]

  • 查看镜像详细信息: docker image inspect 镜像名[:TAG]

  • 查看 latest 镜像的实际版本(不是对所有镜像都有效): docker image inspect 镜像名:latest | grep -i version
    • eg: docker image inspect redis:latest | grep -i version
  • 查看镜像/容器/数据卷所占的空间: docker system df

  • 删除镜像: docker rmi [OPTIONS] 镜像名[:TAG]docker rmi [OPTIONS] 镜像ID
    • 可一次删除多个,多个镜像标识之间用空格隔开
    • --no-prune 不移除该镜像的过程镜像(默认移除)
    • -f 强制删除
    • 删除全部镜像 docker rmi -f $(docker images -qa)
    • 删除所有未被使用的镜像 docker image prune -a -f
  • 提交容器副本使之成为一个新的镜像: docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
    • eg: docker commit -m=”add vim command” -a=”vito” f2929ada89e4 hczhch/ubuntu:1.3.0
  • 提交镜像到阿里云:
    • https://promotion.aliyun.com/ntms/act/kubernetes.html 登录后进入控制台
    • 访问 产品与服务 -> 容器服务 -> 容器镜像服务 -> 实例列表 , 选择个人实例(若没有就先创建个人实例)
    • 进入个人实例,创建命令空间(本次演示创建的命名空间为 hczhch)
    • 进入个人实例,创建镜像仓库(本次演示创建的仓库名为 ubuntu)
    • 进入刚才创建的仓库,按照“操作指南”操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 登录阿里云Docker Registry
[root@mydockerhost ~]# docker login --username=hcgyl registry.cn-guangzhou.aliyuncs.com
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

# 推送镜像到阿里云
[root@mydockerhost ~]# docker tag 2b29117f2c2b registry.cn-guangzhou.aliyuncs.com/hczhch/ubuntu:1.3.0
[root@mydockerhost ~]# docker push registry.cn-guangzhou.aliyuncs.com/hczhch/ubuntu:1.3.0
The push refers to repository [registry.cn-guangzhou.aliyuncs.com/hczhch/ubuntu]
9558fd789b41: Pushed 
9f54eef41275: Pushed 
1.3.0: digest: sha256:370f8bd690176036be16f4d4aa002725cea828ca94df39dd4fdb0e380a2cf911 size: 741

# 从阿里云拉取镜像
[root@mydockerhost ~]# docker pull registry.cn-guangzhou.aliyuncs.com/hczhch/ubuntu:1.3.0
1.3.0: Pulling from hczhch/ubuntu
7b1a6ab2e44d: Already exists 
1e27b8c32b7d: Already exists 
Digest: sha256:370f8bd690176036be16f4d4aa002725cea828ca94df39dd4fdb0e380a2cf911
Status: Downloaded newer image for registry.cn-guangzhou.aliyuncs.com/hczhch/ubuntu:1.3.0
registry.cn-guangzhou.aliyuncs.com/hczhch/ubuntu:1.3.0

[root@mydockerhost ~]# docker images
REPOSITORY                                        TAG       IMAGE ID       CREATED         SIZE
registry.cn-guangzhou.aliyuncs.com/hczhch/ubuntu   1.3.0     2b29117f2c2b   22 hours ago    180MB
ubuntu                                            latest    ba6acccedd29   7 months ago    72.8MB
[root@mydockerhost ~]# docker run -it 2b29117f2c2b /bin/bash
  • 虚悬镜像:仓库名、标签都是的镜像,俗称虚悬镜像 dangling image
    • 查询虚悬镜像: docker image ls -f dangling=true
    • 删除所有虚悬镜像: docker image prune

容器命令

  • 新建、启动容器: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    • --name=容器名 为容器指定一个名称;
    • -d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
    • -i:以交互模式运行容器,通常与 -t 同时使用;
    • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;也即启动交互式容器(前台有伪终端,等待交互);
    • -P: 随机端口映射,大写P
    • -p: 指定端口映射,小写p

    eg: docker run -it ubuntu /bin/bash

  • 列出当前所有正在运行的容器:docker ps [OPTIONS]
    • -a :列出当前所有正在运行的容器+历史上运行过的
    • -l :显示最近创建的一个容器。
    • -n:显示最近n个创建的容器。
    • -q :静默模式,只显示容器编号。
  • 退出交互式容器:
    • exit 退出,容器停止
    • ctrl+p+q 退出,容器不停止 (注意按键顺序)
  • 启动已停止运行的容器: docker start 容器ID或者容器名

  • 重启容器: docker restart 容器ID或者容器名

  • 停止容器: docker stop 容器ID或者容器名

  • 强制停止容器: docker kill 容器ID或容器名

  • 删除已停止的容器: docker rm 容器ID或容器名
    • -f 强制删除(即使容器还在运行)
    • 删除所有容器(慎用):
      • docker rm -f $(docker ps -a -q)
      • docker ps -a -q | xargs docker rm -f
        ps: rmi 是删除镜像; rm 是删除容器
  • 查看容器日志: docker logs 容器ID

  • 查看容器内运行的进程: docker top 容器ID

  • 查看容器内部细节: docker inspect 容器ID

  • 进入正在运行的容器并以命令行交互:
    • docker exec -it 容器ID /bin/bash
    • docker attach 容器ID
    • exec 是在容器中打开新的终端,并且可以启动新的进程用 exit 退出,不会导致容器的停止。
    • attach 直接进入容器启动命令的终端,不会启动新的进程用 exit 退出,会导致容器的停止。
    • 推荐大家使用 docker exec 命令,因为退出容器终端,不会导致容器的停止。
1
2
3
docker run -d redis:6.0.8
docker exec -it d3c3e157ec7a /bin/bash
redis-cli -p 6379
1
2
docker run -d redis:6.0.8
docker exec -it d3c3e157ec7a redis-cli
  • 从容器内拷贝文件到主机上: docker cp 容器ID:容器内路径 宿主机路径

  • 容器导入导出:

    • 容器导出为 tar 包: docker export 容器ID > 文件名.tar
    • tar 包导入为镜像: cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
    • 使用镜像创建容器: docker run 镜像用户/镜像名:镜像版本号 或者 docker run 镜像ID