基础概念
容器是镜像的一个运行时的状态。镜像是静态的只读文件,容器是带有运行时需要的可写文件层,容器中的应用进程处于运行状态。
容器和虚拟机的差别:
- 容器:独立运行的一组应用以及这组应用所必须的运行环境
- 虚拟机:模拟运行的一整套操作系统,包括内核和应用运行环境等
基本操作
创建容器
使用create
命令创建可运行的容器,实例
docker create -it [IMAGE[:TAG]] # 创建命令
docker ps -a # 查看命令
之后执行start
可以启动容器:
docker start [CONTAINER-ID]
也可以使用run
命令直接创建并启动一个容器
docker run zookeeper:latest
创建容器时,docker在后台执行的操作是:
注意上面的-it
选项,-t
表示开启一个 伪终端,-i
表示让容器的标准输入保持打开。如果想要容器在后台保持运行,则使用-d
参数即可。
使用logs
命令可以观察输出,比如:
docker logs 1ece4ccaa5a9
使用--name
可以指定启动容器的别名,比如:
docker run zookeeper:latest --name test
注意点:启动一个容器后,如果容器中没有运行的进程,那么容器会自动停止,避免消耗系统资源
以ubuntu
的容器为例子,后台启动ubuntu
,观察现象:
之后使用ps
命令进行观测:
可以看出,ubuntu启动后就立刻停止了,因为内部没有进程运行。之后执行docker ps
没有输出,ps
本身只输出正在运行的容器;而添加-a
参数,即docker ps -a
后,可以看到ubuntu
是一个停止的容器。但是它还是在容器中。使用交互命令的操作,启动ubuntu的容器,之后进入bash
的交互:
新启动一个终端,观察正在运行的进程:
此时,我们可以观测到ubuntu是一个正在运行的容器,因为有bash进程在运行。
暂停和停止容器
使用pause
命令暂停容器:
docker pause 1ece4ccaa5a9
![]()
容器的状态显示为暂停了。
使用stop
会终止容器,执行prune
命令会自动清除掉所有处于停止状态的容器
docker stop 1ece4ccaa5a9
docker container prune
进入容器
-d
参数是让容器在后台运行,无法看到容器的信息,也无法在容器中进行操作。此时使用attach
命令可以进入容器。
docker attach mycontainer
多个窗口同时开启时,所有的信息都会显示,不太方便。
exec
命令可以在容器内直接执行任意命令,基本格式是:
docker exec -it ubuntu /bin/bash # 启动ubuntu的容器,然后开启一个bash终端
几个常用的参数:
删除容器
rm
命令用于删除处于终止或者退出状态的容器,代码实例:
如果想要通过rm
删除正在运行的容器,可以直接使用-f
参数。
导入和导出容器
该命令主要用于把容器从一个系统迁移到另一个系统。
导出是指把一个已经创建的容器导出到一个文件,不论该容器是否处于运行的状态。借助export
命令实现。
docker export [CONTAINER_NAME] -o [NAME]
把导出的文件作为镜像导入docker中,基本命令:
docker import zk.tar - test/zk
上一篇笔记中提到的load
和save
也可以实现有关的功能,区别在于:
-
load
:导入镜像存储文件到本地的镜像库,这是最完整的保存方式 -
import
:仅导入一个容器快照到本地的镜像库,丢失所有的历史记录和元数据信息,仅仅保留容器当时的快照状态
查看容器
insperct
用于查看容器信息。
使用top
命令可以查看容器内进程等的信息,类似linux的top
命令
status
命令是查看具体的统计信息:
docker stats zk
其他命令
-
container cp
:仅用于容器和主机之间复制文件 -
container diff
:查看容器内文件系统的变更 -
container port
:查看容器的端口映射情况 -
container update
:更新容器的运行时配置