Docker学习笔记

Docker

为什么使用容器

  1. 上线流程繁琐

开发->测试->申请资源->审批->部署->测试等环节

  1. 资源利用率低

普遍服务器利用率低,造成过多浪费

  1. 扩容/缩容不及时

业务高峰期扩容流程繁琐,上线不及时

  1. 服务器环境臃肿

服务器越来越臃肿,对维护、迁移带来困难

  1. 环境不一致性

Docker是什么

  • 使用最广泛的开源容器引擎
  • 一种操作系统级别的虚拟化技术
  • 依赖于Linux内核特性,Namespace(资源隔离)和Cgroups(资源限制)
  • 一个简单的应用程序打包工具

Docker应用场景

  • 应用程序打包和发布
  • 应用程序隔离
  • 持续集成
  • 部署微服务
  • 快速搭建测试环境
  • 提供PaaS产品(平台即服务)

Docker基本组成

  1. Docker Client(客户端)
  2. Docker Daemon(守护进程)
  3. Docker Image(镜像)
  4. Docker Container(容器)
  5. Docker Registry(仓库)

Docker镜像管理

镜像是什么

  • 一个分层存储的文件,不是一个单一的文件
  • 一个软件环境
  • 一个镜像可以创建N个容器
  • 一种标准化的交付
  • 一个不包含linux内核而又精简的linux操作系统

配置加速器

  1. 新建daemon文件
vim /etc/docker/daemon.json
  1. 编辑文件并输入一下内容
{
  "registry-mirrors": ["https://h8r0sjxo.mirror.aliyuncs.com"]
}
  1. 保存退出并重启docker服务

镜像常用管理命令

命令格式 docker image 【Command】
指令描述
ls列出镜像
build构建镜像来自Dockerfile
history查看镜像历史
inspect显示一个或多个镜像详细信息
pull从镜像仓库拉取镜像
push推送一个镜像到镜像仓库
rm移除一个或多个镜像
prune移除没有被标记或者没有任何容器引用的镜像
tag创建一个引用源镜像标记目标镜像
save保存一个或多个镜像到一个tar归档文件
load加载镜像来自tar归档或标准输入

Docker容器管理

创建容器常用选项

命令格式:docker run 【OPTIONS】 image 【Command】 【ARG】
选项(OPTIONS)描述
-i(-interactive)交互式
-t(-tty)分配一个伪终端
-d(-detach)运行容器到后台
-e(-env)设置环境变量
-p(-publish list)发布容器到端口主机
-P(-publish-all)发布容器所有EXPOSE的端口到宿主机随机端口
–name string指定容器名称
-h(-hostname)设置容器主机名
-ip string指定容器ip,只能用于自定义网络
–network连接容器到一个网络
-v(-volume list)将文件系统附加到容器
–restart string容器退出时的重启策略,默认no,可选值(always
-m(-memory)容器可以使用的最大内容
-memory-swap允许交换到磁盘的内存量
-memory-swappiness=<0-100>容器使用SWAP分区交换的百分比,默认为1
-oom-kill-disable禁用OOM Killer
–cpus可以使用CPU数量
-cpuset-cpus限制容器使用特定的CPU核心,如(0-3,0,1)
-cpu-sharesCPU共享

常用管理命令

命令格式:docker container Command
选项描述
ls列出容器
inspect查看一个或多个容器详细信息
exec在运行容器中执行命令
commit创建一个新镜像来自一个容器
cp拷贝文件/文件夹到一个容器
logs获取一个容器日志
port列出或指定容器端口映射
top显示一个容器运行的进程
stats显示容器资源使用统计
stop/start/restart停止/启动/重启一个或多个容器
rm删除一个或多个容器
prune移除已停止的容器

容器数据持久化

Docker提供两种方式将数据从书主机挂载到容器中:
1. volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式
2. bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中
volumes示例
# 创建数据卷
docker volumes create nginx-vol
docker volumes ls
docker volumes inspect nginx-val
# 使用数据卷
docker run -d --name=nginx-test --mount src=nginx-val,dst=/usr/share/nginx/html nginx
or 
docker run -d --name=nginx-test -v nginx-val:/usr/share/nginx/html nginx
bind mounts示例
# 挂载宿主机目录到容器
docker run -d --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
or 
docker run -d --name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx

容器网络

veth pair

成对出现的一种虚拟网络设备,数据从一端进,从另一端出。用于解决网络命名空间之间隔离

docker0

网桥是一个二层网络设备,通过网桥可以将Linux支持的不同的端口连接起来,并实现类似交换机那样的多对多的通信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值