Docker容器概念讲解

文章目录

    • 运行容器
      • 容器长期运行
      • 进入容器的方法
    • 停止/开始/重启容器
    • 暂停/恢复容器
    • 容器删除
    • 容器底层技术
      • cgroup
      • namespace

运行容器

  • docker run是启动容器的命令。我们可以用三种方式来指定容器启动执行的命令
    1 CMD指令
    2 ENTRYPOINT指令
    3 在docker run命令行中指定

docker ps -a查看所有状态下的容器:
-a:显示所有状态下的容器

容器长期运行

  1. docker run centos /bin/bash -c “while true;do sleep 1;done”
    while语句让bash不会退出。缺点:始终占用一个终端
  2. 可以加参数-d以后台方式启动容器
  • CONTAINER ID是容器的短ID,启动容器显示的是长ID
    NAMES字段显示容器的名字,可以通过–name参数来自行定义,如果不指定,docker会自动分配名字。

  • 停止一个容器:

 docker stop CONTAINER ID
  • 查看历史运行命令
docker history IMAGE NAME

进入容器的方法

  1. docker attach
    docker run -d ubuntu /bin/bash -c “while true;do sleep 1;echo nmsl;done”
    docker attach CONTAINER ID 长ID
    Ctrl+p与Ctrl+q组合键退出
    (一般不用)
  2. docker exec
  docker exec -it cb466d90225d bash

Docker容器概念讲解_第1张图片

  1. attach与exec的区别
    ①attach直接进入容器启动命令的终端,不会启动新的进程
    ②exec则是在容器中打开新的终端,并且可以启动新的进程
    ③如果想直接在终端查看启动命令的输出用attach,其他时候用exec

  2. 总结

  • 容器运行:
    1 当CMD,ENTRYPOINT和docker run命令行指定的命令运行结束时,容器停止。
    2 通过-d参数在后台启动容器
    3 通过exec -it可进入容器并执行命令

  • 指定容器三种方法:
    1 短ID
    2 长ID
    3 容器名称 --name定义的名字,docker rename重命名

  • 容器按用途分为两类:
    1 服务类容器
    2 工具类容器

停止/开始/重启容器

  • docker stop可以停止运行的容器,其命令的本质上是向该进程发送一个SIGTERM信号。如果想快速停止容器,可以使用docker kill命令,其作用是向容器进程发送SIGKILL信号。
  • docker start是对于停止的容器,重新启动,docker start会保留第一次启动时的所有参数。
  • docker restart可以重启容器,相当于先执行docker stop再执行docker start。容器可能会因为某种错误而停止运行,对于服务类容器,我们通常希望在这种情况下拿能够自动重启,可以设置--restart=always达到此效果。或者--restart=on-failure:3,意思是如果启动进程退出代码非0,则重启容器,最多重启3次。

暂停/恢复容器

  • docker pause是让容器暂停工作一段时间
  • docker pause NAME
  • docker unpause NAME恢复容器运行

容器删除

docker rm CONTAINER ID
  • 批量删除容器
docker rm -v $(docker ps -aq -f status=exited)

容器底层技术

cgroup

  • cgroup全称Control Group。Linux操作系统通过cgroup可以设置进程使用CPU,内存和IO资源的限额。我们可以在/sys/fs/cgroup中找到。
  • 在/sys/fs/cgroup/cpu/docker目录中,Linux会为每个容器创建一个cgroup目录,以容器长ID命名。

namespace

  • namespace管理着host中全局唯一的资源,并可以让每个容器都觉得只有自己在使用它。namespace实现了容器间资源的隔离。
  • Linux使用了6种namespace,分别对应六种资源。
  1. Mount namespace
    让容器拥有整个文件系统
  2. UTS namespace
    让容器拥有自己的hostname
  3. IPC namespace
    让容器拥有自己的共享内存和信号量
  4. PID namespace
    让容器在host以进程的形式运行
  5. Network namespace
    让容器拥有自己独立的网卡,IP,路由等资源
  6. User namespace
    让容器能够管理自己的用户

你可能感兴趣的:(Docker)