当前位置:   article > 正文

docker的常用命令(持续更新中)_docker -h

docker -h

目录

前言

环境:centos7.9 docker version 20.10.14
本篇我们来介绍docker的常用命令。
docker镜像都是只读的。当容器启动后,一个新的可写的镜像被加载到镜像层的顶部,这一层通常被叫做容器层,容器层之下的都叫镜像层。

镜像仓库

我们平时执行命令 docker pull ubuntu:12.04 ,并没有严格区分镜像名和镜像仓库的意思;
安装好的docker后台守护进程之后,此时默认镜像仓库是Docker Hub 公共注册服务器中的仓库。
当使用docker的默认仓库时,docker pull ubuntu:12.04 这条命令实际上相当于 docker pull registry.hub.docker.com/ubuntu:12.04 命令,即从注册服务器 registry.hub.docker.com 中的 ubuntu 仓库来下载标记为 12.04 的镜像。
一般的,我们可能习惯了直接说拉取一个ubuntu 12.04的镜像,在不太严格的说法下,我们会认为ubuntu 是镜像的名字,严格得讲ubuntu 其实是镜像仓库名。
同理,docker pull nginx:1.18,nginx是镜像仓库名字,当然,再不严格区分的情况下,我们还是习惯叫做镜像名字。

启动docker

[root@docker ~]# systemctl start docker					#启动docker
[root@docker ~]# systemctl status docker				#查看docker状态
[root@docker ~]# systemctl restart docker				#重启docker状态
[root@docker ~]# systemctl stop docker					#停止docker状态
  • 1
  • 2
  • 3
  • 4

设置docker daemon运行远程客户端请求

Docker daemon运行在docker host上,负责创建、运行、监控容器,构建、存储镜像,默认情况下,docker daemon只响应来之本地host的客户端请求,如果要允许允许客户端请求,需要在配置文件中打开tcp监听,步骤如下:

1、编辑配置文件 
vim  /usr/lib/systemd/system/docker.service
#在下面这句后面加上 -H tcp://0.0.0.0 表示允许来自任意IP客户端链接
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0
2、重启Docker daemon
 systemctl daemon-reload

3、远程客户端连接docker daemon,使用-H参数
docker -H 192.168.118.128 info
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

docker的基本命令

[root@docker ~]# which docker							#这是docker的客户端命令行工具
/usr/bin/docker
[root@docker ~]# docker version							#查看docker的版,包含客户端版本和服务端版本
[root@docker ~]# docker -h								#查看docker帮助文档
[root@docker ~]# docker info							#显示docker系统的信息
  • 1
  • 2
  • 3
  • 4
  • 5

docker images 列出镜像

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]
常用参数:
--all :列出全部镜像,默认值
-q :列出镜像的id
[root@docker ~]# docker images							#列出本地的所有镜像
[root@docker ~]# docker images hello-world				#列出指定的镜像
[root@docker ~]# docker images -q hello-world 			#列出指定镜像的ID
[root@docker image]# docker images -aq					#列出全部镜像的ID

[root@docker ~]# docker images
REPOSITORY   TAG      IMAGE ID     CREATED      VIRTUAL SIZE
ubuntu       12.04    74fe38d11401 4 weeks ago   209.6 MB
nginx        1.24     54fe38d11201 3 weeks ago   149.6 MB

在列出信息中,可以看到几个字段信息
来自于哪个仓库,比如 ubuntu
镜像的标记,比如 12.04
镜像ID号(唯一)
创建时间
镜像大小
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

docker镜像实际存储位置

[root@docker ~]# docker info | grep 'Docker Root Dir'					#查看docker数据存储位置
 Docker Root Dir: /var/lib/docker
[root@docker ~]#
[root@docker ~]# ll  -th /var/lib/docker/image/overlay2/imagedb/content/sha256/		#查看镜像存放位置
total 8.0K
-rw------- 1 root root 7.5K Jul 23 18:55 605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85 	#这就是镜像的文件,但是这个文件只是一个JSON格式文件,作用是记录镜像和容器的配置关系
[root@docker ~]# docker images											#查看镜像id,这镜像id其实就是简写
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    605c77e624dd   6 months ago   141MB
[root@docker ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

docker search 搜索指定镜像

[root@docker ~]# docker search nginx					#从镜像仓库中搜索镜像
  • 1

docker pull 拉取镜像

docker [image] pull NAME[:TAG]
其中:NAME是镜像仓库名称,TAG是镜像的标签。
对于docker镜像来说,如果不显示指定 TAG,则默认会选择latest标签,这样会下载仓库中最新版本的镜像。
[root@docker ~]# docker pull hello-world:1.0.0		#从默认仓库拉取一个指定版本的镜像
[root@docker ~]# docker pull hello-world			#拉取一个指定版本的镜像,不加tag标签号默认pull最新的镜像
  • 1
  • 2
  • 3
  • 4
  • 5

docker ps 查看当前宿主机上容器列表

 docker ps [option]:查看当前宿主机上容器列表。默认只查看runing中的容器。
[option]主要有:
-a :相当于all,查看所有的容器列表。
-q :	只显示容器ID,如docker ps -aq   docker images -q
  • 1
  • 2
  • 3
  • 4

docker run 创建并启动容器

docker run是创建并启动容器,其是docker create 和docker start的结合,docker run的使用语法如下:

语法:docker run  [options] image [command] [arg...]
option说明:有些是单个-符号,有些是两个-符号
--name :为容器指定一个名字,如果不为容器指定名称,则docker自动分配一个名称
-d :后台运行容器,并返回容器ID,也即启动守护式容器
-i :以交互式运行容器,通常与-t同时使用
-t :为容器重新分配一个伪输入终端,通常与-i同时使用
-P :随机端口映射,系统随机分配一个空闲端口
-p :指定端口映射,如,-p 8089:80 其中前面8089是暴露在外部的端口,后面那个80是容器内部端口,我们知道docker是沙箱机制,想要外部程序能访问docker就必须暴露一个端口让外部访问;-p可以指定多个,支持的格式有ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort
--restart :重启策略,当容器退出时执行何种重启策略,Docker容器的重启策略如下:
			no,默认策略,在容器退出时不重启容器
			on-failure,在容器非正常退出时(退出状态非0),才会重启容器
			on-failure:3,在容器非正常退出时重启容器,最多重启3次
			always,在容器退出时总是重启容器
			unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
--rm : 当容器退出时自动删除容器
-v : 挂载宿主机目录到容器目录以实现容器数据持久化(目录或文件都可以)
演示范例:
[root@docker ~]# docker run -it -d -p 8089:8080 tomcat /bin/bash
[root@docker ~]# docker  run -d --name dev-nginx --restart=on-failure:3 nginx:latest 
#使用hostPort:containerPort格式将本地的5000端口映射到容器的5000端口,此时默认所有网卡IP地址都监听5000端口
[root@docker ~]# docker run -d -p 5000:5000 training/webapp python app.py
#使用ip:hostPort:containerPort 格式指定要绑定的IP地址+端口
docker run -d -p 192.168.158.130:5000:5000 training/webapp python app.py
#使用 ip::containerPort 绑定 localhost 的任意端口到容器的 5000 端口,本地主机会自动分配一个端口供外部访问容器
docker run -d -p 192.168.158.130::5000 training/webapp python app.py
#可以使用 udp 标记来指定 udp 端口
docker run -d -p 192.168.158.130:5000:5000/udp training/webapp python app.py
  • 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

docker run 背后原理

当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
检查本地是否存在指定的镜像,不存在就从公有仓库下载
利用镜像创建并启动一个容器
分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
从地址池配置一个 ip 地址给容器
执行用户指定的应用程序
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

docker port 查看容器端口映射

语法:
Usage:  docker port CONTAINER [PRIVATE_PORT[/PROTO]]
List port mappings or a specific mapping for the container

[root@docker ~]# docker run -d -p 8777:80 --name nginx nginx:1.17
a366d85fdf64
[root@docker ~]# docker port a366d85fdf64
80/tcp -> 0.0.0.0:8777
80/tcp -> :::8777
#其实这样也能看的出来映射的端口
root@ccw3 ~]# docker ps | grep a366d85fdf64
a366d85fdf64  nginx:1.17 "nginx -g 'daemon of…"  5 minutes ago Up 5 minutes 0.0.0.0:8777->80/tcp, :::8777->80/tcp nginx
[root@ccw3 ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

容器的7种状态

容器有一共有7种状态:cerated(已创建)、restarting(重启中)、running(运行中)、removing(迁移中)、paused(暂停)、exited(已停止)、dead(死亡)。

docker create 创建容器,容器处于Created状态

可以使用docker create 先创建容器,此时容器处于Created状态,处于created状态的容器可以使用docker start 启动容器,如下:

[root@docker ~]# docker create --name dev1-nginx  nginx:latest		#创建容器
44494bfa4e8ab0f4b906d7f437a9c21f0e309d6fc292aac4ce56905cac6e3160
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS        PORTS     NAMES
44494bfa4e8a   nginx:latest   "/docker-entrypoint.…"   5 seconds ago   Created                 dev1-nginx
[root@docker ~]# docker start 44494bfa4e8a							#启动容器
44494bfa4e8a
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS         PORTS     NAMES
44494bfa4e8a   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up 4 seconds   80/tcp    dev1-nginx
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

docker start 启动已经被停止的容器

当一个容器被停止之后(状态是exit),可使用docker start 命令重新启动容器,如下:

[root@docker ~]# docker start nginx		#重启启动被停止的容器,既可以使用name来指定容器,也可以使用容器id来指定容器
  • 1

docker restart 重启正在运行中的容器

[root@docker ~]# docker restart nginx		#重启容器,既可以使用name来指定容器,也可以使用容器id来指定容器
  • 1

docker stop 停止正在运行的容器

docker stop命令表示停止某个容器,容器被停止了并不是表示该容器就消失了(容器状态为Exited),停止容器只是表示该容器不再运行,可以使用docker start重新启动容器的。

[root@docker ~]# docker stop 65d86177eb63			#既可以使用容器nginx也可以使用容器id
  • 1

docker kill 发送信号给容器,默认是kill 信号

发送信号给容器,默认发送的是强制停止信号,当需要强制停止容器的时候,可以使用该命令替代docker stop命令,如下:

[root@docker ~]# docker kill b8eac755926d			#停止后的容器其实还在,只是状态变成Exited
  • 1

docker pause 暂停容器

可以通过 docker pause命令来暂停某个容器的运行,如下:

[root@docker ~]# docker pause 65d86177eb63
  • 1

docker unpause 恢复暂停的容器

处于暂停的容器不会占用CPU,可以通过docker unpause 命令恢复暂停的容器,如下:

[root@docker ~]# docker unpause 65d86177eb63
  • 1

docker rm 移除、删除容器

我们知道,当使用docker stop 命令或docker kill 命令停止容器后,容器的状态就会变成Exited退出状态,此时这些容器仍占用host上的资源,如果你想重启这些容器,可以通过docker start命令来重启它们,如果确定不在需要这些容器,那么可以使用docker rm命令删除容器,如下:

[root@docker ~]# docker rm 65d86177eb63		#删除一个已经停止的容器,如果容器正在运行,则报错
[root@docker ~]# docker rm -f dev-nginx		#-f表示强制删除,即使容器正在运行也要强制删除
[root@docker ~]# docker rm -v $(docker ps -aq -f status=exited)	#删除状态是exited的容器
  • 1
  • 2
  • 3

docker rmi 删除镜像

docker容器后台运行就必须有一个前台进程,容器的命令如果不是那些一直挂起的命令(如top,tail)就会自动闪退,因为他觉得没事做了就会自动自杀,这是docker的机制问题。

 [root@docker ~]# docker rmi `docker images -qa`						#删除全部的镜像,危险命令,慎用
 [root@docker ~]# docker rmi -f nginx:1.0.0								#强制删除nginx:1.0.0镜像
  • 1
  • 2

docker logs 查看指定容器的日志信息

docker logs [option] container_ID:查看指定容器的日志信息
option参数如下:
-n 行数: 查看日志末尾指定行数,不加n表示显示全部行(-n等价于下面的--tail参数)
--tail 行数 :查看日志末尾指定行数,不加n表示显示全部行
-t:显示时间戳
-f :持续追踪日志

[root@docker ~]# docker logs -f  2c627df4					#-f追踪日志		
[root@docker ~]# docker logs -n 22 -f  2c627df4				#-f追踪日志,-n指定输入日志行数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

docker exec 、docker attach 进入容器

进入容器有两种方法:
方式1:docker exec -it container_id /bin/bash
方式2:docker attach container_id
两种方式的区别:exec -it 表示在容器打开新的终端并开启新进程,这样即使exit也只是退出自己的终端。attach则是直接进入容器终端,不会启动新的进程。

语法:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

参数:
  -d, --detach               Detached mode: run command in the background
      --detach-keys string   Override the key sequence for detaching a container
  -e, --env list             Set environment variables
      --env-file list        Read in a file of environment variables
  -i, --interactive          Keep STDIN open even if not attached
      --privileged           Give extended privileges to the command
  -t, --tty                  Allocate a pseudo-TTY
  -u, --user string          Username or UID (format: <name|uid>[:<group|gid>])
  -w, --workdir string       Working directory inside the container
[root@docker ~]# 
[root@docker ~]#  docker exec -it 2c627df4531d bash				#进入到容器内,可以指定容器ID和容器名字
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

docker top container_ID:显示指定正在运行的容器进程信息

[root@docker ~]# docker top 4bfc8c2b9777
UID   PID    PPID   C  STIME   TTY   TIME      CMD
1000  34023  3969   0  07:28   ?     00:00:04   elasticsearch_exporter --es.uri=http://det-es-7-master:9200
[root@docker ~]#
  • 1
  • 2
  • 3
  • 4

docker inspect 查看容器、镜像详细信息

[root@docker ~]# docker inspect --help
Usage:  docker inspect [OPTIONS] NAME|ID [NAME|ID...]
Return low-level information on Docker objects
Options:
  -f, --format string   使用指定的Go 模板输出
  -s, --size            如果类型是容器则显示文件大小
      --type string     指定对象类型<按2次tab可以显示全部的对象类型>
Docker 的 inspect 命令有一个 format 参数,你可以通过该参数指定一个 Golang 模板来获得一个容器或者镜像中指定的部分信息,而不是全部的
信息的 JSON 输出。因为inspect命令可以查看多种类对象型的详细详细,所以使用--type参数指定对象类型。

docker inspect 命令用于查看docker对象信息,docker对象包括镜像、容器等,语法如下:
docker inspect  container_ID  				#查看容器信息,json格式显示(信息很全)
docker inspect image_ID 					#查看镜像信息,json格式显示(信息很全)
docker inspect -f '{{ .NetworkSettings.IPAddress }}' container_ID #过滤容器IP地址
docker inspect --format '{{ .State.Running }}' 2d788728824a		#查看容器运行状态
docker inspect nginx  --type container		#指定查看的对象类型是容器
docker inspect nginx  --type volume			#指定查看的对象类型是镜像
#当存在同名的对象时,又不指定对象类型,默认查看的对象类型是容器
#当不存在同名的对象时,可以不指定对象类型,docker自己判断
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

docker stats 显示容器的资源使用情况

使用docker stats 命令可以以流输出的形式显示一个容器的资源使用情况(比如内存、CPU 和网络)

[root@docker ~]#  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

[root@docker ~]# docker stats c04a67d9ecf212
CONTAINER ID   NAME                  CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O   PIDS
c04a67d9ecf2   vigorous_tereshkova   0.00%     3.523MiB / 3.817GiB   0.09%     1.18kB / 0B   12MB / 0B   2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

docker container 容器管理命令

docker container inspect 查看容器详细信息

docker container 命令用于管理容器,有很多子命令,其中 docker container inspect 命令也能用于查看容器详细信息,如下:

[root@docker ~]# docker container inspect nginx  		#查看nginx容器的详细信息
  • 1

docker container top查看容器运行的进程(该命令很有用)

#docker container top 命令用于查看容器运行的进程
#当容器里面没有ps -ef命令时,使用docker container top 命令可以方便的查看容器运行的进程

#语法,
[root@rancher _data]# docker container top --help
Usage:  docker container top CONTAINER [ps OPTIONS]

Display the running processes of a container

[root@rancher _data]# docker container top nginx1 		#可以接ps的参数,如docker container top nginx1 -ef
UID    PID     PPID    C     STIME   TTY   TIME        CMD
root   9513    9483    0     00:12   ?     00:00:00    nginx: master process nginx -g daemon off;
101    9580    9513    0     00:12   ?     00:00:00    nginx: worker process
101    9581    9513    0     00:12   ?     00:00:00    nginx: worker process
101    9582    9513    0     00:12   ?     00:00:00    nginx: worker process
101    9583    9513    0     00:12   ?     00:00:00    nginx: worker process

#容器里面没有ps命令
[root@rancher _data]# docker exec -it nginx1 bash
root@e88229ce4a8a:/# ps -ef
bash: ps: command not found
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

docker image 镜像管理命令

docker image命令帮助

[root@matser ~]# docker image --help
Usage:  docker image COMMAND
Manage images
Commands:
  build       从Dockerfile构建镜像
  history     显示会镜像的历史信息
  import      从tar包导入镜像
  inspect     显示一个或多个镜像的详细信息
  load        从tar包或标准输入中加载镜像
  ls          列出镜像
  prune       删除未使用的镜像
  pull        从镜像仓库拉取镜像
  push        推送镜像到镜像仓库
  rm          删除镜像
  save        保存镜像到tar包中
  tag         为镜像打tag

#这里讲下 build 和prune命令,别的命令都是和其他docker命令是相同的
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

docker image build构建镜像

docker image build命令用于构建镜像,完全等价于 docker build命令,我们更推荐使用docker build命令构建镜像。
#编写好Dockerfile文件之后就可以使用docker image build命令构建镜像了
#Dockerfile编写参考:https://blog.csdn.net/MssGuo/article/details/126001887
[root@docker dockerfile]# docker image build --help
Usage:  docker image build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile

Options:
  -f, --file string             Name of the Dockerfile (Default is 'PATH/Dockerfile')
      --force-rm                Always remove intermediate containers
      --network string          Set the networking mode for the RUN instructions during build (default "default")
      --no-cache                Do not use cache when building the image
  -q, --quiet                   Suppress the build output and print image ID on success
      --rm                      Remove intermediate containers after a successful build (default true)
  -t, --tag list                Name and optionally a tag in the 'name:tag' format
.........................

#基本的格式为 docker image build [选项] 路径 ,该命令将读取指定路径下(包括子目录)的 Dockerfile,并将
#该路径下所有内容发送给 Docker 服务端,由服务端来创建镜像。因此一般建议放置 Dockerfile 的目录为空
#目录。也可以通过 .dockerignore 文件(每一行添加一条匹配模式)来让 Docker 忽略路径下的目录和文件。

#构建镜像,--no-cache表示不缓存,镜像是分层的,如果已经构建过了则docker会使用缓存,这里使用--no-cache表示不使用缓存
# -t 指定镜像名称和版本,如果不指定-t ,则构建出来的镜像没有名称和版本号
# 最后一个点.表示当前目录,docker build指令会默认寻找当前目录下名叫Dockerfile的文件进行构建镜像
# -f指定Dockerfile文件,不指定时默认寻找当前目录下的名称叫做Dockerfile的文件
[root@docker dockerfile]# docker image build --no-cache  -t my_website:1.1.1 .
  • 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

docker image prune删除虚悬镜像,亦可以删除未使用的镜像

所谓虚悬(dangling)镜像,是指TAG为 <none> 的镜像,这种镜像一般是由于Dockerfile构建时产生的临时镜像,而docker又没有将其删除,
所以随着构建次数的增多,虚悬(dangling)镜像也会越来越多。
#语法
[root@matser ~]# docker image prune --help
Usage:  docker image prune [OPTIONS]
Remove unused images
Options:
  -a, --all             Remove all unused images, not just dangling ones
      --filter filter   Provide filter values (e.g. 'until=<timestamp>')
  -f, --force           Do not prompt for confirmation
[root@matser ~]#
#列出全部的镜像,默认会隐藏中间镜像,即虚悬(dangling)镜像没有列出来
docker image ls
#-a表示列出全部的镜像,含虚悬(dangling)镜像
docker image ls -a
#使用-f过滤列出虚悬(dangling)镜像
docker images -f dangling=true
docker image ls -f dangling=true
#删除虚悬(dangling)镜像
docker image prune
#删除虚悬镜像和所有未被容器使用的镜像
docker image prune -a
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

docker port 查看容器端口映射情况

语法:
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
[root@docker ~]# docker port nginx						#查看容器端口映射
80/tcp -> 0.0.0.0:8080
80/tcp -> :::8080
[root@docker ~]# docker port 2c627df4531d				#查看容器端口映射
80/tcp -> 0.0.0.0:8080
80/tcp -> :::8080
[root@docker ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

docker commit 从容器创建一个新的镜像

docker的commit操作:当镜像运行之后可以修改容器里面的内容,在提交成一个新的镜像。
语法:docker commit -m "新镜像描述信息" -a "作者" container_ID 新镜像名:[标签]
注意:要加双引号(这里称之为镜像名,严格意义上叫做仓库名,REPOSITORY就是仓库的意思)

Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

[root@docker ~]# docker commit 2c627df4531d nginx_install_vim:1.7		#从容器中创建一个新的镜像
sha256:adabed2f4b8eeb4e3c0ad5491053d888ac2075957a9ae9f02c9f32a6104947cc
[root@docker ~]# docker images
REPOSITORY          TAG       IMAGE ID       CREATED         SIZE
nginx_install_vim   1.7    	  adabed2f4b8e   5 seconds ago   141MB		#已经生成新的镜像了
nginx               latest    605c77e624dd   6 months ago    141MB
[root@docker ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

docker save 保存导出镜像

语法:docker save [OPTIONS] IMAGE [IMAGE...]		#可以同时指定多个镜像,表示多个镜像都报错导出到同一个文件
-o 参数指定输出到文件

[root@docker ~]# docker save -o centos.tar  centos:latest								#导出centos:latest为一个tar包
[root@docker ~]# docker save -o many-images.tar  centos:latest nginx:1.18 tmocat:7.7	#同时到处多个镜像为一个tar包
  • 1
  • 2
  • 3
  • 4
  • 5

docker image save 保存导出镜像

docker image save跟上面的docker save功能一模一样,docker image 命令是用于镜像管理的。

语法:docker image  save [OPTIONS] IMAGE [IMAGE...]
-o 参数指定输出到tar文件,文件也可以是tar.gz格式

[root@docker ~]# docker image  save -o centos.tar  centos:latest		#导出centos:latest为一个tar包
  • 1
  • 2
  • 3
  • 4

docker load 导入镜像

使用docker save命令导出镜像后可以使用docker load 导入镜像,如下:

语法:docker load [OPTIONS]
-i, --input string   Read from tar archive file, instead of STDIN	#-i指定tar文件
-q, --quiet          Suppress the load output						#-q表示静默方式

[root@docker ~]# docker load -i centos.tar							#导入镜像
  • 1
  • 2
  • 3
  • 4
  • 5

docker image load 导入镜像

docker image load 命令与 docker load 都是导入镜像,docker image load 命令是专门用于管理镜像的。

[root@docker ~]# docker image load -i  nginx.tar.gz					#docker image load导入镜像
  • 1

docker export 导出容器当前状态到tar文件

docker export [OPTIONS] CONTAINER
-o, --output string   Write to a file, instead of STDOUT
[root@docker ~]# docker export -o mysql5.7_test.tar mysql5.7		#将一个容器导出为一个tar文件
  • 1
  • 2
  • 3

docker import 导入docker export 导出的tar文件

Usage:  docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
Import the contents from a tarball to create a filesystem image
-c, --change list       Apply Dockerfile instruction to the created image
-m, --message string    Set commit message for imported image

[root@docker ~]# docker import mysql5.7_test.tar mysql5.7:v1		#导入镜像,指定镜像名称和版本号
[root@docker ~]# cat mysql5.7_test.tar | sudo docker import - mysql5.7:v1	#等价上面一条
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

docker save和docker export的区别

save与load是一对,export与import是一对,它们的区别:
1、docker sava 保存的是镜像(image),docker export 保存的是容器(container);
2、docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
3、docker load不能对载入的镜像重命名,而docker import可以为载入的镜像重命名。
• 注意: save导出的是镜像打包的tar文件,此类文件只能用load进行导入。
• import只能导入export生成的容器镜像tar文件或基于本地的镜像模板;import通常和cat命令搭配使用。

docker tag 用于给镜像打标签并生成一个新的镜像

镜像访问地址形式registry.devops.com/demo/hello:latest,若没有前面的url地址,则默认寻找docker hub中的镜像,如果没有tag,则默认使用latest作为标签,比如,docker pull nginx,会被解析成docker.io/library/nginx:latest。一般的,在企业中会使用私有镜像仓库,而仓库一般使用域名,这样整个镜像就会是这样:wuhukd.com/dev/nginx:1.0.0,其中wuhukd.com域名,dev是仓库名称,nginx:1.0.0是镜像。

Usage:  docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
[root@docker ~]# docker tag nginx:1.7.9 xiaoming.com/my_harbor/nginx:1.0.0
  • 1
  • 2

docker cp 从容器复制文件到宿主机、从宿主机复制文件到容器

docker cp 复制命令,从容器复制文件到物理主机或从主机复制文件到容器。

语法:
docker cp container_ID:file_path  host_filesystem_path
docker cp  host_filesystem_path container_ID:file_path

[root@docker ~]# docker cp 15d0def0fd10:/usr/local/tomcat/webapps/  /home/guo/Test	#从容器中复制文件到宿主机
[root@docker ~]# docker cp /home/guo/Test 31812cb98a0c:/usr/local/tomcat				#复制文件到容器中
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

docker volume 数据卷管理

[root@docker ~]#  docker volume --help
Usage:  docker volume COMMAND
Manage volumes
Commands:
  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

#列出全部的volume
docker volume ls
#查看指定名字的volume的详细信息
docker volume inspect a0dc63aae530f4070bb34e1c5331319c93a97f3727e6cf60415b7847010dcaf8
#移除全部未使用的本地volume
docker volume  prune
#删除指定的volume
docker volume  rm a0dc63aae530f4070bb34e1c5331319c93a97f3727e6cf60415b7847010dcaf8

示例:
#创建一个数据卷,名称叫做nginx
[root@docker ~]# docker volume create nginx
nginx
[root@docker ~]# docker volume ls | grep nginx
local     nginx
[root@docker ~]# docker volume inspect  nginx
[
    {
        "CreatedAt": "2023-08-27T14:40:43+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/nginx/_data",
        "Name": "nginx",
        "Options": {},
        "Scope": "local"
    }
]

#容器使用数据卷,-v参数时加上卷名即可
[root@docker ~]# docker run -d --name nginx -p 8081:80 -v nginx:/usr/share/nginx/html  nginx:latest
57022b423ec03bdb1a7a178544d422b262daa1b2861ba8a509a20962ed3051cf
[root@docker ~]# docker inspect nginx 
  "Mounts": [		#查看挂载信息
            {
                "Type": "volume",		#类型是数据卷
                "Name": "nginx",
                "Source": "/var/lib/docker/volumes/nginx/_data",
                "Destination": "/usr/share/nginx/html",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
#可以看到,nginx已经使用了nginx数据卷
#注意
#使用数据卷 bind mount ,-v参数,不会产生volume,如下:
docker run -d --name nginx -p 8081:80 -v /root/nginx/html:/usr/share/nginx/html  nginx:latest
docker inspect nginx
  "Mounts": [
            {
                "Type": "bind",		#可以看到类型是bind,所以没有产生volume
                "Source": "/root/nginx/html",
                "Destination": "/usr/share/nginx/html",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
  • 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
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68

docker build 构建镜像

#编写好Dockerfile文件之后就可以使用docker build命令构建镜像了
#Dockerfile编写参考:https://blog.csdn.net/MssGuo/article/details/126001887
[root@docker dockerfile]# docker build --help
Usage:  docker build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile

Options:
  -f, --file string             Name of the Dockerfile (Default is 'PATH/Dockerfile')
      --force-rm                Always remove intermediate containers
      --network string          Set the networking mode for the RUN instructions during build (default "default")
      --no-cache                Do not use cache when building the image
  -q, --quiet                   Suppress the build output and print image ID on success
      --rm                      Remove intermediate containers after a successful build (default true)
  -t, --tag list                Name and optionally a tag in the 'name:tag' format
.........................

#基本的格式为 docker build [选项] 路径 ,该命令将读取指定路径下(包括子目录)的 Dockerfile,并将
#该路径下所有内容发送给 Docker 服务端,由服务端来创建镜像。因此一般建议放置 Dockerfile 的目录为空
#目录。也可以通过 .dockerignore 文件(每一行添加一条匹配模式)来让 Docker 忽略路径下的目录和文件。

#构建镜像,--no-cache表示不缓存,镜像是分层的,如果已经构建过了则docker会使用缓存,这里使用--no-cache表示不使用缓存
# -t 指定镜像名称和版本,如果不指定-t ,则构建出来的镜像没有名称和版本号
# 最后一个点.表示当前目录,docker build指令会默认寻找当前目录下名叫Dockerfile的文件进行构建镜像
# -f指定Dockerfile文件,不指定时默认寻找当前目录下的名称叫做Dockerfile的文件
[root@docker dockerfile]# docker build --no-cache  -t my_website:1.1.1 .
  • 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

docker events 监控docker事件

docker events命令可以监控主机上的 Docker 事件,这些events时间可以包括取消镜像的标记、删除镜像以及容器的生命周期事
件(比如创建、销毁和终止)等。

[root@docker ~]# docker events --help
Usage:  docker events [OPTIONS]
Get real time events from the server

Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Format the output using the given Go template
      --since string    Show all events created since timestamp
      --until string    Stream events until this timestamp

#监控主机上的Docker事件,此时从另外一个窗口执行docker stop|start c04a67d9,就监控到以下Docker事件
[root@docker ~]# docker events		
2023-09-09T22:50:33.778129253+08:00 container kill c04a67d9ecf212e03db6c04e1a6eab380e21f09cf8ee6ee7083679b63a6c3e29 (image=nginx:1.7.9, name=vigorous_tereshkova, signal=15)
2023-09-09T22:50:33.978525228+08:00 container die c04a67d9ecf212e03db6c04e1a6eab380e21f09cf8ee6ee7083679b63a6c3e29 (exitCode=0, image=nginx:1.7.9, name=vigorous_tereshkova)
2023-09-09T22:50:34.237649991+08:00 network disconnect f0a0a9ffd0a4d3fa76ccbdd907f9e69cc3d8e51c990025a3923719fb44c0468e (container=c04a67d9ecf212e03db6c04e1a6eab380e21f09cf8ee6ee7083679b63a6c3e29, name=bridge, type=bridge)
2023-09-09T22:50:34.238659772+08:00 volume unmount 0387575470fafdad79986fa20994a6a7d94a2ed6f1f506f683874e1fc6386ce9 (container=c04a67d9ecf212e03db6c04e1a6eab380e21f09cf8ee6ee7083679b63a6c3e29, driver=local)
2023-09-09T22:50:34.248867626+08:00 container stop c04a67d9ecf212e03db6c04e1a6eab380e21f09cf8ee6ee7083679b63a6c3e29 (image=nginx:1.7.9, name=vigorous_tereshkova)
2023-09-09T22:50:40.058120024+08:00 network connect f0a0a9ffd0a4d3fa76ccbdd907f9e69cc3d8e51c990025a3923719fb44c0468e (container=c04a67d9ecf212e03db6c04e1a6eab380e21f09cf8ee6ee7083679b63a6c3e29, name=bridge, type=bridge)
2023-09-09T22:50:40.059023155+08:00 volume mount 0387575470fafdad79986fa20994a6a7d94a2ed6f1f506f683874e1fc6386ce9 (container=c04a67d9ecf212e03db6c04e1a6eab380e21f09cf8ee6ee7083679b63a6c3e29, destination=/var/cache/nginx, driver=local, propagation=, read/write=true)
2023-09-09T22:50:40.440177358+08:00 container start c04a67d9ecf212e03db6c04e1a6eab380e21f09cf8ee6ee7083679b63a6c3e29 (image=nginx:1.7.9, name=vigorous_tereshkova)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

查看Docker的磁盘使用情况(类似于Linux上的df命令)

docker system df
  • 1

清理磁盘(删除已停止的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像))

docker system prune
  • 1

清理得更加彻底,可以将没有容器使用Docker镜像都删掉(请慎重操作)

docker system prune -a
  • 1

列出所有虚悬(dangling)镜像,也就是 TAG 为 的

docker images -f dangling=true
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/74013?site
推荐阅读
相关标签
  

闽ICP备14008679号