本文是我在学习《Docker技术入门与实战》第3版(杨保华 戴王剑 曹亚仑编著)时所做的笔记,有许多描述不清楚的地方,建议自行购买学习。
Docker容器
容器是镜像的一个运行实例。镜像与容器的不同点时,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时容器的应用进程处于运行状态。
如果认为虚拟机是模拟运行的一整套操作系统(包括内核、应用运行态环境和其他操作系统)和跑在上面的应用。那么Docker容器就是独立运行的一个(或一组)应用,以及他们必需的运行环境。
学习本章之前,先将之前的容器清除掉,之前的容器太多了。
一、先执行:
docker –help
看下使用说明,有兴趣的话可以仔细阅读尝试下,下图只是截取其中两部分
能看出来子命令container是作容器管理的。
ps子命令是展示容器的。
二、查看容器操作相关信息,又是一个超长的说明,继续截取一部分。
继续执行:
docker container –help
子命令prune是说移除所有的停止的容器;
查看docker ps文档
-a子命令:展示所有的容器,默认只展示运行中的。
三、先查看当前所有容器,然后执行删除所有停止的容器,然后重新再查看剩余容器。
执行命令
docker ps -a
删除所有停止的容器,然后在查看剩余容器:
docker container prune
docker ps -a
需注意的是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
可以看到刚创建的容器状态是Created,未开始运行。记住容器id 01d17e1b1048d8
启动容器
使用docker [container] start命令来启动容器,执行命令
docker start 01d17e1b1048d8
新建并启动容器
使用命令docker [container] run。执行命令:
docker run ubuntu /bin/echo ‘hello world’
当利用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 来查看运行中的容器。
记下容器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 [container] stop来终止一个容器,执行命令:
docker stop 4b3b17f8467c
然后执行
docker ps -a | grep 4b3b17f8467c
查看运行状态
处于终止状态的容器可以通过docker [container] start命令来重新启动,执行命令:
docker start 4b3b17f8467c
然后执行docker ps 查看运行状态
docker [container] restart命令会将一个运行态的容器先终止,然后重新启动。
进入容器
attach是Docker自带的命令,命令格式:docker [container] attach,执行命令:
docker attach 4b3b17f8467c
然而使用attach命令并不方便。当多个窗口同时attach到同一个容器的时候,所有窗口同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行操作了,就像上述容器,由于容器本就被无限循环占用了,那么attach访问时仍然是执行无限循环的窗口,此时如果退出的话,容器将因为命令结束而终止。
从Docker的1.3.0版本起,Docker提供了一个更加方便的工具exec命令,可以在运行中的容器内直接执行任意命令。命令格式:docker [container] exec,此命令是start命令抛去启动容器部分,直接在启动中的容器中执行命令。重新启动容器后执行命令:
docker exec -it 4b3b17f8467c /bin/bash
删除容器
可以使用命令docker [container] rm命令来删除处于终止或推出状态的容器。执行命令:
docker rm 4b3b17f8467c
会提示错误,不能删除运行中的容器。使用命令看看docker rm的子命令介绍,然后添加强制删除的子命令,执行命令
docker rm -f 4b3b17f8467c
导出容器
导出容器是指导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态。命令格式:docker [container] export [-o 文件名] CONTAINER
继续启动一个my-git,执行命令:
docker export -o mygit.tar a5139800cba0
或
docker export a5139800cba0 >my-git.tar
导入容器
导出的文件可以使用docker [container] import命令导入变成镜像,执行命令:
docker import mygit.tar mycontainer/my-git:1.0.0
测试镜像
查看容器
查看容器详情,命令格式:docker container inspect
查看容器进程,命令格式:docker [container] top
查看统计信息,命令格式:docker [container] stats
重新启动个守护态ubuntu容器,容器id是7b4ad1ca0cc7
执行命令:
docker container inspect 7b4ad1ca0cc7
docker top 7b4ad1ca0cc7
docker stats 7b4ad1ca0cc7
查看容器的具体信息,会以json格式返回包括容器id、创建时间、路径、状态、镜像、配置等信息。
查看容器内进程,会打印包括PID、用户、时间、命令等。
查看统计信息,会显示CPU、内存、存储、网络等使用情况的统计信息。
其他容器命令
复制文件:docker [container] cp 路径 容器:路径,命令:
docker cp my-git.tar 7b4ad1ca0cc7:/tmp/.
查看变更:docker [container] diff CONTAINER,命令:
docker diff 7b4ad1ca0cc7
查看端口映射: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 [container] update命令可以更新容器的一些运行时配置,主要是一些资源限制份额。
例如,限制总配额为1秒,容器所占用时间为10%,命令如下
docker update –cpu-quota 1000000 7b4ad1ca0cc7
docker update –cpu-period 100000 7b4ad1ca0cc7
具体可以修改哪些配置看
docker update --help