1. docker简介和核心概念

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

2. 为什么需要使用到容器

1. 传统服务部署,维护相对繁琐。
2. 资源利用存在浪费
3. 扩容、缩容不够及时
4. 服务器迁移,维护相对繁琐
5. 集群环境一致性差
6. 无法应用突发流量
7. 弹性伸缩
docker的出现能够改善以上问题。

3.docker是什么

1. docker是一个开源的容器引擎
2. 一个操作系统级的虚拟化技术
3. 依赖于系统内核的特性,实现: 1. namespace{资源隔离} 2. cgroup{资源限制}
4. docker也是一个简单的应用程序打包工具。可以将程序封装好,通过docker自身的导出导入能力为迁移提供保障
5. 多环境一致性。docker的出现,从根本解决了环境一致性问题,它能够将环境必备的程序打包到一个容器中,提供他人使用

4.容器和虚拟机区别

VM:   硬件-->操作系统-->虚拟机管理程序-->虚拟机-->操作系统-->服务程序

docker:   硬件-->操作系统-->docker-->服务程序

5.docker适合于哪些应用场景

1. 应用程序打包[能够保证所打包的程序在另一个docker环境中完美运行]
2. 应用程序隔离
3. 持续集成
4. 部署微服务
5. 快速搭建一个测试环境
6. 提供平台及服务

6. 安装docker

1. yum安装
#源添加
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum clean all
yum install -y bash-completion.noarch # 安装指定版版本
yum -y install docker-ce-18.09.9-3.el7 #也可以查看版本安装
yum list docker-ce --showduplicates | sort -r #启动docker
systemctl enable docker
systemctl start docker
systemctl status docker 2. 离线版安装
#官方下载docker
https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz
#个人网站下载:
https://www.chenleilei.net/soft/docker/docker-19.03.9.tgz tar zxvf docker-19.03.9.tgz
mv docker/* /usr/bin #加入systemd
#--------------------------------------------------------
cat > /usr/lib/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF
#-------------------------------------------------------- #创建配置文件
mkdir /etc/docker
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF #个人docker源:
#这个是阿里云配置的加速,直接添加阿里云加速源就可以了,上面显示了配置办法。
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors #设置开机启动和启动即可
systemctl enable docker
systemctl start docker

7. docker镜像

镜像是一个分层存储的文件,不是一个单一文件

一个软件环境

一个镜像可以创建多个容器

一个标准化的交付概念

一个不包含Linux欸和且精简的Linux操作系统

8. docker常用命令

# 查看命令:
docker ps #查看已运行中的容器
docker ps -a #查看所有容器
docker history [容器ID] #查看容器层级
docker image ls #列出镜像,等同于 docker images
docker build #使用dockerfile构建镜像 如:docker build -t nginx-test-v001 -f dockerfile-nginx .
docker inspect [容器ID] #查看一个容器的详细信息。 #容器删除
docker rm [容器id] #删除容器
docker rmi [容器id] #删除容器同时删除镜像 # 运行命令:
docker run #运行一个容器
-d #后台运行,然后返回该容器ID
-t #分配一个tty终端
-i #以交互模式运行容器,通常与 -t 同时使用 # 清除镜像
docker image prune #移除没有使用得镜像,并提示
docker image prune -a #移除所有没有被使用的镜像 # 推送镜像
docker push #其他指令
docker tag 给一个镜像打标签,用于推送镜像到私有仓库
docker export 导出容器文件系统到tar包。 如: docker export 1e682c585342 >dashboard.tar.gz [用的不多]
docker import 导入容器文件系统tar包。 [这个指挥导出容器里的内容 不会导出整个系统,docker export也是如此]
docker save 保存一个或多个[镜像]到tar包 #常用 用法: docker save nginx >nginx.tar
docker load 导入一个docker的[镜像]tar包 #常用 用法: docker load < nginx.tar
docker info 查看docker版本信息 docker search nginx 搜索镜像
docker pull nginx 下载镜像
## 停止容器
docker stop 容器名 一次性停止所有容器
docker stop $(docker ps -a -q) ## 干掉容器
docker kill $(docker ps -a -q) #常用参数:
-v 挂载磁盘 [ -v 宿主机目录:容器目录 ] #进入容器
docker exec -it [容器id] bash #容器相关操作
docker run 运行一个容器
docker exec 进入一个容器
docker ps 查看运行的容器
docker ps -a 查看所有容器
docker stop 停止一个容器
docker start 启动一个容器
docker kill 关闭一个容器
docker rm 删除一个容器
docker rename 重命名一个容器 如:docker rename nginx nginx1
docker top 查看容器内运行进程信息
docker cp 拷贝容器中的文件 示例: docker cp nginx_leilei01:/etc/nginx/nginx.conf ./ docker pause 暂停一个容器:
docker unpause 恢复被暂停的容器 docker stats 显示容器的实时流资源使用统计信息 docker cp /root/1.txt 23er23rs:/www 拷贝文件到docker中,可通过: docker exec nginx1 ls /tmp 查看 #挂载目录和文件
-v /leilei:/usr/share/nginx/html
-v /leilei/nginx.conf:/usr/share/nginx/conf/nginx.conf #指定映射端口
-p 90:80 #将80端口映射到公网90端口 默认随机端口是从/etc/sysctl.conf中定义的随机端口范围.
-P #大写P 映射为随机端口.

9. docker创建容器选项

10. docker资源限制

-m,-memory     设定最大内存量 如: -m='512m'
-memory-swap 允许交换分区的大小
-memory-swappiness=<0-100> 允许使用脚本分区的大小0-100 默认禁用 -1
-oom-kill-disbale #禁用oom
--cpus #限制容器使用的cpu数量
--cpuset-cpus #限制容器使用那些核心,如: 0-3 0,1
--cpu-shares #cpu共享 #查看限制:
docker stats
[root@k8s-master1 ~]# docker stats [id]
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
359042c33b3d zealous_napier 0.00% 1.387MiB / 2.922GiB 0.05% 1.3kB / 0B 0B / 0B 2 资源限制的例子:
#只用一个半cpu
docker run -d --name nginx01 --cpus='1.5' nginx #最多使用50%cpu
docker run -d --name nginx02 --cpus=".5" nginx #允许最多使用500M内存和100mswap,禁用oom
docker run -d --name nginx03 --memory="500m" --memory-swap="600m" --oom-kill-disable nginx 资源扩容:
[对已创建的容器进行在线扩容(仅支持一部分)]
docker update

11. docker namespace

Linux内核在2.4.19版本开始引入namespace概念,它是将特定的全局系统资源通过抽象方法让namespace中的进程看起来拥有自己隔离的资源。 docker借助该机制实现的容器资源隔离。
namespace的6中不同命名空间:
IPC: 隔离进程间通信
MOUNT: 隔离文件系统挂载点
NET: 隔离网络协议栈
PID: 隔离进程号,进程命名空间是一个父子结构,子空间对父空间可见
USER: 隔离用户
UTC: 隔离主机名和域名

12. docker CGroups

namespace不会对资源进行限制,如CPU 内存等,如果CPU被频繁调用,它会影响到其他容器的CPU资源。
此时,引入了 CGroups 用于限制容器资源。
cgoups: 所有的人物就是运行在系统的第一个进程,而cgroups以某种标准将一组进程为目标进行资源分配和控制。
例如: cpu 内存 宽带 并且可以动态配置。
cgoups主要功能:
1. 限制进程组使用的资源数量。 设定进程组资源使用上限,例如:限制内存
2. 进程组优先级控制,可以为进程组分配特定的CPU,磁盘I/O吞吐量
3. 记录进程组使用的资源数量: 例如,使用记录某个进程组使用的CPU时间
4. 进程组控制(control): 可以将进程组挂起和恢复

13. docker数据持久化:

1. 搜索镜像
2. 挂载宿主机三个文件: hostname hosts resolv.conf
3. 挂载容器目录 /var/lib/docker/containers

数据持久化:

volumes: docker 管理宿主机文件系统的一部分(/var/lib/docker/volumes) 保存数据最佳方式。
bind mounts:将宿主机上的任意位置文件或者目录挂载到容器中。
tmpfs : 很少用。 挂载存储在主机的内存中,不会写入到主机的文件系统。

13.1 volume持久化方案:

1. 创建volume:
[root@k8s-master1 ~]# docker volume create nginx-volume
nginx-volume
2. 检查volume目录:
[root@k8s-master docker]# docker inspect nginx-volume
[
{
"CreatedAt": "2020-07-05T14:08:27+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/nginx-volume/_data",
"Name": "nginx-volume",
"Options": null,
"Scope": "local"
}
] 2. 使用volume:
第一种方法:
docker run -d -p 80:80 --name=nginx-test --mount src=nginx-volume,dst=/usr/share/nginx/html nginx 第二种方法:
docker run -d -p 80:80 --name=nginx-test -v nginx-volume:/usr/share/nginx/html nginx 3. volume清理办法:
docker stop nginx-test
docker rm nginx-test
docker volume rm nginx-volume 例子:
docker volume create nginx-volume
docker inspect nginx-volume |grep 'Mountpoint' 获取volume目录。
1.方法1 bindmount挂载:
docker run -d -p 80:80 --name=nginx-test --mount type=bind,src=nginx-volume,dst=/usr/share/nginx/html nginx
2.方法2 挂载[常用]:
docker run -d -p 80:80 --name=nginx-test -v nginx-volume:/usr/share/nginx/html nginx
两种方法都是将nginx-volume挂载容器中的网页目录中: /usr/share/nginx/html 检查:
[root@k8s-master docker]# ls /var/lib/docker/volumes/nginx-volume/_data
50x.html index.html
修改:
echo chenleilei01 > /var/lib/docker/volumes/nginx-volume/_data/index.html 注意:
bindmount挂载的方式: 如果容器目录非空,则该目录内容会被隐藏,从而使用宿主机目录覆盖容器中的网页目录
volume挂载方式: docker管理宿主机文件系统的一部分。组词杭甬的数据保存方式。

13.2 bind mount持久化数据方式:

1. 创建volume:
[root@k8s-master1 ~]# docker volume create nginx-volume
nginx01-volume
2. 检查volume目录:
[root@k8s-master docker]# docker inspect nginx-volume
[
{
"CreatedAt": "2020-07-05T14:08:27+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/nginx-volume/_data",
"Name": "nginx-volume",
"Options": null,
"Scope": "local"
}
]
3. 使用bindmount挂载
docker run -d -p 80:80 --name=nginx-test --mount type=bind,src=nginx01-volume,dst=/usr/share/nginx/html nginx

14. docker核心组件之间关系

docker deamon: docker的守护进程,负责与docker client交互,并管理镜像和容器
containerd: 是一个简单的守护进程,向上给docker daemon提供接口,向下通过containerd-shim结合runC管理创建容器。
runC: 一个命令行工具,它根据OCI标准来创建容器和运行容器

总结:

namespace: 一个命名空间,Linux内核提供的一种对资源隔离的机制。 如隔离进程 网络 挂载点等资源
cgroups: Linux内核提供的一种对进程组限制的机制,如: cpu 内存等。
unionfs: 联合文件挂在系统。 支持不同位置的目录挂载到同一个虚拟文件系统,并形成一种分层的模型。

docker创建容器数据持久化资源限制基础命令的更多相关文章

  1. docker 系列 - 容器数据持久化和数据共享

    docker 主要有两种数据存储形式, 一种是storage driver(也叫做 Graph driver), 另一种是 volume driver. stroage driver主要是存储那些无状 ...

  2. docker之容器数据持久化

    1.挂载本地目录为容器的数据存放目录 [root@node03 ~]# docker run -itd --name web01 -v /container_data/web:/data ubuntu ...

  3. Docker 容器数据 持久化(系统学习Docker05)

    写在前面 本来是可以将数据存储在 容器内部 的.但是存在容器内部,一旦容器被删除掉或者容器毁坏(我亲身经历的痛,当时我们的大数据平台就是运行在docker容器内,有次停电后,不管怎样容器都起不来.以前 ...

  4. Docker深入浅出系列 | 容器数据持久化

    Docker深入浅出系列 | 容器数据持久化 Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干货,会 ...

  5. Docker自学纪实(三)Docker容器数据持久化

    谈起数据卷 我一直觉得是个枯燥无聊的话题 但是通过今天的实操和阅读 我发现其实并不是 其实就像走夜路 没有光明,第一次都是恐惧 但是如果走的次数多了 或者静下心来去克制恐惧 也许就会驾轻就熟或者等到黎 ...

  6. Docker Swarm volume 数据持久化

    Docker Swarm volume 数据持久化 volume 是将宿主级的目录映射到容器中,以实现数据持久化. 可以用两种方式来实现: volume 默认模式:工作节点宿主机数据同步到容器内. v ...

  7. Docker Swarm bind 数据持久化

    Docker Swarm bind 数据持久化 bind:主要将工作节点宿主级文件或目录,同步挂载到容器中. 环境: 系统:Centos 7.4 x64 应用版本:Docker 18.09.0 管理节 ...

  8. Docker 创建容器 查看容器状态 - 三

    Docker 创建容器 1.拉取镜像 默认是 docker.io 仓最新镜像 docker pull tomcat 2.运行一个服务容器 docker run -d -p 0.0.0.0:18080: ...

  9. docker 创建容器的时候的坑

    其实这个题目的话,对于我后面陈述的问题发生的本身并没有太多的联系,但是因为是在docker创建容器的操作之内发生的,所以记录以下 因为网上有些文章有些作者喜欢使用git的命令窗体,说实在的,公司里面用 ...

  10. docker 创建容器时指定容器ip

    Docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定. 在实际部署中,我们需要指定容器ip,不允许其自行分配ip,尤其是搭建集群时,固定ip是必须的. 我们可以创建自己的bri ...

随机推荐

  1. Spring Boot 版本 GA、RC、beta等含义

    GA General Availability,正式发布的版本,官方开始推荐广泛使用,国外有的用GA来表示release版本. RELEASE 正式发布版,官方推荐使用的版本,有的用GA来表示.比如s ...

  2. Matplotlib Installing an official release from resources 源码安装Matplotlib官方版本

    Installation Installing an official release Matplotlib releases are available as wheel packages for ...

  3. k8s 深入篇———— k8s 的pod[五]

    前言 简单整理一下pod的相关知识. 正文 为什么我们需要pod. 前面我们知道了k8s一个最重要的作用是解决容器的编排功能,那么为什么有一个pod的东西. 这就是实际中遇到的问题. 那就是容器和容器 ...

  4. python 代码编写环境及编辑器配置

    前言 关于python 环境编辑器的配置. 正文 第一步:python解释器,到网上下载安装下就行. 网址:https://www.python.org/downloads/windows/ 值得注意 ...

  5. Docker安装使用--Centos

    目录 前言 Docker安装使用 安装步骤 卸载旧版本 安装utils 配置utils的存储库 安装Docker 安装指定版本Docker 验证安装 官网安装说明 阿里云镜像加速 Docker使用 帮 ...

  6. 2019-8-31-C#-转换类型和字符串

    title author date CreateTime categories C# 转换类型和字符串 lindexi 2019-08-31 16:55:58 +0800 2018-2-13 17:2 ...

  7. mybatis插件generator使用生成错误问题Execution default-cli of goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate failed: Exception getting JDBC Driver

    使用插件除了其他回答的路径等问题,我遇到的把jar版本换一下就成了 把5点几的换成8点几的就好使了

  8. SuperSonic简介

    SuperSonic融合ChatBI和HeadlessBI打造新一代的数据分析平台.通过SuperSonic的问答对话界面,用户能够使用自然语言查询数据,系统会选择合适的可视化图表呈现结果. Supe ...

  9. Consul启动闪退

    一.问题概述 在Windows10下载了consul,解压完后,点击consul.exe出现闪退,其实闪退也不影响使用 二.解决方案 方案1: 按理说第一种方法就可以解决问题:在环境变量的系统变量中的 ...

  10. 《最新出炉》系列入门篇-Python+Playwright自动化测试-45-鼠标操作-下篇

    1.简介 鼠标为我们使用电脑提供了很多方便,我们看到的东西就可以将鼠标移动过去进行点击就可以打开或者访问内容,当页面内容过长时,我们也可以使用鼠标滚轮来实现对整个页面内容的查看,其实playwrigh ...