docker-常用命令

x33g5p2x  于2022-03-28 转载在 Docker  
字(7.8k)|赞(0)|评价(0)|浏览(286)

帮助命令

docker --version	# 显示 Docker 版本信息
docker version		# 显示 Docker 版本信息
docker info			# 显示 Docker 系统信息,包括镜像数量和容器数量
docker --help		# 帮助文档

一、镜像命令

1、拉取镜像

从镜像仓库中下载镜像到本地,一般是保存在/var/lib/docker目录(分层下载)

# 拉取最新版本的镜像
docker pull ubuntu

# 拉取指定版本镜像
docker pull ubuntu:14.04

2、查看本地镜像列表

同一个仓库源可以有多个 TAG,代表这个仓库源的不同版本,使用REPOSITORY:TAG 定义不同的镜像,默认使用 latest 镜像

# 语法:docker images [选项] [仓库[:标签]]

-a	# 列出本地所有镜像
-f	# 显示过滤的镜像
-q	# 只显示镜像id
--digests	# 显示镜像的摘要信息
--no-trunc	# 不截断输出(显示完整的镜像id)

# 列出本地主机上的镜像
[root@wzg ~]# docker images

# 显示所有镜像id(可实现镜像的批量操作)
[root@wzg ~]# docker images -aq
[root@wzg ~]# docker rmi $(docker images centos -aq)

# 显示ubuntu镜像的摘要信息
[root@wzg ~]# docker images ubuntu --digests 

# 显示ubuntu完整的镜像id
[root@wzg ~]# docker images ubuntu --no-trunc

# -f选项
# 通过dangling的布尔值列出无标签的镜像
[root@wzg ~]# docker images -f dangling=true

# -f before=(<镜像名>[:标签]|<镜像ID>|<镜像digest>)   过滤出指定镜像之前创建的
# -f since=(<镜像名>[:标签]|<镜像ID>|<镜像digest>)    过滤出指定镜像之后创建的

# 使用镜像名加标签标识
[root@wzg ~]# docker images -f before=centos:latest

# 使用镜像ID标识
[root@wzg ~]# docker images -f before=5d0da3dc9764

# 使用digest值标识(格式为:仓库名称@摘要)
[root@wzg ~]# docker images -f since=ubuntu@sha256:0f71fa8d4d2d4292c3c617fda2b36f6dabe5c8b6e34c3dc5b0d17d4e704bd39c

3、设置镜像标签

标签就是描述镜像的版本信息,可以使用docker tag为镜像添加标签,即为镜像命名。
镜像仓库可以有多个标签。一个镜像也可以有多个标签。
如果一个镜像有多个标签,只有当最后一个标签被删除时,才真正删除镜像。

# 语法:docker tag  源镜像[:标签]  目标镜像[:标签]
# 创建标签让目标镜像关联到源镜像

# 为由镜像ID标识的镜像加上标签
[root@wzg ~]# docker tag 5d0da3dc9764 centos:version1.0

# 为由仓库名称标识的镜像加上标签
[root@wzg ~]# docker tag centos centos:version2.0       

# 为由仓库名称和镜像ID组合标识的镜像加上标签
[root@wzg ~]# docker tag centos:latest centos:version3.0

# 指定一个注册服务器的主机名(可能包含端口)
[root@wzg ~]# docker tag 5d0da3dc9764 aliyun:5000/centos:version4.0
[root@wzg ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
aliyun:5000/centos   version4.0          5d0da3dc9764        6 months ago        231MB
centos               latest              5d0da3dc9764        6 months ago        231MB
centos               version1.0          5d0da3dc9764        6 months ago        231MB
centos               version2.0          5d0da3dc9764        6 months ago        231MB
centos               version3.0          5d0da3dc9764        6 months ago        231MB

4、查看镜像详细信息

docker inspect 命令查看Docker对象(镜像、容器、任务)的详细信息。默认以JSON数组格式输出结果。

# 语法:docker inspect [选项] 名称|ID 

-f (--format)	# 指定特定内容输出
-s    			# 容器类型显示全部文件大小
--type		    # 返回json格式信息

# 查看centos/httpd镜像详细信息
[root@wzg ~]# docker inspect centos/httpd 

# 获取镜像的体系结构
[root@wzg ~]# docker inspect --format='{{.Architecture}}' centos/httpd
amd64

# 获取镜像的根文件系统信息
[root@wzg ~]# docker inspect --format='{{.RootFS}}' centos/httpd
{layers [sha256:071d8bd765171080d01682844524be57ac9883e53079b6ac66707e192ea25956 sha256:d15c61d3ecdaa582e75e2966792238c0325578ec9e0d2a1ed3183995345323d6 sha256:7c937d8a9f4f7a9761c292a6c7bcff1cc10384985282fa4fa5a04bfdb155bc90 sha256:920640105caf8a18f7db0df2638b863cbc73c2e0668d0559c5f9c93c474e8879] }

# 用JSON格式获取镜像的根文件系统信息
[root@wzg ~]# docker inspect --format='{{json .RootFS}}' centos/httpd
{"Type":"layers","Layers":["sha256:071d8bd765171080d01682844524be57ac9883e53079b6ac66707e192ea25956","sha256:d15c61d3ecdaa582e75e2966792238c0325578ec9e0d2a1ed3183995345323d6","sha256:7c937d8a9f4f7a9761c292a6c7bcff1cc10384985282fa4fa5a04bfdb155bc90","sha256:920640105caf8a18f7db0df2638b863cbc73c2e0668d0559c5f9c93c474e8879"]}

5、查看镜像的构建历史

查看镜像的构建历史,即 DockerFile的执行过程,每一层镜像都相当于一个子镜像。

# 语法:docker history [选项] 镜像名

[root@wzg ~]# docker history ubuntu:16.04
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
b6f507652425        6 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           6 months ago        /bin/sh -c mkdir -p /run/systemd && echo 'do…   7B                  
<missing>           6 months ago        /bin/sh -c rm -rf /var/lib/apt/lists/*          0B                  
<missing>           6 months ago        /bin/sh -c set -xe   && echo '#!/bin/sh' > /…   745B                
<missing>           6 months ago        /bin/sh -c #(nop) ADD file:11b425d4c08e81a3e…   135MB               

# <missing>行表明相应的层在其他系统上构建,并且已经不可用了,可以忽略这些层。
# CREATED BY 表示每一层的构建操作命令

# 显示完整的操作命令
[root@wzg ~]# docker history ubuntu:16.04 --no-trunc

6、查找镜像

docker search 命令搜索docker hub仓库中的镜像

# 语法:docker search 镜像

# 可选项
--filter=stars=50		# 列出收藏数不小于指定值的镜像

[root@wzg ~]# docker search mysql

7、删除本地镜像

可以使用镜像的ID、标签、镜像摘要标识符来指定删除本地镜像。
如果一个镜像有多个标签,则当最后一个标签被删除时,镜像才真正删除。

# 语法:docker rmi [选项] 镜像名 
# 语法:docker image rm [选项] 镜像名 

# 选项:
-f    		# 强制删除
--no-prune  # 不删除没有标签的父镜像

# 删除单个
docker rmi 镜像ID
docker rmi 镜像名:tag
docker rmi 镜像摘要

# 删除全部
docker rmi -f $(docker images -qa)

# 镜像摘要标识,先删了摘要再删了镜像
[root@wzg ~]# docker images --digests
REPOSITORY           TAG          DIGEST               IMAGE ID           CREATED           SIZE
centos/httpd         latest       sha256:26c667……369   2cc07fbb5000       3 years ago       258MB
[root@wzg ~]# docker image rm centos/httpd@sha256:26c6674463ff3b8529874b17f8bb55d21a0dcf86e025eafb3c9eeee15ee4f369
Untagged: centos/httpd@sha256:26c6674463ff3b8529874b17f8bb55d21a0dcf86e025eafb3c9eeee15ee4f369
[root@wzg ~]# docker images --digests -a
REPOSITORY           TAG           DIGEST         IMAGE ID           CREATED             SIZE
centos/httpd         latest        <none>         2cc07fbb5000       3 years ago         258MB
[root@wzg ~]# docker rmi centos/httpd:latest
……

二、容器命令

1、ps显示容器列表

# 语法:docker ps [OPTIONS]

	# 不带选项列出正在运行的容器
-a	# 列出所有的容器
-q	# 只显示容器编号
-s	# 显示容器所用的空间
-l	# 显示最近创建的容器
-n=?	# 显示最近n个创建的容器
--no-trunc	# 显示完整id信息
-f		# 过滤容器,可以通过id,name,status
# docker ps -af id= [name=] [status=]
# docker pause $(docker ps -af status=running -q)

2、run创建并启动容器

使用 docker run 创建一个新的容器并启动,docker在后台运行的操作如下:
1.检查本地是否存在指定的镜像,如没有就从仓库自动下载
2.基于镜像创建容器并启动
3.为容器分配文件系统,并在镜像层顶部增加一个可读写的容器层
4.从主机配置的网桥接口将一个虚拟接口桥接到容器
5.从网桥的地址池给容器分配一个IP地址
6.运行用户指定的应用程序
7.根据设置决定是否终止容器运行

# 语法
docker run [OPTIONS选项] IMAGE镜像 [COMMAND命令] [ARG参数...]

-d	# 后台运行容器,并返回容器ID。(不加-d,退出容器将自动终止容器)
-i	# 容器的标准输入保持打开,以交互模式运行容器
-t	# 为容器重新分配一个伪输入终端
-p	# 设置端口映射,格式:'主机端口:容器端口'
--rm	# 容器退出时自动删除
--name	# 为容器指定名称
-v		# 将主机本地的目录和容器目录绑定,实现数据的持久化,将数据存储在本地文件系统中
--restart	#设置重启策略,如设置always,表示容器即使异常退出也会自动重启
--dns		#指定容器使用的dns服务器(默认是和主机的dns设置一致)

# 启动容器执行命令后自动终止容器
docker run ubuntu:16.04 /bin/echo '这是一个自动终止的容器'

# 启动容器执行命令后退出自动删除
docker run --rm ubuntu:16.04  /bin/echo '这是一个自动删除的容器'

# 用交互模式启动容器,在容器内执行/bin/bash命令
docker run -ti ubuntu:16.04 /bin/bash	#只要退出容器,容器就自动终止

# 启动容器并让其以守护进程的形式在后台运行
docker run -d ubuntu:16.04		#容器立即退出,bash没有连接到终端且无法运行
docker run -td ubuntu:16.04 /bin/bash

# 指定端口和名称
docker run -p 80:80 --name test ubuntu:16.04

3、退出容器

Ctrl+D	# 容器停止退出
exit	# 容器停止退出
ctrl+P+Q	# 容器不停止退出

4、rm删除容器

# 删除容器
docker rm CONTAINER容器…		# 删除指定容器(-f强制删除运行中的容器)
docker rm -f $(docker ps -aq)	# 删除所有容器

# 删除所有未运行的容器(created和exited状态)
docker container prune

5、inspect查看详情(元数据)

# inspect命令查看容器详细信息
# 语法:docker container inspect [OPTIONS选项] CONTAINER容器
-s				# 显示所有文件大小
-f (--format)	#筛选输出内容

# 获取容器的名称
docker container inspect -f='{{.Name}}'

# 通过JSON格式的State子节获取容器的状态元数据
docker container inspect --format='{{.State}}' CONTAINER容器
docker container inspect --format='{{json .State}}' CONTAINER容器

# 多层次筛选信息
docker container inspect --format='{{.NetworkSettings.Networks.bridge.Gateway}}'

6、attach进入容器

实质是将 Docker 主机本地的标准输入、标准输出和错误流连接到了一个正在运行的容器上。

# 语法:docker attach [OPTIONS选项] CONTAINER容器

--detach-keys string 	# 覆盖分离容器的键顺序
--no-stdin  			# 不连接标准输入(问题:ctrl+C依然将容器停掉?)                              
--sig-proxy         # 将所有接收的信号代理给进程(=false,表示不将信息代理给进程,ctrl+C退出但不停止容器)

# 示例:连接到一个运行中的容器并从中退出
[root@wzg ~]# docker run -d --name topdemo ubuntu /usr/bin/top -b
[root@wzg ~]# docker attach topdemo
[root@wzg ~]# docker attach --sig-proxy=false topdemo

7、exec进入容器

docker exec [OPTIONS选项] CONTAINER容器 COMMAND命令 [ARG参数...]

  -d, --detach           	# 后台运行(分离模式)
      --detach-keys string  # 覆盖分离容器的键顺序
  -e, --env list            # 设置环境变量
  -i, --interactive         # 保持标准输入开启
      --privileged          # 给予扩展权限
  -t, --tty                	# 分配一个伪输入终端
  -u, --user string        	# 用户名或ID
  -w, --workdir string      # 容器内工作目录

# 案例:进入容器,交互执行命令
[root@wzg ~]# docker exec -ti topdemo /bin/bash

# 案例:不进入容器执行命令
[root@wzg ~]# docker exec -i topdemo echo '11111'
11111

# 区别
# exec	是在容器中打开新的终端,并且可以启动新的进程
# attach 直接进入容器启动命令的终端,不会启动新的进程

8、其他命令

# 创建容器
docker create [OPTIONS选项] IMAGE镜像 [COMMAND命令] [ARG参数...]

# 其他命令
docker start CONTAINER容器…		# 启动容器
docker restart CONTAINER容器…		# 重启容器
docker stop CONTAINER容器…		# 停止容器
docker kill CONTAINER容器…		# 强制停止容器
docker pause CONTAINER容器…		# 挂起容器(暂停容器中所有的进程)
docker unpause CONTAINER容器…		# 恢复容器中被暂停的所有进程
docker rename CONTAINER容器 NEW_NAME	# 重命名容器
docker top CONTAINER容器…			# 查看容器中运行的进程信息(UID是用户ID,PID是进程ID,PPID是父进程ID)
docker logs CONTAINER容器…		# 查看容器的输出信息
	# -t 显示时间戳
	# -f 打印最新的日志
	# --tail number 显示多少条
docker cp 容器id:容器内路径 目的主机路径		#从容器内拷贝文件到主机上

# 全部容器命令
Usage:  docker container COMMAND
  attach        # 连接正在运行的容器
  commit        # 从当前容器创建新镜像
  cp         	# 在容器和文件系统间复制文件和目录
  create     	# 创建新容器
  diff          # 检查容器创建以来文件系统上文件或目录的更改
  exec          # 从正在运行的容器中执行命令
  export        # 将容器文件系统导出为归档文件
  inspect      	# 显示容器详细信息
  kill         	# 杀死一个正在运行的容器(强关)
  logs         	# 获取容器的日志信息
  ls            # 输出容器列表(docker ps)
  pause        	# 暂停一个或多个容器的所有进程
  port      	# 列出容器的端口映射或特定的映射
  prune        	# 删除所有停止的容器
  rename      	# 对容器改名
  restart       # 重启容器
  rm           	# 删除容器
  run          	# 创建新容器并执行命令
  start      	# 启动容器
  stats        	# 显示容器资源使用统计信息
  stop       	# 停止容器
  top         	# 显示容器正在运行的进程
  unpause     	# 恢复容器中被暂停的所有进程
  update 	# 更新容器配置
  wait          # 阻塞容器运行,直到容器停止运行,输出退出码

相关文章