前言

Docker 容器使用沙箱机制,将每个容器彼此都隔离出来,极大程度上可以保护到其他容器的进行和使用,有镜像才能创建容器,这个是硬性要求,下面将模拟使用 centos 系统镜像来演示加深理解

拉取 centos 镜像

  1. docker pull centos

创建容器并启动镜像

  1. # 使用语法
  2. docker run [options] images [command][args]
[options] 参数 说明
—name 为容器指定一个名称
-d 后台运行容器,并返回容器ID,也称启动守护式容器
-l 以交互模式运行容器,一般配合 -t 同时使用
-t 为容器重新分配一个伪输入端,类似windows的cmd窗口,一般配合 -l 同时使用
-P 随机端口映射
-p 指定端口映射,有四种格式
1、ip:hostPort:containerPort
2、ip::containerPort
3、hostPort:containerPort
4、containerPort

使用默认语法运行

image.png
上面加了 -d 运行实例,按逻辑来说,centos 应该是支持后台运行的,但通过 docker ps 发现并没有在后台运行, docker ps -a 查看具体内容
image.png
发现 centos 一启动就关闭了,这是因为 Docker 容器后台运行,必须要有一个前台进程,容器运行的命令如果不是那些 一直挂起来的命令(比如运行top、tall),容器就会自动退出,这个是 docker 的机制问题,比如你的 web 容器,以 nginx 为例,正常情况下,我们配置启动服务然后启动service即可,例如 service nginx start ,但是,这样做,nginx 为后台进程模式运行,就导致 docker 前台没有运行的应用 ,这样的容器启动后,会自杀掉,因为它无事可做,自然就没有留下来的道理,最佳的解决方法是:将你要运行的程序以前台进程的形式去运行,也就是接下来所要介绍的

使用交互式运行

  1. # 使用语法
  2. docker run -it --name xxxx 镜像名称或者镜像ID /bin/bash

image.png
bin 表示 linux 里面的一个目录名称,bash 相当于终端命令,运行后发现可以发现进去了容器里面的目录下, ls -l 查看
image.png

退出容器

既然可以进去容器内部,那又是如何从容器内部退出呢,其实也很简单

退出容器分 2 种情况,一种是停止容器并退出,另外一种是容器不停止退出

  • 情况1:在容器内部执行 exit 命令停止容器并退出
  • 情况2:按住键盘 ctrl+p+q 不停止容器退出

    列出容器

    1. docker ps [options]
    | options | 说明 | | —- | —- | | -a | 显示所有运行和不运行的容器,默认值列出正在运行的容器 | | -l | 列出最近创建的容器 | | -n | 列出最近 n 个创建的容器 | | -q | 静默模式,只显示容器ID | | —no-turnc | 不截断输出 |

重启容器

  1. docker restart 容器ID / 容器名称

image.png

启动容器

  1. docker start 容器ID / 容器名称

image.png

停止容器

  1. docker stop 容器ID / 容器名称

image.png

强制停止容器

  1. docker kill 容器ID / 容器名称 (这里的kill用法和linuxkill用户一样)

image.png

删除已经停止的容器

rmi 是删除镜像 ,rm是删除容器

  1. # 单个删除
  2. docker rm 容器ID
  3. # 多个删除
  4. docker rm -f $(docker ps -aq)

image.png