今天是Docker讨论系列的终章,咱们先从docker的命令开始介绍,再说明Docker run命令关键参数。java
若是你还没看过前面的内容:sql
第一篇《容器的本质是什么?容器从何而来?》docker
第二篇《Docker的安装及架构介绍》数据库
上图摘自:http://bingohuang.com/simplify-docker-image-2/centos
Images:docker镜像。可将容器转化为镜像,也可从镜像运行出一个个的容器实例。相似于虚拟机模板的概念。服务器
Container:容器。网络
有running\stopped\pause三种状态,相似于虚拟机的概念。架构
Tar files:能够将镜像打包为tar文件,也能够将打包后的tar文件从新load为镜像分布式
Dockerfile:构建镜像的声明式配置文件。Docker技术的核心亮点之一。当咱们从一个基础镜像(centos镜像)构建一个另外一个基础镜像(如java镜像)时,通常不会使用的在centos镜像中直接安装java的方式,而是将java软件与centos镜像放置于一块儿,在相同目录下编写好dockerfile,dockerfile中定义了java镜像安装的命令和环境配置参数等安装信息,而后使用docker build命令就能够将这些软件及配置文件打包成一个java镜像。这样作的好处就是经过这种声明式的构建方式最终构建了一个纯净的镜像文件。ide
Registry:镜像仓库。用于存储镜像文件。
Engine:docker引擎
Docker version 查看docker版本
Docker info 显示 Docker 系统信息,包括镜像和容器数.
Docker events 从服务器获取实时事件
状态操做命令:
Docker start 从stop到running
Docker kill 从running到stop,直接kill容器进程
Docker stop 从running到stop,容器在中止前先完成一些保护性的动做以后再中止容器
Docker pause 暂停容器中全部的进程
Docker unpause 恢复容器中全部的进程
容器与镜像相关的操做命令:
Docker commit 将容器保存为一个新的镜像
Docker create 从镜像建立一个容器,该容器状态为stop
Docker run 从镜像建立一个容器并将该容器启动
Docker diff 检查自镜像运行以后,容器里文件结构的更改
容器与tar文件相关的操做命令:
Docker export 将容器导出为一个tar文件
容器自身的其余操做命令:
Docker inspect 获取容器/镜像的元数据
Docker attach 链接到正在运行中的容器
Docker port 列出指定的容器的端口映射
Docker ps 查看系统中的容器
Docker top 查看容器中运行的进程信息
Docker rm 删除容器
Docker logs 获取容器的日志
Docker wait 阻塞运行直到容器中止,而后打印出它的退出代码
Docker exec 在运行的容器中执行命令
Docker network 操做容器网络
容器与镜像相关的操做命令:
Docker commit 将容器保存为一个新的镜像
Docker create 从镜像建立一个容器,该容器状态为stop
Docker run 从镜像建立一个容器并将该容器启动
Docker diff 检查自镜像运行以后,容器里文件结构的更改
镜像与tar files相关的命令:
Docker import 将tar文件load为镜像,会丢失相关的元数据和历史记录
Docker load 将tar文件load为镜像
Docker save 将镜像保存为tar文件
镜像与dockerfile相关的命令:
Docker build 基于dockerfile构建镜像
镜像与仓库相关的命令:
Docker pull 从仓库下载镜像
Docker push 将镜像上传至仓库
镜像自身的命令:
Docker images 列举镜像
Docker rmi 删除镜像
Docker tag 为镜像打上标签
Docker inspect 列出镜像的详细信息
Docker history 列出镜像的构建历史
Docker export 将容器导出tar文件
Docker import 将tar文件load为镜像,会丢失相关的元数据和历史记录
Docker load 将tar文件load为镜像
Docker save 将镜像保存为tar文件
Docker build 基于dockerfile构建镜像
镜像与仓库相关的命令:
Docker pull 从仓库下载镜像
Docker push 将镜像上传至仓库
仓库自身的命令:
Docker search 在仓库中查找某个镜像
Docker login 登陆仓库
Docker logout 登出仓库
Docker命令学习示意图:
图片来源:https://blog.csdn.net/yuanfenger/article/details/73316481
Docker命令学习示意图:
图片来源:https://www.twblogs.net/a/5c290471bd9eee01606d2e41
Docker run命令的做用在于从一个容器镜像生成一个容器实例并将其启动。
Docker run的主要命令参数以下:
使用docker run -it [IMAGE_NAME] 能够启动一个容器,并进入命令行交互界面:
使用exit可退出此容器
使用-d可让容器在后台运行:
--ip能够为容器指定ip地址,先使用docker network ls查看主机上的docker网络:
使用--ip参数启动容器:
此时会报错,若是要使用自定义ip,只能使用自定义的容器网络。先建立自定义的容器网络:
也能够在建立时手动指定容器的子网:
从新运行指定容器ip的命令:
执行成功,查看容器ip地址:
-h指定容器中的主机名,--name指定容器的名字
-p 能够将主机上的端口映射到容器中。-p 8088:80 表示将主机的8088端口映射到容器的80端口上:
--privileged表示将对主机的文件更改的权限赋予此容器, -v 表示将主机的 /host/v1 目录映射给容器上的 /con/logs目录 ,若是容器中没有此目录,则会自动建立。执行命令
docker run -it --privileged -v /host/v1:/con/logs centos
在主机上的相应目录可看到容器中对该目录写入的内容
为容器挂载主机上的卷并设置容器只有对此卷的只读权限:
docker run -it –privileged -v /host/v1:/con/logs:ro centos
-m用来指定容器内存,-c可用于指定容器的cpu配额
咱们能够下载progrium/stress容器来测试容器的配额指定。使用如下命令查看该容器有哪些测试功能:
使用docker run -m 2000m可启动一个内存占用2000MB的容器,但该容器中未进行什么进程时,该容器并不会直接占用主机2000MB的内存。此时咱们能够启动stress容器,并使用--vm 1和 –vm-bytes 2000M表示启动stress容器时在其中启动一个占用内存2000M的进程:
若是咱们在一个总限额为2000MB的stress容器中启动3个占用500MB的进程,总共1500MB,那么状况以下:
在容器中是运行超过容器内存限额的进程的:
关于cpu限制,--cpu-share表示主机上运行的容器的cpu使用权重的定义。因为主机上有4个cpu核,全部需 --cpu 4参数在容器中启动4个进程以便将主机的cpu所有占满。
关于docker run中的 --cpus 参数,则是指定cpu的个数。当主机上有4个cpu时,容器只会使用总共1个cpu,也就是4分之1。
此数值也能够为小数,如0.5 ,那么容器只会使用此主机8分之1的cpu。
当数值与主机的cpu核数相同时,将可以使用此主机的全部cpu配额,能够看到4个cpu全满。
咱们能够启动5个占满cpu的进程而不是4个,状况以下:
做者:沈晓龙
Docker操做实践(1):容器的本质是什么?容器从何而来?