docker 容器

   docker容器是docker的运行实例,在镜像文件上带有可写的文件层。docker容器是一个轻量级应用,能够随时创建和部署、启动、停止

1.使用docker creat 创建新的容器

1
docker create -it centos  创建以个新的Centos容器

使用docker ps -a 查看容器信息

STATUS 为容器运行状态,UP为正常运行,Exited为停止,Created为尚未启动

    creat 命令和后续的run命令支持的选项都十分复杂,主要包括几大类:与容器运行模式相关,与容器和环境配置相关,与容器资源限制和安全保护相关

2.使用docker start 启动容器

1
docker start 10f

可以看到容器状态为UP 代表已经启动。

3. 使用 docker run 新建并启动容器

1
docker run centos /bin/echo "this is new centos "

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

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

    使用ps命令,可以看到只运行了bash应用,并无其他进程,用户可以输入exit 命令来退出容器

    对于所创建的bash容器,当使用exit命令退出后,容器就自动处于退出(Exited)状态,对于docker 容器来说, 当运行的应用退出后容器也就没有继续运行的必要了

    有时执行docker run会出错,因为命令无法正常执行容器会退出,可以查看默认返回的错误码

常见的有以下几个

  1. 125 Docker daemon 执行出错,例如指定不支持的参数
  2. 126 指定命令无法执行 例如权限出错
  3. 127 容器内命令无法找到

4. 守护状态运行

使docker容器在后台以守护状态运行(Daemonized) 使用-d 参数

1
2
3
4
docker run -d centos /bin/bash -c "while ture ; do echo hello world ; sleep 2;done" 
docker ps ### 查看容器信息
docker logs ### 获取容器输出信息
docker stop ### 停止容器

5. 终止容器

    docker stop 会终止一个运行中的容器,命令格式为 docker stop [-t | –time=[10]] [container]

    首先向容器发送SIGTERM 信号,等待一段超时时间后(默认10秒 ) 在发送信号来终止容器
    docker kill 会 直接发送 SIGKILL 信号来终止容器

 当Docker容器中指定的应用终结时,容器也会自动终止

1
docker ps -qa 查看所有容器的id

    处于终止状态的容器可以通过 docker start命令重新启动,docker restart 会将一个运行态容器先终止再重新启动

6.进入容器

    在使用-d参数后,容器会进入后台,用户无法操作,如果需要进入可以使用官方的attach、exec,和第三方的nsenter

1
2
3
4
docker attach [--detach-keys[ = [ ] ] ] [--no-stdin] [--sig-proxy[=ture]] container 
--detach-keys[ = [ ] ] : 指定退出attach模式的快捷键,默认是ctrl+q 和ctrl+p
--no-stdin=true|false : 是否关闭从标准输入,默认是打开
--sig-proxy=true|false : 是否代理收到的系统信给应用进程,默认true

多个窗口同时使用attach模式连接到同一容器时,所有窗口都会同步显示

1
2
3
4
5
docker exec [-d|--detach] [--detach-keys[=[ ] ] ] [-i|--interactive] [--privileged] [-t|--tty] [-u|--user[=USER] container COMMAND [ARG..]
-i ,--interactive=true|false : 打开标准输入接受用户输入命令,默认false
--privileged-true|false : 是否给执行命令以最高权限 ,默认false
-t,--tty=true|false ; 分配伪终端,默认false
-u ,--user=" " : 执行命令的用户或ID

   通过指定-it 参数来保持标准输入打开,并且分配一个为终端,推荐使用exec命令对容器进行操作

1
docker nsenter 第三方工具

7.删除容器

1
docker rm [-f|--force] [-l | --link] [-v|--volumes] container [container……]

使用该命令来删除处于终止或退出状态的容器

-f ,–force=false :是否强制终止并删除一个运行中的容器

-l,–link=false :删除容器的连接,但是保留容器

-v,–volumes=false : 删除容器挂载的数据卷

8. 导入导出容器

用于容器的系统迁移

1
docker export [-o|--output[=" " ] ] container

可以通过-o 来指定导出的tar文件名,也可以直接重定向实现

导出的文件可以使用docker import 命令导入变成镜像

1
docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|-[REPOSITORY[:TAG]]
  • docker save :将一个镜像导出为文件,再使用docker
    load –input 命令将文件导入为一个镜像,会保存该镜像的的所有历史记录。比docker
    export命令导出的文件大,很好理解,因为会保存镜像的所有历史记录。

  • docker export :将一个容器导出为文件,再使用docker import命令将容器导入成为一个新的镜像,但是相比docker save命令,容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照。

------ end ------
0%