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

学习本章之前,先将之前的容器清除掉,之前的容器太多了。
一、先执行:

docker –help

看下使用说明,有兴趣的话可以仔细阅读尝试下,下图只是截取其中两部分

docker入门教程pdf docker入门与实战第三版pdf_Docker

能看出来子命令container是作容器管理的。

docker入门教程pdf docker入门与实战第三版pdf_git_02

ps子命令是展示容器的。

二、查看容器操作相关信息,又是一个超长的说明,继续截取一部分。
继续执行:

docker container –help

docker入门教程pdf docker入门与实战第三版pdf_git_03

子命令prune是说移除所有的停止的容器;查看docker ps文档

docker入门教程pdf docker入门与实战第三版pdf_git_04

-a子命令:展示所有的容器,默认只展示运行中的。

三、先查看当前所有容器,然后执行删除所有停止的容器,然后重新再查看剩余容器。
执行命令

docker ps -a

docker入门教程pdf docker入门与实战第三版pdf_Docker_05


删除所有停止的容器,然后在查看剩余容器:

docker container prune
docker ps -a

docker入门教程pdf docker入门与实战第三版pdf_git_06


需注意的是ps是docker的子命令,prune是docker container的子命令。

继续整理笔记。

创建容器
可以使用docker [container] create命令新建容器(上边的文档信息也记录的有,docker的子命令create和docker container的子命令create的描述是一样的,都是Create a new container,因此container可要可不要),执行命令:

docker create -it ubuntu:latest
docker ps -a

docker入门教程pdf docker入门与实战第三版pdf_docker入门教程pdf_07

可以看到刚创建的容器状态是Created,未开始运行。记住容器id 01d17e1b1048d8

启动容器
使用docker [container] start命令来启动容器,执行命令

docker start 01d17e1b1048d8

docker入门教程pdf docker入门与实战第三版pdf_git_08


新建并启动容器

使用命令docker [container] run。执行命令:

docker run ubuntu /bin/echo ‘hello world’

docker入门教程pdf docker入门与实战第三版pdf_Docker_09


当利用docker [container] run来创建并启动容器时,Docker在后台运行的标准操作包括:

1、检查本地是否存在指定镜像,不存在就从公有仓库下载;

2、利用镜像创建一个容器,并启动该容器;

3、分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层;

4、从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去;

5、从网桥的地址池配置一个IP地址给容器;

6、执行用户指定的应用程序;

7、执行完毕后容器被自动终止。

守护态运行
更多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行。执行命令:

docker run -d ubuntu /bin/sh -c "while true; do echo 'hello world'; sleep 1; done"

然后可以使用命令docker ps 来查看运行中的容器。

docker入门教程pdf docker入门与实战第三版pdf_Docker_10

记下容器id:4b3b17f8467c

查看容器输出
命令docker [container] logs
执行:

docker logs 4b3b17f8467c

暂停容器
命令 docker [container] pause
执行命令:

docker pause 4b3b17f8467c

然后执行docker ps 查看运行状态

处于paused状态的容器可以使用docker [container] unpause 来解除暂停状态
执行命令:

docker unpause 4b3b17f8467c

然后执行docker ps 查看运行状态

docker入门教程pdf docker入门与实战第三版pdf_docker入门教程pdf_11


终止容器

可以使用docker [container] stop来终止一个容器,执行命令:

docker stop 4b3b17f8467c

然后执行

docker ps -a | grep  4b3b17f8467c

查看运行状态
处于终止状态的容器可以通过docker [container] start命令来重新启动,执行命令:

docker start 4b3b17f8467c

然后执行docker ps 查看运行状态

docker入门教程pdf docker入门与实战第三版pdf_git_12

docker [container] restart命令会将一个运行态的容器先终止,然后重新启动。

进入容器
attach是Docker自带的命令,命令格式:docker [container] attach,执行命令:

docker attach 4b3b17f8467c

docker入门教程pdf docker入门与实战第三版pdf_docker入门教程pdf_13


然而使用attach命令并不方便。当多个窗口同时attach到同一个容器的时候,所有窗口同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行操作了,就像上述容器,由于容器本就被无限循环占用了,那么attach访问时仍然是执行无限循环的窗口,此时如果退出的话,容器将因为命令结束而终止。

从Docker的1.3.0版本起,Docker提供了一个更加方便的工具exec命令,可以在运行中的容器内直接执行任意命令。命令格式:docker [container] exec,此命令是start命令抛去启动容器部分,直接在启动中的容器中执行命令。重新启动容器后执行命令:

docker exec -it 4b3b17f8467c /bin/bash

docker入门教程pdf docker入门与实战第三版pdf_ubuntu_14


删除容器

可以使用命令docker [container] rm命令来删除处于终止或推出状态的容器。执行命令:

docker rm 4b3b17f8467c

会提示错误,不能删除运行中的容器。使用命令看看docker rm的子命令介绍,然后添加强制删除的子命令,执行命令

docker rm -f 4b3b17f8467c

docker入门教程pdf docker入门与实战第三版pdf_docker入门教程pdf_15


导出容器

导出容器是指导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态。命令格式:docker [container] export [-o 文件名] CONTAINER

继续启动一个my-git,执行命令:

docker export -o mygit.tar a5139800cba0

docker export a5139800cba0 >my-git.tar

docker入门教程pdf docker入门与实战第三版pdf_docker_16


导入容器

导出的文件可以使用docker [container] import命令导入变成镜像,执行命令:

docker import mygit.tar mycontainer/my-git:1.0.0

docker入门教程pdf docker入门与实战第三版pdf_docker_17


测试镜像

docker入门教程pdf docker入门与实战第三版pdf_ubuntu_18

查看容器
查看容器详情,命令格式:docker container inspect
查看容器进程,命令格式:docker [container] top
查看统计信息,命令格式:docker [container] stats
重新启动个守护态ubuntu容器,容器id是7b4ad1ca0cc7
执行命令:

docker container inspect 7b4ad1ca0cc7 
docker top 7b4ad1ca0cc7
docker stats 7b4ad1ca0cc7

docker入门教程pdf docker入门与实战第三版pdf_ubuntu_19


查看容器的具体信息,会以json格式返回包括容器id、创建时间、路径、状态、镜像、配置等信息。

docker入门教程pdf docker入门与实战第三版pdf_Docker_20

查看容器内进程,会打印包括PID、用户、时间、命令等。

docker入门教程pdf docker入门与实战第三版pdf_Docker_21


查看统计信息,会显示CPU、内存、存储、网络等使用情况的统计信息。

其他容器命令
复制文件:docker [container] cp 路径 容器:路径,命令:

docker cp my-git.tar  7b4ad1ca0cc7:/tmp/.

docker入门教程pdf docker入门与实战第三版pdf_Docker_22


查看变更:docker [container] diff CONTAINER,命令:

docker diff 7b4ad1ca0cc7

docker入门教程pdf docker入门与实战第三版pdf_docker入门教程pdf_23


查看端口映射:docker container port CONTAINER,命令:

docker container port 7b4ad1ca0cc7

因为启动时没有配置端口映射,所以没有端口信息。重新启动一个配置端口号,命令:

docker run -d -p 5000:5000 ubuntu /bin/sh -c "while true; do echo 'hello world'; sleep 1; done"

docker入门教程pdf docker入门与实战第三版pdf_ubuntu_24

更新配置

docker [container] update命令可以更新容器的一些运行时配置,主要是一些资源限制份额。

例如,限制总配额为1秒,容器所占用时间为10%,命令如下

docker update –cpu-quota 1000000 7b4ad1ca0cc7
docker update –cpu-period 100000 7b4ad1ca0cc7

具体可以修改哪些配置看

docker update --help