飞行日志
常用链接
韭菜搞钱
三省吾身
知行合一
📚读书笔记:docker入门
type
status
date
slug
summary
tags
category
icon
password
1. 学习内容
2. Docker 概述
- Docker 公司发展历程
- 和 Google 的爱恨情仇
- Docker 与 CNCF 的关系
3. Docker 安装
3.1. 基本组成
三大基本概念:容器、镜像、仓库
3.2. 安装方法
3.2.1. 官网文档
3.2.2. 发行版安装
- CentOS
- Ubuntu
3.3. 二进制安装
3.4. 卸载
3.5. 阿里云安装
3.5.1. 官方脚本安装
3.5.2. 手动安装
- CentOS
- Ubuntu
此外,阿里云还有 镜像加速 功能,需要账号并登录。
3.6. 安装检测
3.7. 底层原理
- docker 为什么比 VM 快
- docker 与虚拟机的区别
4. Docker 常用命令
4.1. 帮助命令
- docker 命令
- docker version
- docker info
- docker 命令 --help
- 官网 https://docs.docker.com/engine/reference/commandline
4.2. 镜像命令
docker images:查看当前镜像
docker search:搜索镜像
docker pull:拉取镜像
docker rmi:删除镜像
比如:递归删除 docker 镜像 => docker rmi -f $(docker images -qa)
4.3. 容器命令
docker run:运行命令
docker ps:查看命名
docker stop:停止容器
docker rm:删除容器
4.4. 其他常用命令
docker run -d:后台运行
docker logs -t --tail n ID:获取容器日志
docker top ID:获取容器进程
docker inspect ID:获取容器元数据
docker exec -it ID /bin/bash:进入正在运行的容器并执行 bash
docker attach ID:直接进入正在运行的容器
docker cp ID:/容器内文件 /主机路径:从容器中复制文件到宿主机
docker stats:查看容器状态
docker history:查看镜像构建历史
4.5. 可视化
- portainer
- Rancher
4.5.1. 什么是 portainer
图形化 Docker 管理工具,提供一个后台面板供我们操作!
访问 http://localhost:8088 即可,首次访问需要注册。
5. Docker 镜像
5.1. 镜像是什么
程序以及它所需的环境、运行库一块打包。
5.2. Docker镜像加载原理
- UnionFS(联合文件系统)
- Docker 镜像加载原理
5.3. 分层理解
docker 镜像每一层都是只读的,当 run 起来之后,会新建一个可读写的容器层,用户所有操作都是基这个层的。
5.4. Commit 镜像
6. 容器数据卷
6.1. 概念
满足对数据持久化和同步操作需求,将容器内目录挂载到宿主机上的一种技术,容器间也是可以数据共享的。
6.2. 使用数据卷
例如,将 CentOS 的 home 目录挂载到本地 /home/ceshi 目录:
6.3. 匿名挂载
当不指定主机路径时,采用的是匿名挂载:
6.4. 具名挂载
当提供卷名而不是路径时:
6.5. 物理路径
如果没有明确指定挂载目录,默认挂载目录可以通过 inspect 查看,默认在 /var/lib/docker/volumes 下:
- v 容器内路径:读写属性 ===>>> 匿名挂载
- v 卷名:容器内路径:读写属性 ===>>> 具名挂载(最常用)
- v /宿主机路径:容器内路径:读写属性 ===>>> 指定目录挂载
读写属性默认 rw,可以指定 ro;指定 ro 则数据卷必须有宿主机操作。
6.6. 数据卷容器
使用 --volumes-from 将容器的卷挂载到另一个容器上,是一个双向拷贝的过程。比如使用两个容器共享数据库:
6.7. 结论
容器之间的信息传递,数据卷容器的生命周期一直持续到没有容器使用为止。
一旦持久化到本地,将不会随容器销毁而删除。
7. Dockerfile
Dockerfile 就是构建 docker 的脚本。
7.1. 构建步骤
- 编写一个 dockerfile 文件,如果默认文件名为 Dockerfile,可不指定 -f 参数;
- docker build 成为一个镜像;
- docker run 运行镜像;
- docker push 发布镜像;
7.2. 基础知识
- 每个保留关键字必须大写;
- 执行从上到下的程序;
- #标识注释;
- 每条指令都会创建一个新的镜像层并提交;
7.3. 常用指令
- FROM:基础镜像
- MAINTAINER:维护者信息
- RUN:执行的操作
- ADD:添加内容,会自动解压
- WORKDIR:镜像的工作目录
- VOLUME:挂载的目录
- EXPOST:保留端口的配置
- CMD:启动时要运行的命令,只有最后一个生效
- ENTRYPOINT:启动时要运行的命令,可追加
- ONBUILD:当构建一个被继承的 Dockerfile 就会运行这个 ONBUILD
- COPY:类似 ADD,拷贝到容器中
- ENV:构建镜像时候的环境变量
7.4. 实战 1:简单测试
Dockerfile 名字可以随意,但是建议使用 Dockfile。
7.5. 实战 2:规范格式
尝试构建:
7.6. 实战 3:tomcat 应用
制作 Tomcat 镜像制作。
- 准备必要文件
首先下载必要的文件,包括:apache-tomcat-9.0.22.tar.gz,jdk-8u11-linux-x64.tar.gz。
创建说明文件 readme.txt,以及 Dockerfile 文件
- Dockerfile 文件内容
- 构建
由于 dockerfile 文件名是 Dockerfile,所以省略 -f DOCKER_FILE_PATH 参数
- 运行
curl localhost:9090
- 测试
可以编写一个 index.jsp,然后输出日志。通过浏览器访问,查看是否有日志打印。
7.7. 发布镜像
- 注册一个自己的账号: https://hub.docker.com
- 有密码且可以登录
docker login -u USERNAME
- 推送镜像,最好带上版本号
docker push DOCKER_ID/tomcat:0.1
8. Docker 网络
8.1. docker0 网络详解
结论:
Docker 使用的是 Linux 的桥接,宿主机中是一个 Docker 容器的网桥 docker0,最多可以分配 65535 个;
Docker 使用的网卡是 veth-pair 结束,创建删除都是成对操作的;只要删除
Docker 使用的所有的网络接口都是虚拟的,转发效率高;
8.2. 自定义网络
8.2.1. 工作方式
- host:使用宿主机
- container:基本不使用
- none:不使用
- bridge:默认
8.2.2. 创建网络
测试,进入container2内部:
8.2.3. 断开链接
移除网络要求所有容器关闭或者断开与此网络的链接:
9. Docker 小结
- Docker 镜像,run =》容器;
- DockerFile 构建镜像(服务打包);
- docker-compose 启动项目(编排多个服务/环境)
- Docker 网络
10. Docker Compose
一种通过编写 yaml 文件的方法来进行容器编排的技术。
10.1. 安装
一般 docker desktop 中已经会携带 docker-compose 命令,如果没有可以单独安装。
10.2. 步骤
基本的 compose 包含三个步骤:
- 使用 Dockerfile 定义 APP 的环境,以便于可以在任何地方重建;
- 在 docker-compose.yml 中定义 APP 的服务,以便可以绑定在一块运行;
- 运行 docker-compose up,使用 compose 会运行完整的 APP;
- 运行 docker-compose down 停止服务;
10.3. yaml 规则
学习方法:多写多看,查看官网,学习开源项目。
10.4. 开源项目
- 包含下载的项目下包含 docker-compose.yml
- 包含需要的 Dockerfile
- 选择前台运行、后台运行
docker-compose up
docker-compose up -d
- 重新打包
docker-compose up --build
11. Swarm 集群
11.1. 创建主节点
11.2. 加入其他节点
生成 token,然后将输出的命令复制到其他机器执行。
- 生成 woker 令牌
- 生成 manager 令牌
- 加入集群
11.3. Raft 协议
保证大多数机器的可用,至少需要 3 台主节点(manager)。
11.4. 实战示例
容器 =》服务 =》副本
只要学会创建集群、开启服务、实现扩缩容即可。
11.5. 概念总结
swarm:集群管理和编号,docker 可以初始化一个 swarm 集群,其他节点可以加入。(manager,worker)
node:就是一个 docker 节点,多个节点组成了网络集群。(manager,worker)
service:任务,可以在管理节点或者工作节点中运行,核心概念。
tasks:容器内的命令,细节任务。
12. Docker Stack
查看官网示例,基本已经被 k8s 淘汰。
13. Docker Secret
查看官网示例,基本已经被 k8s 淘汰。
14. Docker Config
查看官网示例,基本已经被 k8s 淘汰。
15. 扩展到 k8s
15.1. 云原生时代
- 必须掌握 Go 语言
Docker,K8S,etcd 均是由 Go 语言编写。
- CI / CD