Docker操作实践(3):Docker的操作详解
- 2019 年 10 月 11 日
- 笔记
如果你还没看过前面的内容:
一张图了解docker命令

上图摘自:
http://bingohuang.com/simplify-docker-image-2/
1. 概念介绍:
Images:docker镜像。可将容器转化为镜像,也可从镜像运行出一个个的容器实例。类似于虚拟机模板的概念。
Container:容器。
有runningstoppedpause三种状态,类似于虚拟机的概念。
Tar files:可以将镜像打包为tar文件,也可以将打包后的tar文件重新load为镜像
Dockerfile:构建镜像的声明式配置文件。Docker技术的核心亮点之一。当我们从一个基础镜像(centos镜像)构建一个另一个基础镜像(如java镜像)时,一般不会使用的在centos镜像中直接安装java的方式,而是将java软件与centos镜像放置于一起,在相同目录下编写好dockerfile,dockerfile中定义了java镜像安装的命令和环境配置参数等安装信息,然后使用docker build命令就可以将这些软件及配置文件打包成一个java镜像。这样做的好处就是通过这种声明式的构建方式最终构建了一个纯净的镜像文件。
Registry:镜像仓库。用于存储镜像文件。
Engine:docker引擎
2. 与Engine相关的命令
Docker version 查看docker版本
Docker info 显示 Docker 系统信息,包括镜像和容器数.
Docker events 从服务器获取实时事件
3. 与容器相关的命令
状态操作命令:
- 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 操作容器网络
4. 与镜像相关的命令
容器与镜像相关的操作命令:
- 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 列出镜像的构建历史
5. 与 tar files相关的命令
- Docker export 将容器导出tar文件
- Docker import 将tar文件load为镜像,会丢失相关的元数据和历史记录
- Docker load 将tar文件load为镜像
- Docker save 将镜像保存为tar文件
6. 与dockerfile相关的命令:
- Docker build 基于dockerfile构建镜像
7. 与Registry相关的命令:
镜像与仓库相关的命令:
Docker pull 从仓库下载镜像
Docker push 将镜像上传至仓库
仓库自身的命令:
Docker search 在仓库中查找某个镜像
Docker login 登录仓库
Docker logout 登出仓库
其他docker命令学习示意图
Docker命令学习示意图:

图片来源:https://blog.csdn.net/yuanfenger/article/details/73316481
Docker命令学习示意图:

图片来源:https://www.twblogs.net/a/5c290471bd9eee01606d2e41
Docker run命令简介
Docker run命令的作用在于从一个容器镜像生成一个容器实例并将其启动。
Docker run的主要命令参数如下:
主要参数 |
说明 |
|
---|---|---|
-d |
后台运行容器,并返回容器ID |
|
-i |
以交互模式运行容器,通常与 -t 同时使用 |
|
-t |
为容器重新分配一个伪输入终端,通常与 -i 同时使用 |
|
–name="nginx-lb" |
为容器指定一个名称 |
|
–dns 8.8.8.8 |
指定容器使用的DNS服务器,默认和宿主一致 |
|
-h "mars" |
指定容器的hostname |
|
-e username="tom" |
设置环境变量 |
|
-m |
设置容器使用内存最大值 |
|
–net="bridge" |
指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型 |
|
–link=[] |
添加链接到另一个容器 |
|
–expose=[] |
开放一个端口或一组端口 |
|
-p |
将一个docker主机的端口映射到容器中 |
|
-v |
将一个docker主机的目录映射到容器中 |
|
–ip |
为容器指定ip地址 |
Docker run命令关键参数说明
1. -i -t -d
使用docker run -it [IMAGE_NAME] 可以启动一个容器,并进入命令行交互界面:

使用exit可退出此容器
使用-d可以让容器在后台运行:

2. –ip
–ip可以为容器指定ip地址,先使用docker network ls查看主机上的docker网络:


使用–ip参数启动容器:

此时会报错,如果要使用自定义ip,只能使用自定义的容器网络。先创建自定义的容器网络:

也可以在创建时手动指定容器的子网:

重新运行指定容器ip的命令:

执行成功,查看容器ip地址:

3. -h –name
-h指定容器中的主机名,–name指定容器的名字


4. -p
-p 可以将主机上的端口映射到容器中。-p 8088:80 表示将主机的8088端口映射到容器的80端口上:


5. -v
–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

6. -m -c
-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个,情况如下:

作者:沈晓龙