一、什么是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进行如下步骤:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载;
- 利用镜像创建一个容器,并启动该容器;
- 分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层 ;
- 从宿主主机配置的网桥接中桥接一个虚拟接口到容器中去;
- 从网桥的地址池配置一个 IP地址给容器;
- 执行用户指定的应用程序;
- 执行完毕后容器被自动终止;
(四)重启容器
命令: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...]