Docker命令
镜像操作
- Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像
- 镜像仓库地址:https://hub.docker.com/
获取镜像
命令如下:
docker pull[选项][Docker Registry地址[:端口号]/仓库名[:标签]
具体的选项可以通过 docker pull --help
命令看到:
Docker 镜像仓库地址:地址的格式一般是<域名/IP>[:端口号]
如下就是获取镜像示例:
docker pull ubuntu
查看镜像
docker images
docker image ls
docker image ls
是列出已经下载下来的镜像, 列表包含了仓库名、标签、镜像ID、创建时间以及所占用的空间。
docker system df
docker system df
查看镜像、容器、数据卷所占用的空间。
docker image ls -f dangling=true
docker image ls -f dangling=true
查看虚悬镜像,仓库名、标签均为 <none>
的镜像称为 虚悬镜像(dangling image)
此命令为显示虚悬镜像(也就是说仓库名称和标签全部是为空的)
创建一个虚悬镜像
touch Dockerfile
vim Dockerfile
编辑 Dockerfile 文件添加如下内容:
FROM ubuntu:latest
CMD echo "test"
添加完毕之后按 :wq
保存并退出即可。
docker build .
然后虚悬镜像就已经创建好了,使用 docker image ls 查看一下镜像列表如下:
紧接着在用如上介绍的 docker image ls -f dangling=true
进行查看虚悬镜像列表如下:
删除所有的虚悬镜像
docker image prune
运行镜像
有了镜像后,我们就能够以这个镜像为基础启动并运行一个容器。
启动里面的 bash
并且进行交互式操作:
docker run -it --rm ubuntu:latest bash
-it
:这是两个参数,一个是-i
交互式操作,一个是-t
终端--rm
:这个参数是说容器退出后随之将其删除ubuntu:latest
:这是指用ubuntu:latest
镜像为基础来启动容器bash
:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash
可以通过 exit
退出容器:
删除本地镜像
docker image rm[选项]<镜像1>[<镜像2>...]
示例如下:
docker image rm hello-world:latest
docker image rmi -f hello-world:latest
- rmi:代表删除本地镜像
- -f:代表强制删除
docker image rm $(docker image ls -q ubuntu)
如上命令的含义为删除所有仓库名为 ubuntu
的镜像,如果不跟名称,是删除所有镜像。
docker image rm $(docker image ls -q -f before=ubuntu:latest)
如上命令的含义为删除指定版本之前的镜像。
容器操作
- 容器是独立运行的一个或—组应用,以及它们的运行态环境
- 虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用
启动容器
启动容器有两种方式:
- 基于镜像新建一个容器并启动
- 一个是将在终止状态(stopped)的容器重新启动
因为 Docker 的容器是轻量级的,用户可以随时删除和新创建容器。示例如下:
docker run ubuntu /bin/echo 'hello world'
启动一个 bash
终端,允许用户进行交互。命令如下:
docker run -t -i ubuntu /bin/bash
-t
:让 Docker 分配一个伪终端并绑定到容器的标准输入上-i
:则让容器的标准输入保持打开。当利用docker run
来创建容器时,Docker 在后台运行的标准操作包括
docker run
说明:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 IP 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
后台启动
很多时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d
参数来实现。例如 docker run hello-world
会把日志打印在控制台:
而 docker run -d hello-world
只会打印 容器id
。如下所示:
docker run -d hello-world
如果需要查看一下启动信息可以使用 docker logs 容器ID
的方式进行查看如上图所示。
停止运行容器
终止一个运行中的容器
docker container stop 容器id
查看容器ID的方式,使用 docker ps
或者 docker ps -a
这两者的区别可以参考 docker ps和docker ps -a 运行一个容器的方式前面已经介绍过了我们利用 hello-world 这个镜像运行一个容器如下。
运行了一个容器之后我们在开一个终端查看一下容器信息结果如下。
容器ID如下:
得到了该容器ID之后我们就可以来终止一个运行中的容器了如下:
docker container stop 79d6fd21f4d9
如上我们终止了一个 ubuntu
的容器在第一个终端所展示的信息如下,执行了 exit
命令进行退出。
查看终止状态下的容器
docker container ls -a
重启终止状态下的容器
docker container start 容器id
docker container start 79d6fd21f4d9
重启容器
docker container restart 容器ID
docker container restart 79d6fd21f4d9
进入到容器
在使用 -d
参数时,容器启动后会进入后台,某些时候需要进入容器进行操作,使用 docker exec
命令可以进入到运行中的容器当中。
docker exec -it 容器ID /bin/bash
想要进行如上操作的验证首先需要启动一个容器,如下,使用 docker ps -a
查看所有容器列表,启动一个容器ID如下。
接下来我们就可以使用如下介绍的命令进入到该启动的容器当中了如下。
docker exec -it c6d4236b6911 /bin/bash
导入导出容器
导出镜像
docker export 容器ID > it6666.zip
docker export 79d6fd21f4d9 > it6666.zip
导入镜像
cat it6666.zip | docker import - it6666/ubuntu:1.0
docker image ls
运行导入的镜像,除了之前介绍的从镜像运行到容器通过镜像的名称去运行的,其实还可以通过镜像的ID去运行一个容器如下所示:
docker run -it 845c6a20ad11 /bin/bash
删除容器
删除一个处于终止状态的容器
docker container rm [容器ID,容器名称]
如果要删除一个运行中的容器,可以添加 -f
参数。
docker container rm -f c6d4236b6911
清理所有处于终止状态的容器
- docker container ls -a:命令可以查看所有已经创建的包括终止状态的容器
- docker container prune:清理所有处于终止状态的容器
从容器内拷贝文档到主机
就拿之前导入的 it6666/ubuntu
来进行测试,首先以 it6666/ubuntu
运行一个容器出来如下。
进入到 cd /usr/local/
创建一个 touch test.txt
。
接下来就是开始我们的拷贝了拷贝方式如下。
docker cp 容器id:容器内文件路径 主机路径
docker cp b53506594fa5:/usr/local/test.txt /root
查看一下主机 /root
目录下是否有该文件如下。
容器生命周期
- create:创建容器,并没有启动
- kill:发出的是
sigkill
的信号,是无条件终止的信号 - stop:发出的是
sigterm
的信号,程序终结信号,可以在退出的时候,被阻塞,可以做一些清理工作