[TOC]
## 一 命令格式
docker的命令分老版命令格式和新版命令格式,新版命令主要是更直观了,添加了镜像[image]和容器[container]来区分命令,简单举例对比:
1. 显示容器命令
老版命令:`docker ps`
新版命令:`docker container ls`
2. 显示镜像命令
老版命令: `docker images `
新版命令: `docker image ls`
3. 删除镜像命令
老版命令: `docker rmi centos:latest`
新版命令: `docker image rm centos:latest`
## 二 镜像相关命令
### 1.搜索镜像:
`docker search xxx
`
选镜像的建议:优先考虑官方镜像,然后是`starts`数量多的镜像
### 2.拉取/推送镜像:
1. 拉取镜像到本地
`docker image pull centos`
2. 推送centos镜像到仓库
` docker image push centos`
### 3. 镜像加速器
在`/etc/docker/daemon.json
`文件中写上仓库和地址,详见docker部署章节
### 4. 查看/删除镜像
1. 查看镜像
`docker image ls`
2. 删除镜像
`docker image rm centos`
### 5. 导入导出镜像
1. 导出镜像
`docker image save centos > docker-centos7.4.tar.gz
`
2. 导入镜像
`docker image load -i docker-centos7.4.tar.gz
`
## 三 容器相关命令
### 1. 创建启动容器
1. 创建容器并启动
```sh
#创建并启动容器
docker container run -d -p 80:80 nginx:latest {cmd}
#单独创建容器
docker container create -p 80:80 nginx
#单独启动容器
docker container start -d 容器ID|容器名
```
2. 常规参数
| 参数名 | 功能 | 不带此参数时 |
| --- | --- |--- |
| -d | 将容器放在后台运行 | 前台运行,会占用终端 |
| -p | 进行端口映射 | 有些复杂,单独说明 |
| -it | 分配新终端并进入容器 | 不会进入容器内部 |
| --name | 指定容器的名字 | 随机命名 |
| cmd | 覆盖容器的初始命令 | 使用容器的初始命令 |
| --cpus | 限定cpu的权重 | 不限制 |
| -memory | 限定内存的大小 | 不限制 |
| -h | 指定容器的主机名 | 以容器端ID命名 |
### 2. 停止删除容器
1. 停止容器
`docker container stop 容器ID|容器名`
2. 杀死容器
`docker container kill 容器ID|容器名`
3. 删除容器
`docker container rm 容器ID|容器名
`
4. 批量删除容器
`docker container rm -f $(docker container ls -a -q)
`
### 3. 查看容器
1. 查看容器
```sh
#查看运行中的容器
docker container ls
#查看所有容器
docker container ls -a
```
2. 查看指定容器详细信息
以下命令可以查看容器的超详细信息,以json格式显示
`docker container inspect 容器ID|容器名`
### 4. 进入容器的方法
进入容器的目的:排错,调试
1. attach 方法[不常用]
`docker container attach [OPTIONS] 容器ID|容器名`
此方法会是进入容器当前终端,会实时打印容器的输出信息,退出很麻烦[Ctrl+p Ctrl+q ],容易按成[Ctrl+c]导致容器被关闭
2. exec方法
`docker container exec [OPTIONS] 容器ID|容器名 {命令}`
常用`docker exec -it xxx /bin/bash
`的方法打开新终端进入容器
## 四 端口映射
### 1.docker容器为什么要使用端口映射
默认情况下,容器使用的ip网段是172.17.0.0/16,外界的用户只能访问宿主机的10.0.0.0/24网段,无法访问172.17.0.0/16网段。
而我们运行容器的目的,是希望运行在容器中的服务,能够被外界访问,这里就涉及到了外网10.0.0.0/24到容器内网172.17.0.0/16网段的转换,所以需要做端口映射。
### 2.docker容器端口映射的方法
docker 的端口映射是通过自动添加一条iptables规则实现的
1. 指定映射端口
| 语法 | 举例 | 说明 |
| --- | --- |--- |
| -p hPort:cPort | -p 8800:80 | 主机8800映射容器80 |
| 同上,指定多个-p | -p 81:80 -p 443:443 | 一次映射多个端口 |
| -p ip:hPort:cPort| -p 10.0.0.11:8800:80 | 指定主机IP |
| -p crPort| -p 80 | 随机端口映射容器80 |
| -p ip::crPort| -p 10.0.11::80 | IP指定,主机端口随机 |
| -p hPort:cPort:udp| -p 8800:80:udp | 默认tcp映射,改为UDP |
2. 完全随机映射
`docker run -P `
将`dockerfile`创建镜像时指定的,需要映射出来的内网端口,做外网随机映射
## 五 docker资源限额
一个 docker host 上会运行若干容器,每个容器都需要 CPU、内存和 IO 资源,Docker 提供了资源限制的机制避免某个容器因占用太多资源而影响其他容器乃至整个 host 的性能。
### A. 内存限额
与操作系统类似,容器可使用的内存包括两部分:物理内存和 swap。
1. `-m` 或 `--memory`:设置内存的使用限额,例如 100M, 2G。
2. `--memory-swap`:设置 **内存+swap** 的使用限额。
3. 默认情况下都为为 -1,即对容器内存和 swap 的使用没有限制。
4. 如果只指定 `-m` 参数,那么 `--memory-swap` 默认为 `-m` 的两倍
命令案例:
```sh
docker run -m 200M --memory-swap=300M ubuntu
```
允许该容器最多使用 200M 的内存和 100M 的 swap。
### A1 动态修改内存限额
动态修改运行中的容器内存限额,需要用到`update`参数,并且不能只修改内存限制,需要同步修改swap限制,否则会报错,报错详见:
[参考链接](https://my.oschina.net/Kanonpy/blog/2209207)
```sh
docker update --memory 2048m --memory-swap -1 gitlab
```
### B. cpu限额
通过 `-c` 设置的 cpu share 并不是 CPU 资源的绝对数量,而是一个相对的权重值。某个容器最终能分配到的 CPU 资源取决于它的 cpu share 占所有容器 cpu share 总和的比例。
1. 默认所有容器可以平等地使用 host CPU 资源 ,并且没有限制。
2. 通过 `-c` 或 `--cpu-shares` 设置容器使用 CPU 的权重。
3. 如果不指定,默认值为 1024。
4. **通过 cpu share 可以设置容器使用 CPU 的优先级**。
案例:在 host 中启动了两个容器:
```sh
docker run --name "container_A" -c 1024 ubuntu
docker run --name "container_B" -c 512 ubuntu
```
container\_A 的 cpu share 1024,是 container\_B 的两倍。当两个容器都需要 CPU 资源时,container\_A 可以得到的 CPU 是 container\_B 的两倍。
>这种按权重分配 CPU 只会发生在 CPU 资源紧张的情况下。如果 container\_A 处于空闲状态,这时,为了充分利用 CPU 资源,container\_B 也可以分配到全部可用的 CPU。
### C. 磁盘限额
Block IO 指的是磁盘的读写,docker 可通过设置权重、限制 bps 和 iops 的方式控制容器读写磁盘的带宽,下面分别讨论。
> 目前 Block IO 限额只对 direct IO(不使用文件缓存)有效。
1. block IO 权重
默认情况下,所有容器能平等地读写磁盘,可以通过设置 `--blkio-weight` 参数来改变容器 block IO 的优先级。
`--blkio-weight` 与 `--cpu-shares` 类似,设置的是相对权重值,默认为 500。
在下面的例子中,container_A 读写磁盘的带宽是 container_B 的两倍。
```sh
docker run -it --name container\_A --blkio-weight 600 ubuntu
docker run -it --name container\_B --blkio-weight 300 ubuntu
```
2. 限制 bps 和 iops
bps 是 byte per second,每秒读写的数据量。
iops 是 io per second,每秒 IO 的次数。
* `--device-read-bps`,限制读某个设备的 bps。
* `--device-write-bps`,限制写某个设备的 bps。
* `--device-read-iops`,限制读某个设备的 iops。
* `--device-write-iops`,限制写某个设备的 iops。
下面这个例子限制容器写 /dev/sda 的速率为 30 MB/s
```sh
docker run -it --device-write-bps /dev/sda:30MB ubuntu
```
## 六 数据卷与挂载
### A.常见的docker数据卷命令
* 创建一个数据卷
`docker volume create
xxx`
* 查看数据卷列表
`docker volume ls
`
* 删除一个数据卷
`docker volume rm
`
* 查看一个数据卷的属性
`docker volume inspect
`
### B.数据卷与容器卷挂载
1. 绑定卷
```sh
docker run -d -p 80:80 -v /data/test/:/usr/share/nginx/html nginx
```
2. 容器管理卷
```sh
docker run -d -p 180:80 -v /usr/share/nginx/html nginx
docker run -d -p 380:80 -v noah-v1:/usr/share/nginx/html nginx
```
3. 容器卷
```sh
docker volume create noah-v2
docker run -d -p 801:80 --volumes-from vc_data nginx
```
- shell编程
- 变量1-规范-环境变量-普通变量
- 变量2-位置-状态-特殊变量
- 变量3-变量子串
- 变量4-变量赋值三种方法
- 变量5-数组相关
- 计算1-数值计算命令和案例
- 计算2-expr命令举例
- 计算3-条件表达式和各种操作符
- 计算4-条件表达式和操作符案例
- 循环1-函数的概念与作用
- 循环2-if与case语法
- 循环3-while语法
- 循环4-for循环
- 其他1-判断传入的参数为0或整数的多种思路
- 其他2-while+read按行读取文件
- 其他3-给输出内容加颜色
- 其他4-shell脚本后台运行知识
- 其他5-6种产生随机数的方法
- 其他6-break,continue,exit,return区别
- if语法案例
- case语法案例
- 函数语法案例
- WEB服务软件
- nginx相关
- 01-简介与对比
- 02-日志说明
- 03-配置文件和虚拟主机
- 04-location模块和访问控制
- 05-status状态模块
- 06-rewrite重写模块
- 07-负载均衡和反向代理
- 08-反向代理监控虚拟IP地址
- nginx与https自签发证书
- php-nginx-mysql联动
- Nginx编译安装[1.12.2]
- 案例
- 不同客户端显示不同信息
- 上传和访问资源池分离
- 配置文件
- nginx转发解决跨域问题
- 反向代理典型配置
- php相关
- C6编译安装php.5.5.32
- C7编译php5
- C6/7yum安装PHP指定版本
- tomcxat相关
- 01-jkd与tomcat部署
- 02-目录-日志-配置文件介绍
- 03-tomcat配置文件详解
- 04-tomcat多实例和集群
- 05-tomcat监控和调优
- 06-Tomcat安全管理规范
- show-busy-java-threads脚本
- LVS与keepalived
- keepalived
- keepalived介绍和部署
- keepalived脑裂控制
- keepalived与nginx联动-监控
- keepalived与nginx联动-双主
- LVS负载均衡
- 01-LVS相关概念
- 02-LVS部署实践-ipvsadm
- 03-LVS+keepalived部署实践
- 04-LVS的一些问题和思路
- mysql数据库
- 配置和脚本
- 5.6基础my.cnf
- 5.7基础my.cnf
- 多种安装方式
- 详细用法和命令
- 高可用和读写分离
- 优化和压测
- docker与k8s
- docker容器技术
- 1-容器和docker基础知识
- 2-docker软件部署
- 3-docker基础操作命令
- 4-数据的持久化和共享互连
- 5-docker镜像构建
- 6-docker镜像仓库和标签tag
- 7-docker容器的网络通信
- 9-企业级私有仓库harbor
- docker单机编排技术
- 1-docker-compose快速入门
- 2-compose命令和yaml模板
- 3-docker-compose命令
- 4-compose/stack/swarm集群
- 5-命令补全和资源限制
- k8s容器编排工具
- mvn的dockerfile打包插件
- openstack与KVM
- kvm虚拟化
- 1-KVM基础与快速部署
- 2-KVM日常管理命令
- 3-磁盘格式-快照和克隆
- 4-桥接网络-热添加与热迁移
- openstack云平台
- 1-openstack基础知识
- 2-搭建环境准备
- 3-keystone认证服务部署
- 4-glance镜像服务部署
- 5-nova计算服务部署
- 6-neutron网络服务部署
- 7-horizon仪表盘服务部署
- 8-启动openstack实例
- 9-添加计算节点流程
- 10-迁移glance镜像服务
- 11-cinder块存储服务部署
- 12-cinder服务支持NFS存储
- 13-新增一个网络类型
- 14-云主机冷迁移前提设置
- 15-VXALN网络类型配置
- 未分类杂项
- 部署环境准备
- 监控
- https证书
- python3.6编译安装
- 编译安装curl[7.59.0]
- 修改Redhat7默认yum源为阿里云
- 升级glibc至2.17
- rabbitmq安装和启动
- rabbitmq多实例部署[命令方式]
- mysql5.6基础my.cnf
- centos6[upstart]/7[systemd]创建守护进程
- Java启动参数详解
- 权限控制方案
- app发包仓库
- 版本发布流程
- elk日志系统
- rsyslog日志统一收集系统
- ELK系统介绍及YUM源
- 快速安装部署ELK
- Filebeat模块讲解
- logstash的in/output模块
- logstash的filter模块
- Elasticsearch相关操作
- ES6.X集群及head插件
- elk收集nginx日志(json格式)
- kibana说明-汉化-安全
- ES安装IK分词器
- zabbix监控
- zabbix自动注册模板实现监控项自动注册
- hadoop大数据集群
- hadoop部署
- https证书
- certbot网站
- jenkins与CI/CD
- 01-Jenkins部署和初始化
- 02-Jenkins三种插件安装方式
- 03-Jenkins目录说明和备份
- 04-git与gitlab项目准备
- 05-构建自由风格项目和相关知识
- 06-构建html静态网页项目
- 07-gitlab自动触发项目构建
- 08-pipelinel流水线构建项目
- 09-用maven构建java项目
- iptables
- 01-知识概念
- 02-常规命令实战
- 03-企业应用模板
- 04-企业应用模板[1键脚本]
- 05-企业案例-共享上网和端口映射
- SSH与VPN
- 常用VPN
- VPN概念和常用软件
- VPN之PPTP部署[6.x][7.x]
- 使用docker部署softether vpn
- softEther-vpn静态路由表推送
- SSH服务
- SSH介绍和部署
- SSH批量分发脚本
- 开启sftp日志并限制sftp访问目录
- sftp账号权限分离-开发平台
- ssh配置文件最佳实践
- git-github-gitlab
- git安装部署
- git详细用法
- github使用说明
- gitlab部署和使用
- 缓存数据库
- zookeeper草稿
- mongodb数据库系列
- mongodb基本使用
- mongodb常用命令
- MongoDB配置文件详解
- mongodb用户认证管理
- mongodb备份与恢复
- mongodb复制集群
- mongodb分片集群
- docker部署mongodb
- memcached
- memcached基本概念
- memcached部署[6.x][7.x]
- memcached参数和命令
- memcached状态和监控
- 会话共享和集群-优化-持久化
- memcached客户端-web端
- PHP测试代码
- redis
- 1安装和使用
- 2持久化-事务-锁
- 3数据类型和发布订阅
- 4主从复制和高可用
- 5redis集群
- 6工具-安全-pythonl连接
- redis配置文件详解
- 磁盘管理和存储
- Glusterfs分布式存储
- GlusterFS 4.1 版本选择和部署
- Glusterfs常用命令整理
- GlusterFS 4.1 深入使用
- NFS文件存储
- NFS操作和部署
- NFS文件系统-挂载和优化
- sersync与inotify
- rsync同步服务
- rsyncd.conf
- rsync操作和部署文档
- rsync常见错误处理
- inotify+sersync同步服务
- inotify安装部署
- inotify最佳脚本
- sersync安装部署
- 时间服务ntp和chrony
- 时间服务器部署
- 修改utc时间为cst时间
- 批量操作与自动化
- cobbler与kickstart
- KS+COBBLER文件
- cobbler部署[7.x]
- kickstart部署[7.x]
- kickstar-KS文件和语法解析
- kickstart-PXE配置文件解析
- 自动化之ansible
- ansible部署和实践
- ansible剧本编写规范
- 配置文件示例
- 内网DNS服务
- 压力测试
- 压测工具-qpefr测试带宽和延时