一、什么是Docker容器

容器是 Docker 的另一个核心概念。简单来说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态。
如果认为虚拟机是模拟运行的一整套操作系统(包括内核、应用运行态环境和其他系统环境)和跑在上面的应用。那么 Docker 容器就是独立运行的一个(或一组)应用,以及它们必需的运行环境

二、容器常用操作

(一)创建容器

命令:docker [container] create 格式:docker container create [OPTIONS] IMAGE [COMMAND] [ARG...] 选项:
较多,由于创建容器本来使用就少,所以就不做记录了

创建容器成功后,会返回一个容器ID,如:

docker create mysql:5.7
613b2ca710aa34927654f1365c3eced9f920620b48ab196409edb9c3b55476b5

接下来,我们可以使用这个ID进行启动、停止、删除等操作;

(二)启动容器

命令:docker start 格式:docker start [OPTIONS] CONTAINER [CONTAINER...] 选项:

  • -i, --interactive:交互模式运行,也就是能进入容器内部

(三)新建并启动容器

命令:docker run 格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 选项:
选项较多,这里累出常用操作。

1. 以后台方式运行

-d

2. 给容器取名

docker run --name ubuntu ubuntu--name string:指定容器名

3. 交互模式运行

docker run -it ubuntu

--interactive , -i :以交互模式运行容器,通常与-t同时使用
-t :为容器重新分配一个伪输入终端,通常与-i同时使用

4. 把容器id保存到文件中

docker run --cidfile ./docker_ubuntu.cid ubuntu echo "ubuntu"--cidfile filename 用于指定文件
echo 是在ubuntu启动的容器里面执行的,和docker本身无关

5. 设置容器中的工作目录

docker run -it -w /opt ubuntu-w workdir:指定工作目录

这个命令等价于create+start,而且,如果不存在镜像的时候,还会去pull镜像。
实际上,docker run会引起docker进行如下步骤:

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

(四)重启容器

命令:docker [container] restart 格式:docker container restart [OPTIONS] CONTAINER [CONTAINER...]

(五)暂停容器

命令:docker [container] pause 格式:docker container pause CONTAINER [CONTAINER...]

(六)退出暂停

命令:docker [container] unpause 格式:docker container unpause CONTAINER [CONTAINER...]

(七)查看容器输出日志

命令:docker [container] logs 格式:docker [container] logs [OPTIONS] CONTAINER 选项:

  • --details:显示详情
  • -f, --follow:不停的追加
  • --since string:显示某个时间点之后的,如2013-01-02T13:23:37
  • --tail string:执行显示出来的行数,默认是all
  • -t, --timestamps:显示时间戳
  • --until string:显示某个时间点之前的,如:2013-01-02T13:23:37

(八)进入容器

有两种方式:

1. attach 命令

格式:docker attach [OPTIONS] CONTAINER 然而使用 attach 命令有时候并不方便 ,当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行操作了 。

2. exec命令

格式:docker exec [OPTIONS] CONTAINER COMMAND [ARG...] 通常较多使用如下几种方式:
docker exec -t 容器ID ls / : 以终端的方式不进入容器直接执行ls /命令
docker exec -t 容器ID /bin/bash:进入容器的bash命令窗口

(九)删除容器

命令:docker [container] rm 格式:docker rm [OPTIONS] CONTAINER [CONTAINER...] 选项:

  • -f, --force:强制删除
  • -l, --link:删除指定的连接
  • -v, --volumes:删除绑定的数据卷

(十)导出容器

命令:docker [container] export 格式:docker export [OPTIONS] CONTAINER 选项:

  • -o, --output string:指定输出文件

这个命令的作用是:导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行 状态

导出的是一个容器快照。

(十一)导入容器

命令:docker [container] import 格式:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] 选项:

  • -c, --change list:更改命令
  • -m, --message string:提交信息
    使用示例:
  • 导入远程的:docker import http://example.com/exampleimage.tgz
  • 导入本地的(下载的或者是基于被的镜像导出的):
    cat exampleimage.tgz | docker import - exampleimagelocal:new
    或者是
    docker import /path/to/exampleimage.tgz
  • 导入本地目录的
    tar -c . | docker import - exampleimagedir

和load区别:
既可以使用 docker load命令来导入镜像存储文件到本地镜像库,也可以使 用 docker [container] import 命令来导入一个容器快照到本地镜像库。 这两者的区 别在于 : 容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态), 而镜像存储文件将保存完整记录,体积更大 。 此外,从容器快照文件导人时可以重新指定标 签等元数据信息 。

(十二)查看容器端口映射情况

命令:docker [container] port 格式:docker container port CONTAINER [PRIVATE_PORT[/PROTO]]

(十三)查看容器

1. 查看容器详情

命令:docker container inspect 格式:docker container inspect [OPTIONS] CONTAINER [CONTAINER...]

查看某容器的具体信息,会以 json格式返回包括容器 Id、 创建时间、路径、状
态、镜像、配置等在内的各项信息:

2. 查看容器内进程

命令:docker [container] top 格式:docker container top CONTAINER [OPTIONS]

这个子命令类似于 Linux 系统中的 top 命令,会打印出容器内的进程信息,包括 PID、 用户、时间、命令等

3. 查看统计信息

命令:docker [container] stats 格式:docker stats [OPTIONS] [CONTAINER...] 选项:

  • -a, --all:显示所有容器的
  • --format string:使用go模板格式化
  • --no-stream:不持续输出,默认会自动更新持续实时结果;
  • --no-trunc:不截断输出

这个会显示 CPU、内存、存储、网络等使用情况的统计信息

4. 显示运行容器

命令:docker ps 格式:docker ps [OPTIONS] 选项:

  • -a, --all:显示所有容器,包括没有运行的,不指定只显示运行的容器
  • -n, --last int:显示最近n个创建的容器
  • --no-trunc:不截断显示
  • -q, --quiet:只显示id
  • -s, --size:显示文件大小
  • -f, --filter filter:进行过滤
    可以使用的过滤如下:
    id:镜像id
    name:容器名
    label:描述,labe=key=value这种格式
    status:状态,取值created, restarting, running, removing, paused, exited, or dead
    ancestor:镜像标志,取值<image-name>[:<tag>], <image id>, or <image@digest> before | since:在某个容器之前或者之后的,后面跟容器id
    health:健康情况,取值starting, healthy, unhealthy or none.
  • --format string:格式化输出(GO模板)
    可以使用的有.ID、.Image、.Command、.CreatedAt、.RunningFor、.Ports、.Status、.Size、.Names、.Labels、.Label、.Mounts、.Networks

(十四)容器和宿主机复制文件

命令:docker cp 格式:docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- 或者 docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

如:docker cp java_error_in_idea_2508.log 6de32c369b06:/

(十五)更新配置

命令:docker update 格式:docker update [OPTIONS] CONTAINER [CONTAINER...]