基础概念

容器是镜像的一个运行时的状态。镜像是静态的只读文件,容器是带有运行时需要的可写文件层,容器中的应用进程处于运行状态。

容器和虚拟机的差别:

  • 容器:独立运行的一组应用以及这组应用所必须的运行环境
  • 虚拟机:模拟运行的一整套操作系统,包括内核和应用运行环境等

基本操作

创建容器

使用create命令创建可运行的容器,实例

docker create -it [IMAGE[:TAG]]  # 创建命令
docker ps -a  # 查看命令

进入docker后进入其他目录 docker进入容器后能干嘛_进入docker后进入其他目录


之后执行start可以启动容器:

docker start [CONTAINER-ID]

进入docker后进入其他目录 docker进入容器后能干嘛_进入docker后进入其他目录_02

也可以使用run命令直接创建并启动一个容器

docker run zookeeper:latest

创建容器时,docker在后台执行的操作是:

进入docker后进入其他目录 docker进入容器后能干嘛_容器的基本操作_03


注意上面的-it选项,-t表示开启一个 伪终端,-i表示让容器的标准输入保持打开。如果想要容器在后台保持运行,则使用-d参数即可。

使用logs命令可以观察输出,比如:

docker logs 1ece4ccaa5a9

使用--name可以指定启动容器的别名,比如:

docker run zookeeper:latest --name test

注意点:启动一个容器后,如果容器中没有运行的进程,那么容器会自动停止,避免消耗系统资源

ubuntu的容器为例子,后台启动ubuntu,观察现象:

进入docker后进入其他目录 docker进入容器后能干嘛_ubuntu_04


之后使用ps命令进行观测:

进入docker后进入其他目录 docker进入容器后能干嘛_ubuntu_05


可以看出,ubuntu启动后就立刻停止了,因为内部没有进程运行。之后执行docker ps没有输出,ps本身只输出正在运行的容器;而添加-a参数,即docker ps -a后,可以看到ubuntu是一个停止的容器。但是它还是在容器中。使用交互命令的操作,启动ubuntu的容器,之后进入bash的交互:

进入docker后进入其他目录 docker进入容器后能干嘛_bash_06


新启动一个终端,观察正在运行的进程:

进入docker后进入其他目录 docker进入容器后能干嘛_ubuntu_07


此时,我们可以观测到ubuntu是一个正在运行的容器,因为有bash进程在运行。

暂停和停止容器

使用pause命令暂停容器:

docker pause 1ece4ccaa5a9

![]()
容器的状态显示为暂停了。

使用stop会终止容器,执行prune命令会自动清除掉所有处于停止状态的容器

docker stop 1ece4ccaa5a9
docker container prune

进入docker后进入其他目录 docker进入容器后能干嘛_容器的基本操作_08

进入容器

-d参数是让容器在后台运行,无法看到容器的信息,也无法在容器中进行操作。此时使用attach命令可以进入容器。

docker attach mycontainer

多个窗口同时开启时,所有的信息都会显示,不太方便。

exec命令可以在容器内直接执行任意命令,基本格式是:

docker exec -it ubuntu /bin/bash # 启动ubuntu的容器,然后开启一个bash终端

几个常用的参数:

进入docker后进入其他目录 docker进入容器后能干嘛_进入docker后进入其他目录_09

删除容器

rm命令用于删除处于终止或者退出状态的容器,代码实例:

进入docker后进入其他目录 docker进入容器后能干嘛_容器的基本操作_10


如果想要通过rm删除正在运行的容器,可以直接使用-f参数。

导入和导出容器

该命令主要用于把容器从一个系统迁移到另一个系统。

导出是指把一个已经创建的容器导出到一个文件,不论该容器是否处于运行的状态。借助export命令实现。

docker export [CONTAINER_NAME] -o [NAME]

进入docker后进入其他目录 docker进入容器后能干嘛_进入docker后进入其他目录_11


把导出的文件作为镜像导入docker中,基本命令:

docker import zk.tar - test/zk

上一篇笔记中提到的loadsave也可以实现有关的功能,区别在于:

  • load:导入镜像存储文件到本地的镜像库,这是最完整的保存方式
  • import:仅导入一个容器快照到本地的镜像库,丢失所有的历史记录和元数据信息,仅仅保留容器当时的快照状态

查看容器

insperct用于查看容器信息。

进入docker后进入其他目录 docker进入容器后能干嘛_ubuntu_12


使用top命令可以查看容器内进程等的信息,类似linux的top命令

进入docker后进入其他目录 docker进入容器后能干嘛_ubuntu_13


status命令是查看具体的统计信息:

docker stats zk

其他命令

  • container cp:仅用于容器和主机之间复制文件
  • container diff:查看容器内文件系统的变更
  • container port:查看容器的端口映射情况
  • container update:更新容器的运行时配置