操作Docker容器

操作Docker容器

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

启动容器:

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。因为Docker容器是在太轻量级了,很多时候用户都是随时删除和新创建容器。

 

新建并启动:主要命令为 docker run

docker run ubuntu:18.04 /bin/echo 'Hello world'

如果镜像存在就直接启动了,如果不存在就是自动从官方仓库拉取下载之后并启动,我本机是有这个镜像,直接就输出 Hello world 了。

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

docker run -t -i ubuntu:18.04 /bin/bash

启动-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i 则让容器的标准输入保持打开。在交互模式下,可以通过所有创建的终端来输入命令。

 

当利用docker run 来创建容器时,Docker在后台运行的标准操作包括:

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

启动已终止容器Docker container start  (或者直接docker start)

停止和关闭是stop和restar

 

后台运行

更多时候,需要让docker在后台运行而不是直接把执行结果输出在当前宿主机下,通过-d参数实现。

例子:

不使用-d参数

docker run ubuntu:18.04 /bin/sh -c "while true; do echo hello world;sleep 1; done"

 

容器会把输出的结果(STDOUT)打印到宿主机上面,直接强制退出的话,容器就退出了。

如果使用-d的话

docker run -d ubuntu:18.04 /bin/sh -c "while true; do echo hello world;sleep 1; done"

9a615ec487e9dfd4d246d391fb804e786610a45239cda2e8687e43a70580566d

不会有输出,就直接输出容器的id,此时容器会在后台运行并不会把输出结果(STDOUT)打印到宿主机上面(输出结果可以用docker logs 查看)

 

使用-d 参数启动后会返回一个唯一的id,也可以通过docker container ls命令来查看容器信息。

 

进入容器

    在使用-d参数时,容器启动后会进入后台。

    某些时候需要进入容器进行操作,包括使用docker attach命令或者docker exec 命令,推荐使用exec,因为attach可能导致容器退出。

 

attach命令

docker run -dit ubuntu

docker container ls

docker attach 655bdc811cd8

此时已经进入了终端 exit,后容器就会直接停止,可以通过docker container ls再看下,发现退出了。

 

exec命令

-i -t 参数,docker exec 后边可以跟多个参数,这里是-i -t参数。(交互+伪终端)

 

exit退出后不会跟attach一样导致容器直接也退出了。

 


导出和导入容器

导出:docker export

例子:

docker container ls -a

docker export 0e172d70f90e > ubuntu.tar

 

那个红色的就是容器导出来的快照文件。

 

导入快照 docker import

cat ubuntu.tar | docker import - test/ubuntu:v1.0

 

也可以通过指定 URL 或者某个目录来导入

docker import http://example.com/exampleimage.tgz example/imagerepo

ps:用户即可以使用docker load 来导入镜像存储文件到本地镜像库,也可以使用docker import来导入一个容器快照到本地镜像库。区别是容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也大。从容器快照文件导入是可以重新制定标签等元数据信息。


删除容器

Docker container rm删除终止状态的容器。如果是删除运行中的容器 可以添加-f,Docker会发送SIGKILL信号给容器。如果是一次性清理所有终止状态的容器可以直接

docker container prune

 

 

原文地址:https://www.cnblogs.com/csnd/p/12061838.html