Docker命令

镜像操作

  • Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像
  • 镜像仓库地址:https://hub.docker.com/

获取镜像

命令如下:

docker pull[选项][Docker Registry地址[:端口号]/仓库名[:标签]

具体的选项可以通过 docker pull --help 命令看到:

image-20210901130957159

Docker 镜像仓库地址:地址的格式一般是<域名/IP>[:端口号]

如下就是获取镜像示例:

docker pull ubuntu

image-20210901131316702

查看镜像

docker images

image-20210901131408131

docker image ls

image-20210901131501064

docker image ls 是列出已经下载下来的镜像, 列表包含了仓库名、标签、镜像ID、创建时间以及所占用的空间。

docker system df

image-20210901131734875

docker system df 查看镜像、容器、数据卷所占用的空间。

docker image ls -f dangling=true

image-20210901132143829

docker image ls -f dangling=true 查看虚悬镜像,仓库名、标签均为 <none> 的镜像称为 虚悬镜像(dangling image) 此命令为显示虚悬镜像(也就是说仓库名称和标签全部是为空的)

创建一个虚悬镜像

touch Dockerfile

image-20210901132501530

vim Dockerfile

编辑 Dockerfile 文件添加如下内容:

FROM ubuntu:latest
CMD echo "test"

添加完毕之后按 :wq 保存并退出即可。

docker build .

image-20210901132811825

然后虚悬镜像就已经创建好了,使用 docker image ls 查看一下镜像列表如下:

image-20210901132840688

紧接着在用如上介绍的 docker image ls -f dangling=true 进行查看虚悬镜像列表如下:

image-20210901132958890

删除所有的虚悬镜像

docker image prune

image-20210901133112812

运行镜像

有了镜像后,我们就能够以这个镜像为基础启动并运行一个容器。

启动里面的 bash 并且进行交互式操作:

docker run -it --rm ubuntu:latest bash

image-20210901140234574

  • -it:这是两个参数,一个是 -i 交互式操作,一个是 -t 终端
  • --rm:这个参数是说容器退出后随之将其删除
  • ubuntu:latest:这是指用 ubuntu:latest 镜像为基础来启动容器
  • bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash

可以通过 exit 退出容器:

image-20210901140625160

删除本地镜像

docker image rm[选项]<镜像1>[<镜像2>...]

示例如下:

docker image rm hello-world:latest

image-20210901142035388

docker image rmi -f hello-world:latest
  • rmi:代表删除本地镜像
  • -f:代表强制删除

image-20210901141348120

docker image rm $(docker image ls -q ubuntu)

如上命令的含义为删除所有仓库名为 ubuntu 的镜像,如果不跟名称,是删除所有镜像。

image-20210901142434952

docker image rm $(docker image ls -q -f before=ubuntu:latest)

如上命令的含义为删除指定版本之前的镜像。

image-20210901150312745

image-20210901150500737

image-20210901150613719

容器操作

  • 容器是独立运行的一个或—组应用,以及它们的运行态环境
  • 虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用

启动容器

启动容器有两种方式:

  • 基于镜像新建一个容器并启动
  • 一个是将在终止状态(stopped)的容器重新启动

因为 Docker 的容器是轻量级的,用户可以随时删除和新创建容器。示例如下:

docker run ubuntu /bin/echo 'hello world'

image-20210901162233374

启动一个 bash 终端,允许用户进行交互。命令如下:

docker run -t -i ubuntu /bin/bash

image-20210901162342399

  • -t:让 Docker 分配一个伪终端并绑定到容器的标准输入上
  • -i:则让容器的标准输入保持打开。当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括

docker run 说明:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 IP 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

image-20210901193732774

后台启动

很多时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现。例如 docker run hello-world 会把日志打印在控制台:

image-20210901194741998

docker run -d hello-world 只会打印 容器id。如下所示:

docker run -d hello-world

image-20210901192125141

如果需要查看一下启动信息可以使用 docker logs 容器ID 的方式进行查看如上图所示。

停止运行容器

终止一个运行中的容器

docker container stop 容器id

查看容器ID的方式,使用 docker ps 或者 docker ps -a 这两者的区别可以参考 docker ps和docker ps -a 运行一个容器的方式前面已经介绍过了我们利用 hello-world 这个镜像运行一个容器如下。

image-20210902084759023

运行了一个容器之后我们在开一个终端查看一下容器信息结果如下。

image-20210902084853636

容器ID如下:

image-20210902084918774

得到了该容器ID之后我们就可以来终止一个运行中的容器了如下:

docker container stop 79d6fd21f4d9

image-20210902085032233

如上我们终止了一个 ubuntu 的容器在第一个终端所展示的信息如下,执行了 exit 命令进行退出。

image-20210902085539014

查看终止状态下的容器

docker container ls -a

image-20210902085344620

重启终止状态下的容器

docker container start 容器id

image-20210902085657341

docker container start 79d6fd21f4d9

重启容器

docker container restart 容器ID
docker container restart 79d6fd21f4d9

image-20210902090300335

image-20210902090318021

进入到容器

在使用 -d 参数时,容器启动后会进入后台,某些时候需要进入容器进行操作,使用 docker exec 命令可以进入到运行中的容器当中。

docker exec -it 容器ID /bin/bash

想要进行如上操作的验证首先需要启动一个容器,如下,使用 docker ps -a 查看所有容器列表,启动一个容器ID如下。

image-20210902100027183

接下来我们就可以使用如下介绍的命令进入到该启动的容器当中了如下。

docker exec -it c6d4236b6911 /bin/bash

image-20210902100144625

导入导出容器

导出镜像

docker export 容器ID > it6666.zip
docker export 79d6fd21f4d9 > it6666.zip

image-20210902103552096

导入镜像

cat it6666.zip | docker import - it6666/ubuntu:1.0

image-20210902103658292

docker image ls

image-20210902103729493

运行导入的镜像,除了之前介绍的从镜像运行到容器通过镜像的名称去运行的,其实还可以通过镜像的ID去运行一个容器如下所示:

docker run -it 845c6a20ad11 /bin/bash

image-20210902103909120

删除容器

删除一个处于终止状态的容器

docker container rm [容器ID,容器名称]

image-20210902104445774

如果要删除一个运行中的容器,可以添加 -f 参数。

docker container rm -f c6d4236b6911

image-20210902104520607

清理所有处于终止状态的容器

  • docker container ls -a:命令可以查看所有已经创建的包括终止状态的容器
  • docker container prune:清理所有处于终止状态的容器

image-20210902104723968

从容器内拷贝文档到主机

就拿之前导入的 it6666/ubuntu 来进行测试,首先以 it6666/ubuntu 运行一个容器出来如下。

image-20210902105320780

进入到 cd /usr/local/ 创建一个 touch test.txt

image-20210902105700540

接下来就是开始我们的拷贝了拷贝方式如下。

docker cp 容器id:容器内文件路径 主机路径
docker cp b53506594fa5:/usr/local/test.txt /root

image-20210902110027791

查看一下主机 /root 目录下是否有该文件如下。

image-20210902110244881

容器生命周期

image-20210902115256903

  • create:创建容器,并没有启动
  • kill:发出的是 sigkill 的信号,是无条件终止的信号
  • stop:发出的是 sigterm 的信号,程序终结信号,可以在退出的时候,被阻塞,可以做一些清理工作
posted @ 2021-09-01 11:26  BNTang  阅读(80)  评论(0编辑  收藏  举报