Docker常用命令

帮助命令

docker version		# Docker版本
docker info			# Docker系统信息
docker 命令 --help	# 命令帮助

帮助文档:https://docs.docker.com/reference/

镜像和容器的区别

Docker的生命周期由三部分组成:image + container + repository,镜像 + 容器 + 仓库。

我们可以将Docker镜像看做一个轻量级的系统,不同于VMware中的镜像,Docker镜像内部是一个精简的操作系统(OS),同时还包含应用运行所必须的文件和依赖包。例如,我们下载一个在VMware中可以使用的CentOS镜像可能大小会超过2G,而在下载一个用于Docker的CentOS镜像可能只需要200M(甚至有部分Linux发行版镜像大小只有约100M)。

概括的说,Docker镜像是一个只读的Docker容器模板,含有启动Docker容器所需的文件系统结构及其内容。

而镜像和容器之间的关系可以比作类和实例之间的关系,镜像是一种构建时(build-time)结构,而容器是一种运行时(run-time)结构。

仓库则是存储镜像的地方,默认使用Docker Hub(官方仓库,此外也还有第三方仓库),我们通过仓库将所需镜像下载到本地。

镜像命令

  • docker images:查看本地Docker上的所有镜像

    [root@Tuzki01 ~]# docker images --help	# 查看该命令的帮助
    Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]
    List images
    Options:
      # 显示所有镜像(常用)
      -a, --all             Show all images (default hides intermediate images)
      # 显示镜像的签名信息
          --digests         Show digests
      # 过滤输出结果
      -f, --filter filter   Filter output based on conditions provided
      # 格式化字符串
          --format string   Pretty-print images using a Go template
      # 显示无删减的输出结果
          --no-trunc        Don't truncate output
      # 仅显示镜像ID(常用)
      -q, --quiet           Only show image IDs
      # 有Linux基础的人应该知道,命令选项是可以结合使用的,如docker images -aq就是常用的一个命令
    [root@Tuzki01 ~]# docker images	# 显示所有镜像,这里只有刚下载好的hello-world镜像
    REPOSITORY    TAG       IMAGE ID       CREATED      SIZE
    hello-world   latest    feb5d9fea6a5   6 days ago   13.3kB
    # REPOSITORY: 镜像的仓库源
    # TAG: 镜像的标签
    # IMAGE ID: 镜像ID
    # CREATED: 镜像创建时间
    # SIZE: 镜像大小
    
  • docker search:在仓库上搜索镜像,相当于在https://hub.docker.com/上面进行搜索

    [root@Tuzki01 ~]# docker search --help
    Usage:  docker search [OPTIONS] TERM
    Search the Docker Hub for images
    Options:
      # 过滤输出结果
      -f, --filter filter   Filter output based on conditions provided
      # 格式化字符串
          --format string   Pretty-print search using a Go template
      # 限制搜索结果个数
          --limit int       Max number of search results (default 25)
      # 显示无删减的输出结果
          --no-trunc        Don't truncate output
    # 这里以MySQL为例,输出STARS数高于1000的结果
    [root@Tuzki01 ~]# docker search -f stars=1000 mysql
    NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    mysql     MySQL is a widely used, open-source relation…   11490     [OK]       
    mariadb   MariaDB Server is a high performing open sou…   4357      [OK]   
    
  • docker pull:下载镜像,可指定tag版本(需要docker支持该版本的下载),默认下载最新版

    # docker pull 镜像名[:tag]
    [root@Tuzki01 ~]# docker pull mysql
    # 不加tag,默认下载最新版本
    Using default tag: latest
    latest: Pulling from library/mysql
    # 分层下载,docker image的核心,联合文件系统
    # 当mysql更新时,这些分层的镜像部分可以复用,无需全部重新下载,只需下载无法复用的镜像
    07aded7c29c6: Pull complete 
    f68b8cbd22de: Pull complete 
    30c1754a28c4: Pull complete 
    1b7cb4d6fe05: Pull complete 
    79a41dc56b9a: Pull complete 
    00a75e3842fb: Pull complete 
    b36a6919c217: Pull complete 
    635b0b84d686: Pull complete 
    6d24c7242d02: Pull complete 
    5be6c5edf16f: Pull complete 
    cb35eac1242c: Pull complete 
    a573d4e1c407: Pull complete 
    Digest: sha256:4fcf5df6c46c80db19675a5c067e737c1bc8b0e78e94e816a778ae2c6577213d
    Status: Downloaded newer image for mysql:latest
    docker.io/library/mysql:latest	# 真实下载地址(下载时拉取的是这里的资源)
    
  • docker rmi:删除镜像

    [root@Tuzki01 ~]# docker rmi --help
    # IMAGE可以使用镜像名[:tag](如mysql:5.7)删除,也可以通过ID删除,可以指定多个镜像
    Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]
    Remove one or more images
    Options:
      # 强制删除镜像
      -f, --force      Force removal of the image
      # 不删除
          --no-prune   Do not delete untagged parents
    # 删除所有镜像:docker rmi -f $(docker images -a)
    

容器命令

有镜像才能创建容器,这里使用centos镜像来进行学习:

docker pull centos
  • 新建容器并启动

    docker run [option] image
    # 常用参数
    --name="Name"	按照容器名启动
    -d				后台运行
    -it				以交互方式运行
    -p				指定日期端口
    	-p ip:主机端口:容器端口
    	-p 主机端口:容器端口(常用)
    	-p 容器端口
    	容器端口
    -P				随机端口
    
    # 测试
    docker run -it centos /bin/bash	# 使用centos下的bash命令模式进行交互
    exit			# 停止容器并退出
    ctrl + p + q	# 不停止容器退出
    
  • docker ps:查看所有正在运行容器

    -a:列出当前 + 历史运行的容器
    -n=x:列出最近x个运行的容器
    -q:仅显示容器ID
    
  • docker rm:删除容器

    -f:强制删除容器(可以删除正在运行的容器)
    
    删除所有容器命令:
    docker rm -f $(docker ps -a)
    docker ps -aq|xargs docker rm
    
  • 启动/停止容器:

    docker start 容器		# 启动容器
    docker restart 容器	# 重启容器
    docker stop 容器		# 停止容器
    docker kill 容器		# 强制停止容器
    

其他常用命令

  • 后台启动容器

    docker run -d centos
    # 可能遇到的一个坑:运行之后可能会发现centos停止了,这是因为Docker容器在运行时,必须有一个前台应用没有前台进程,否则Docker发现自己没有提供服务,将自动退出
    # 解决方案:
    1. docker run -td centos,-t选项将为容器重新分配一个伪输入终端
    2. docker run -it centos,之后ctrl + p + q退出容器
    
  • 查看指定容器的日志:docker logs 容器ID

    -t:带上时间戳
    -f:格式化显示
    --tail:指定显示条数
    
  • 查看容器中进程信息:docker top 容器ID

  • 查看镜像元数据:docker inspect 容器ID

  • 进入当前正在运行的容器

    # 开启一个指定容器的指定shell终端(常用)
    docker exec -it 容器ID /bin/bash
    # 进入指定容器正在执行的终端
    docker attach 容器ID
    
  • 从容器内拷贝文件到主机中

    docker cp 容器ID:容器内路径 当前主机路径
    
原文地址:https://www.cnblogs.com/tuzkizki/p/15378737.html