【Docker】3. Docker基础命令

158 阅读5分钟

Docker命令格式

docker [options] command

Docker引擎操作命令

1. Docker详细信息

展示Docker版本,状态,运行的容器等信息。

docker info

从Docker返回信息的格式,我们可以发现,Docker遵循的也是CS架构,有Client端和Server端。

20210907112351.png

所以,我们使用Docker命令前,首先要安装Docker,再启动。然后我们在Docker Client端输入命令,Docker Server端才能接收我们的命令,处理并响应。

不仅如此,我们还可以使用IDEA当作Docker Client端与Docker Server端进行通信。

2. Docker版本信息

主要展示Docker版本号等信息。

docker version

客户端和服务端的版本号应该是严格一致的。

3. Docker帮助命令

docker --help

该命令展示了Docker中所有命令,命令分为两大类,一个是管理命令(Management Command),一个是操作命令(Command)。

Docker镜像操作命令

1. 查看所有镜像

查看本地仓库中所有镜像。

docker images

20210907151456.png

  • Repository:镜像名称。
  • Tag:镜像版本(latest表示最新版本)。
  • Image ID:镜像ID(每一个镜像唯一)。
  • Created:官方镜像的发布时间。
  • Size:镜像大小。

2. 查看指定镜像

查看本地仓库中指定镜像的不同版本。

docker images 镜像名

3. 拉取镜像

docker pull 镜像名称:镜像版本

镜像名称和镜像版本可以在Docker Hub上查找。

4. 搜索镜像

docker search 镜像名

20210907152946.png

  • Name:镜像名称。
  • Description:镜像描述。
  • Stars:收藏数。
  • Official:是否为官方镜像。
  • Automated:是否自动。

直接搜镜像名只能搜索出最新版本的同名镜像,只有在命令中携带版本号才能搜索出指定版本的镜像。

docker search 镜像名:镜像版本

search命令没有Docker Hub方便,建议使用Docker Hub去搜索镜像和版本。

5. 删除镜像

方式一:根据镜像名和版本号删除镜像

docker image rm 镜像名:镜像版本

方式二:根据镜像ID删除镜像

docker image rm 镜像ID

注意:如果要删除的镜像已经被运行成了一个或多个容器,那么该镜像使用此方法不能删除,只能强行删除。

简化写法:

docker rmi 镜像名:镜像版本 | 镜像ID

6. 强制删除镜像

该删除方法不仅删除镜像,还会删除通过该镜像运行的容器。

docker image rm -f 镜像名:镜像版本 | 镜像ID

简化写法:

docker rmi -f 镜像名:镜像版本 | 镜像ID

7. 清空本地仓库

等于将本地仓库中所有镜像,连带着运行镜像创建的容器一并强制删除。

docker rmi -f $(docker images -q)
  • $( ) 中的命令先执行,执行出来的结果给外层命令执行。

  • -q表示只显示镜像ID。

  • -a表示查询所有镜像(不写默认存在)。

上述命令实际上执行的是:

docker image rm -f $(docker image -aq)

Docker容器操作命令

1. docker run命令

docker run命令的执行流程:

20210906214703.png

2. 运行指定镜像

每使用如下命令就会单独创建一个新的容器。

docker run 镜像名:镜像版本 | 镜像ID

使用如上命令的方式运行镜像创建的容器外界是访问不到的,因为容器之间具有操作系统级别的隔离性,所以不能直接与外界进行交互(可以将若干个容器看成若干个虚拟机)。

例如:我使用如上命令运行Tomcat镜像创建了一个容器,该容器内的Tomcat服务监听的是容器内的8080端口,假设服务器的IP为:10.15.0.5,那么我们在浏览器上访问:http://10.15.0.5:8080 是访问不到Tomcat的,因为此时的8080是容器内的8080端口,并不是宿主机的8080端口。

所以我们需要在运行镜像时将容器内服务监听的端口与宿主机的端口进行映射(绑定),这时就需要携带一些参数了。

docker run -p 宿主机端口:容器内服务监听端口 镜像名:镜像版本 | 镜像ID

如果启动RabbitMQ需要映射两组端口,那么可以使用此规则映射多组端口:

docker run -p 宿主机端口:容器内服务监听端口 -p 宿主机端口:容器内服务监听端口 镜像名:镜像版本 | 镜像ID

注意:

  • 宿主机端口不能重复,但是容器内服务监听端口可以重复,因为每个容器都是独立的,端口互不影响。
  • 映射过的容器在执行ps命令查看时,Ports字段会显示:0.0.0.0:宿主机端口—>容器内服务监听端口/tcp,其中0.0.0.0表示任意机器可以访问。也就是说,Docker所启动的服务默认开启所有远程连接

设置了映射之后,这个命令还不完整。因为当我们使用shell执行如上命令,那么容器内服务将被启动,如果我们想启动其他服务,那么只有再打开一个shell执行命令,如果我们按Ctrl+C,该服务就结束了。

这时我们还想让服务不仅启动,而且后台运行,那么如下:

docker run -p 宿主机端口:容器内服务监听端口 -d 镜像名:镜像版本 | 镜像ID

如果该命令成功执行,那么会返回该服务的完整镜像ID。

如果我们还需要指定容器名称,不让Docker自动生成,那么可以:

docker run -p 宿主机端口:容器内服务监听端口 -d --name 容器名称 镜像名:镜像版本 | 镜像ID

注意:容器名称必须唯一(容器的唯一标识有两个,分别为ID和名称,因为ID每次还要使用ps查看ID及其不方便,所以一般使用容器名称来管理容器,因此建议手动设置好记的容器名称,便于日后管理)。

3. 装载镜像

在Docker本地仓库安装镜像有两种方法:

  1. 在Docker中直接使用docker pull命令下载到本地仓库。

  2. 通过将事先下载好的tar包上传到Linux中,再将tar包作为镜像装载进入Docker本地仓库中。

docker load -i 镜像文件名(tar包名)
  • -i表示载入的是一个镜像文件。

4. 查看当前运行的容器

docker ps
  • Container ID:容器ID。
  • Image:容器基于的镜像名称和版本。
  • Command:容器内部执行的命令。
  • Created:容器创建时间。
  • Status:容器当前状态(Up为启动,Exited为关闭)。
  • Ports:容器内当前服务监听的端口。
  • Names:容器名(如果运行镜像时未起名,则Docker会给容器起一个随机名)。

如果只要查询当前运行容器的ID,如下:

docker ps -q

5. 查看所有容器

docker ps -a

如果只要查询所有容器的ID,如下:

docker ps -aq

6. 启动指定容器

docker start 容器ID | 容器名称

7. 重启指定容器

docker restart 容器ID | 容器名称

8. 正常停止指定容器

docker stop 容器ID | 容器名称

9. 强制停止指定容器

docker kill 容器ID | 容器名称

注意:在stop某个容器后,还能通过start重启,但是kill后就不行了。

11. 删除容器

docker rm 容器ID | 容器名称

以上命令只能删除当前已经停止的容器,如果需要删除当前正在运行的容器,需要强制删除。

12. 强制删除容器

docker rm -f 容器ID | 容器名称

13. 删除所有容器

docker rm -f $(docker ps -aq)

14. 查看服务日志

上文说了,我们在运行镜像创建容器时,我们希望容器中的服务是在后台执行的,那么既然服务是在后台执行,那么我们就没有办法从shell中看到服务的日志。

docker logs 容器ID | 容器名称

如上命令展示的日志只是当前该服务产生的日志,并不会对该服务进行实时监听。如果想看到实时监听的日志,如下:

docker logs -f 容器ID | 容器名称

如果想要实时监听的日志中加入时间戳,如下

docker logs -tf 容器ID | 容器名称

15. 查看容器内进程

docker top 容器ID | 容器名称

16. 进入容器内部

上文说了,可以把每一个容器都看成一个虚拟机,那么我们正常在Shell上进行交互的实际上是宿主机操作系统,并没有接触到容器的内部。如果我们想进入容器的内部,对容器的内部进行操作,如下:

docker exec -it 容器ID | 容器名称 bash
  • -it指的是以交互方式进入容器。
  • bash指的是进入容器内的命令行终端。

容器可以看成一个虚拟机,该虚拟机安装了最精简的操作系统Alpine,拥有独立的IP,独立的一套端口,并且只装载了服务的最小依赖。所以在容器内连增强命令都不能使用,只能使用最基本的命令(例如:cd,pwd,ls等)。

17. 退出容器

exit

18. 查看容器详细信息

docker inspect 容器ID | 容器名称

19. 容器文件传输

容器的文件拷贝到宿主机中:

docker cp 容器ID | 容器名称:容器内源路径 宿主机目的路径

宿主机的文件拷贝到容器中:

docker cp 宿主机源路径 容器ID | 容器名称:容器内目的路径

注意:目的路径中可以给拷贝的文件/文件夹重新命名,也可以直接就写一个路径。

20. 容器打包成镜像

Docker的一个优势在于,可以将环境和应用打包在一起。

打完包后的镜像包含原来在容器中的服务,使用时直接运行镜像就行,无需再次部署服务。

docker commit -m "镜像描述信息" -a "镜像作者信息" 容器ID | 容器名称 镜像名称:镜像版本

注意:如果目标打包的容器正在运行,那么该正在运行的容器会出现短暂的暂停。

21. 镜像备份

将镜像打包成tar包导出。

docker save 镜像名:镜像版本 | 镜像ID -o 镜像文件名

注意:镜像文件名必须为:xxx.tar 。