Docker-2-容器的基本操作I

前文中简单的了解了一下docker,也在CentOS7的环境下安装了docker,那下面就来看一下docker中的一些基本的操作

查看容器

查看正在运行的容器

1
docker ps

image

查看所有容器

1
docker ps -a

image

查看最近创建的容器

查看最近创建的一个容器:

1
docker ps -l

image

查看最近创建的x个容器

1
docker ps -n=x

image

返回值详解

  • CONTAINER ID: 容器的唯一ID,是一个64位的十六进制整数,在不会混淆的情况下,可以只采用id的前几位进行标识一个容器
  • IMAGE: 表示创建容器时所使用的镜像
  • COMMAND: 表示容器最后运行的命令
  • CREATED: 创建容器的时间
  • STATUS: 容器的状态,这里可能显示一个容器的启动时间也可能是容器的关闭时间,具体要看容器当前的状态
  • PORTS: 容器对外开放的端口
  • NAMES: 容器的名字,如果不设置,会有一个默认的名字

创建容器

docker创建容器有两种方式,一种是创建完成直接启动,一种是先创建,完了再去启动,两种方式其实是差不多的,当执行一个创建命令后,docker首先会去本地路径下找是不是有相应的镜像,如果没有的话就去docker hub上去搜索,搜到了的话先下载下来,然后再用刚下载下来的镜像创建[启动]容器.

容器的文件系统是在只读的镜像文件上添加一层可读可写的文件层,这样可以使在不改变镜像的情况下,只记录改变的数据.

创建一个容器不启动

使用以下命令可以创建一个容器但是不启动,创建完成之后容器的状态处于停止状态:

1
docker create 镜像ID/镜像名

举个例子,比如我们要创建一个nginx的容器,命令如下:

1
docker create nginx

image

首先它会先看我本地有没有这个nginx的镜像,发现并没有,然后就去docker hub里面去下载这个镜像,下载的版本是最新的镜像,下载完成之后再用刚下载下来的镜像去创建容器

然后创建完成之后用docker ps -a查看一下,可以看到他的状态是Created,并没有启动,然后名称是一个默认的名称

这里我们也可以指定名称去创建容器,如下:

1
docker create --name=nginx nginx

image

这次创建我们本地有了镜像之后,就直接创建了不用再去docker hub去下载了

上面创建了容器之后,并没有去启动,下面再来看下直接创建并启动

创建容器并启动

使用docker run命令可以创建并启动一个容器,这个命令又可以启动两种不同模式的容器:后台型容器和交互型容器

后台型容器就是一个在后台运行的容器,不需要和开发者进行交互,而交互型容器则需要接收开发者的输入进行处理给出反馈,在实际使用中,大部分情况都是创建后台型容器,不过在很多时候,后台型容器也不可避免进行交互

后台型容器

还是以nginx为例,命令如下:

1
docker run --name nginx -d -p 8080:80 nginx

  • –name 创建的容器名称
  • -d 表示容器在后台裕兴
  • -p 将容器的80端口映射到宿主机的8080端口
  • nginx 使用的镜像的名字/这里也可以替换成镜像的id

image

创建好了之后,可以看到他已经运行起来了,这时候我们就可以通过ip和端口访问了,如下:
image

这就是一个后台型容器的基本创建方式,再来看一下交互型容器

交互型容器

比如要创建一个ubuntu容器,开发者可能需要在ubuntu上面输入命令执行相关操作,创建方式如下:

1
docker run --name ubuntu -it ubuntu /bin/bash
  • it: i表示开发容器的标准输入(STDIN),t表示告诉docker,为容器创建一个命令行终端

image

上图中,第一次创建是失败了,拉取镜像超时了,这是因为天朝网络的原因,多试几次就好了

然后拉取下来创建完成之后,进入了一个命令终端,在这个终端里面就可以操作我们刚创建ubuntu了

最后操作完成之后使用exit命令就退出去了,退出的同时,这个容器就关闭了,并不会后台运行,等我们下次再手动启动这个容器的时候就变成了后台运行的了

后台型进行交互

我们上面创建的后台型容器如何进行交互呢, 也就是说怎样进入容器内部呢? 可以使用以下命令:

1
docker exec -it 容器id/容器名称 /bin/bash

image

-ti的意思还是和上面一样的,就不多说了,退出容器用exit命令就退出了