Docker
2023-09-06 19:36:43 0 举报
AI智能生成
登录查看完整内容
docker知识学习
作者其他创作
大纲/内容
镜像
Docker利用容器〈Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台
1.从面向对象角度
可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
2从镜像容器角度
容器
仓库(Repository)是集中存放镜像文件的场所。类似于Maven仓库,存放各种jar包的地方;github仓库,存放各种git项目的地方;Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云、网易云等
仓库
Docker基本组成
3. font color=\"#e74f4c\
总结: 解决了font color=\"#e74f4c\
为什么使用docker
子主题
docker理念
虚拟机就是带环境安装的一种解决方案
它可以在一种操作系统里面运行另一种操作系统,比如在window10 系统里运行Linux系统CentOS7 ,应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部门毫无影响,这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件之间的逻辑不变
虚拟机和容器区别
传统的应用开发完成后,需要一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行,Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。
1. 更快速的应用交付和部署
随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样, 每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天升级变成分钟甚至秒级
2. 更便捷的升级和扩缩容
应用容器化运行后,生产环境运行的应用可与开发,测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG,当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。
3. 更简单的系统运维
Docker 是内核级虚拟化, 其不像传统的虚拟化技术一样需要额外的Hyperisor支持,所以在一台物理机上可以运行多个容器实例。可大大提升物理服务器的CPU和内存的利用率。
4. 更高效的计算资源利用
一次构建,随处运行
能干嘛
docker简介
Docker 容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化,与传统的虚拟机相比,Docker优势体现为启动速度快,占用体积小
docker优势
1. 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上在运行所需应用进程
2. 容器内的应用进程直接运行与宿主的内核, 容器内没有自己的内核且也没有进行硬件虚拟,因此容器要比传统虚拟机更为轻便
3. 每个容器之间相互隔离, 每个容器由自己的文件系统, 容器之间进程不会相互影响
docker和虚拟机区别
Docker基础
1. Docker 安装
2. 安装条件
概念
1. 镜像
2. 容器
3. 仓库
4. 优势
Docker本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是一个image镜像文件。只有通过这个镜像文件才能生成Docker容器实例(类似java中new出来的一个对象)。
image文件可以看作是容器的模板。Docker根据image文件生成容器实例。同一个image文件,可以生成多个同时运行的容器实例。
1. 需要正确的理解仓库、镜像、容器这几个概念
image 文件生成的容器实例,本身也是一个文件,称为镜像文件
2. 镜像文件
一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器
3. 容器实例
就是放一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候子啊从仓库中拉下来就可以了。
4. 仓库
5. 总结
3. Docker 三要素
简图
4. 平台架构图解(简约版)
Docker 是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令运行子啊主机上的容器。容器,是一个运行时环境就是我们前面说到的集装箱。可以对比mysql 演示对比讲解
5. docker 工作原理
Docker实操
Docker是一个 C/S 模式的架构,后端是一个松耦合架构,众多模块各司其职。Docker 运行的基本流程为:1. 用户是使用 Docker Client与 Docker Daemon 建立通信,并发送请求给后者。2. Docker Daemon 作为 Docker 架构中的主体部分,首先提供 Docker Server 的功能使其可以接受 Docker Cient 的请求,3. Docker Engine 执行 Docker内部的一系列工作,每一项工作都是以一个 Job 的形式的存在。4. Job 的运行过程中,当需要容器镜像时,则从 Docker Reisty 中下载镜像,并通过镜像管理驱动 Graph driver将下载像以Graph的形式存储.5. 当需要为 Docker创建网络环境时,通过网络管理驱动 Network driver 创建并配置 Docker 容器网络环境。6. 当需要限制 Docker容器运行资源或执行用户指令等操作时,则通过 Exec driver 来完成。7. Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作
Docker原理
cat/etc/redhat-release
1. 确定你是CentOS7 及以上版本
2. 卸载旧版本
3. yum 安装gcc相关
4. 安装需要的软件包
5. 设置stable镜像仓库
6. 更新yum软件包索引
7. 安装Docker CE
8. 启动Docker
9. 测试
Docker安装
docker run 干了什么
比虚拟机快的原因
Docker
1. 启动docker: systemctl start docker
2.停止docker: systemctl stop docker
3. 重启docker: systemctl restart docker
4. 查看docker状态: systemctl status docker
5. 开机启动: systemctl enable docker
6. 查看docker 概要 信息: docker info
7. 查看docker 总体帮助文档: docker --help
8. 查看docker 命令帮助文档: docker 具体命令 --help
1. 帮助启动类命令
列出本地主机的镜像
-a : 列出本地所有的镜像(含历史映像层)
-q : 只显示镜像ID
OPTIONS说明
1. docker images
https://hub.docker.com
1. 网站
docker search [OPTIONS] 镜像名字
2. 命令
案例
docker search --limit 5 redis
OPTIONS 说明:
2. docker search 某个镜像的名字
1. 下载镜像
2. docker pull 镜像名字[:TAG]
没有TAG 就是最新版
等价于
docker pull 镜像名字 : latest
docker pull ubuntu
3. docker pull 镜像名字
3. docker pull 某个xxx镜像名字
4. docker system df 查看镜像/容器/数据卷所占的空间
1. 删除镜像
docker rmi -f 镜像ID
2. 删除单个
docker rmi -f 镜像名1:TAG 镜像名2:TAG
3. 删除多个
docker rmi -f $(docker images -qa)
4. 删除全部
5. docker rmi 某个xxx镜像名字ID
长什么样
是什么
后续Dockerfile 章节在介绍
6. 面试题: 谈谈docker 虚悬镜像是什么?
7. 思考
2. 镜像命令
说明
docker pull centos
本次演示用ubuntu演示
启动交互式容器(前台命令行)
docker run[OPTIONS] IMAGE[COMMAND][ARG...]
新建+启动容器
docker ps[OPTIONS]
列出当前所有正在运行的容器
exit
ctrl+p+q
有两种退出方式
退出容器
docker start 容器ID或者容器名
启动已停止运行的容器
docker restart 容器ID或者容器名
重启容器
docker stop 容器ID或者容器名
停止容器
docker kill 容器ID或者容器名
强制停止容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
一次性删除多个容器实例
docker rm 容器ID(只能删除已停止的容器))
删除已停止的容器
2. docker run -d 容器名
docker run -it redis:6.0.8
1. 前台交互式启动
docker run -d redis:6.0.8
2. 后台守护式启动
3. redis 前后台启动演示case
2. 启动守护式容器(后台服务器)
docker logs 容器ID
3. 查看容器日志
4. 查看容器内运行的进程
docker inspect 容器ID
5. 查看容器内内部细节
1. docker exec -it 容器ID bashShell
2. 重新进入docker attach 容器ID
4. 上述两个区别
6. 用之前的redis 容器实例进入试试
6. 进入正在运行的容器并以命令行交互
容器-> 主机
docker cp 容器ID: 容器内路径 目的主机路径
7. 从容器内拷贝文件到主机上
1. export 导出容器的内容流作为一个tar文档文件[对应import命令]
2. import 从tar 包中的内容创建一个新的文件系统在导入为镜像[对应export]
docker export 容器ID > 文件名.tar
cat 文件名.tar | docker import - 镜像用户/镜像名: 镜像版本号
3. 案例
8. 导入和导出容器
重要
3. 容器命令
命令
命令解释
4. 小总结
Docker 常用命令
分层的镜像
UnionFS(联合文件系统)
Docker镜像加在原理: font color=\"#000000\
Docker镜像加载原理
为什么Docker镜像要采用这种分层结构呢
1. 是什么
2. 重点理解
docker commit 提交容器副本使之成为一个新的镜像docker commit -m=\"提交的描述信息\"-a=\"作者\"容器ID要创建的目标镜像名:[标签名]
从Hub上下载ubuntu镜像到本地并成功运行
原始的默认Ubuntu镜像是不带着vim命令的
启动我们的新镜像并和原来的对比
案例演示ubuntu安装vim
小总结
3. Docker 镜像commit操作案例
Docker镜像
本地镜像发布到阿里云
本地镜像发布到私有库流程
docker pull Registry
1. 下载镜像Docker Registry
4. curl 验证私服库上有什么镜像
5. 将新镜像zzyyubuntu:1.2 修改符合私服规范的Tag
6. 修改配置文件使之支持http
7. push 推送到私服库
8. curl 验证私服库上有什么镜像
将本地镜像推送到私有库
本地镜像发布到私有库
--priviledged=true
why
1. 坑: 容器卷记得加入
1. 一句话: 有点类似我们Redis里面的rdb 和aof 文件
2. 将docker 容器内的数据保存进宿主机的磁盘中
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
3. 运行一个带有容器卷存储功能的容器实例
3. 是什么
1. 数据卷可在容器之间共享或重用数据
2. 卷中的更改可以直接实时生效
3. 数据卷中的更改不会包含在镜像的更新中
4. 数据卷的生命周期一直持续到没有容器使用它为止
特点:
作用: 保证数据库数据不会丢失
4. 能干嘛
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
1. 命令
2. 查看数据卷是否挂载成功
3. 容器和宿主机之间数据共享
直接命令添加
1. 宿主vs 容器之间映射添加容器卷
docker run --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
1. 读写(默认)
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
2. 只读
2. 读写规则映射添加说明
1. 宿主机vs 容器之间映射添加容器卷
2. 读写规则映射说明
1. 容器1 完成和宿主机的映射
docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu
2. 容器2 继承容器1 的卷规则
3. 卷的继承和共享
5.数据卷案例
7. Docker 容器数据卷
1. 搜索镜像
2. 拉取镜像
3. 查看镜像
服务端口映射
4. 启动镜像
5. 停止镜像
6. 移除镜像
1. 总体步骤
1. docker hub 上面查找tomcat镜像
2. 从docker hub 上拉取tomcat 镜像到本地
3. docker images 查看是否有拉取到的tomcat
i: 交互
t: 终端
d: 后台
docker run -it -p 8080:8080 tomcat
4. 使用tomcat镜像创建容器实例(也叫运行镜像)
问题
1. 可能没有映射端口或者没有关闭防火墙
先成功启动tomcat
查看wenapps文件是否为空
2. 把webapps.dist 目录换成webapps
解决
5. 访问猫首页
docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
6. 免修改版说明
2. 安装tomcat
1. docker hub 上面查找mysql镜像
2. 从docker hub 上(阿里云加速器) 拉取mysql镜像到本地标签为5.7
1. 使用mysql 镜像
2. 建库建表插入数据
3. 外部win10 也来连接运行在docker上的mysql 容器实例服务
docker 上默认字符集编码隐患
为什么报错?
1. 插入中文数据试试
从删库到跑路?
4. 问题
2. 简单版
docker run -p 3306:3306 \\ --name mysql \\ --privileged=true \\ -v /app/mysql-master/log:/var/log/mysql \\ -v /app/mysql-master/data:/var/lib/mysql \\ -v /app/mysql-master/conf:/etc/mysql \\ -e MYSQL_ROOT_PASSWORD=root \\ -d mysql:5.7
1. 新建mysql 容器实例
通过容器卷同步给mysql容器实例
2. 新建my.conf
3. 重新启动mysql 容器实例再重新进入并查看字符编码
4. 在新建库新建表在插入中文试试
5. 结论
[client]default_character_set=utf8[mysqld]collation_server = utf8_general_cicharacter_set_server = utf8
配置
注意
3. 实战版
3. 使用mysql5.7 镜像创建容器(也叫运行镜像)
3. 安装mysql
1. 从docker hub 上(阿里云加速器) 拉取redis 镜像到本地标签为6.0.8
2. 入门命令
容器卷记得加入 --privileged=true
3. 命令提醒
mkdir -p /app/redis
4. 在CentOS 宿主机下新建目录 /app/redis
5. 将一个redis.conf 文件模板 拷贝进/app/redis 目录下
默认出厂的原始redis.conf
6. /app/redis 目录下修改 redis.conf 文件
docker run -d -p 6379:6379 --name redis --privileged=true \\ -v /app/redis/redis.conf:/etc/redis/redis.conf \\ -v /app/redis/data:/data \\ redis:6.0.8 \\ redis-server /etc/redis/redis.conf
7. 使用redis6.0.8 镜像创建容器(也叫运行容器)
docker exec -it redis /bin/bash
8. 测试redis-cli 连接上来
9. 请证明docker 启动使用了我们指定的配置文件
10 . 测试redis-cli 连接上来第二次
https://www.yuque.com/tmfl/cloud/ixlgsl#37807d42
https://www.yuque.com/li.xx/open/elw9tu#HbBbm
4. 安装redis
见高级篇Portainer
5. 安装nginx
8. Docker 常规安装简介
Docker 基础篇
默认你懂
1. 主从复制原理
docker run -p 3307:3306 --name mysql-master \\-v /mydata/mysql-master/log:/var/log/mysql \\-v /mydata/mysql-master/data:/var/lib/mysql \\-v /mydata/mysql-master/conf:/etc/mysql \\-e MYSQL_ROOT_PASSWORD=root \\-d mysql:5.7
1. 新建主服务器容器实例3307
vim my.cnf
2. 进入/mydata/mysql-master/conf 目录下新建my.cnf
docker restart mysql-master
3. 修改完配置后重启master 实例
1. docker exec -it mysql -master /bin/bash
2. mysql -uroot -proot
4. 进入 mysql-master 容器
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
5. master 容器实例内创建数据同步用户
docker run -p 3308:3306 --name mysql-slave \\-v /mydata/mysql-slave/log:/var/log/mysql \\-v /mydata/mysql-slave/data:/var/lib/mysql \\-v /mydata/mysql-slave/conf:/etc/mysql \\-e MYSQL_ROOT_PASSWORD=root \\-d mysql:5.7
6. 新建从服务器实例3308
7. 进入/mydata/mysql-slave/conf 目录下新建my.cnf
docker restart mysql-slave
8. 修改完配置后重启slave 实例
show master status;
9. 在主数据库中查看主从同步状态
1. docker exec -it mysql-slave /bin/bash
2. mysql -uroot -proot
10. 进入mysql-slave 容器
master_host:主数据库的IP地址;master_port:主数据库的运行端口;master_user:在主数据库创建的用于同步数据的用户账号;master_password:在主数据库创建的用于同步数据的用户密码;master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;master_connect_retry:连接失败重试的时间间隔,单位为秒。
主从复制参数说明
2. show master status ; 在主库里执行这个命令可以查看对应的配置信息
这里有两个细节要注意下:
11. 在从数据库中配置主从复制
show slave status \\G;
12. 在从数据库中查看主从同步状态
start slave;
13. 在从数据库中开启主从同步
主库建库建表
14. 查看从数据库状态发现已经同步
15. 主从复制测试
2. 主从搭建步骤
1. 安装mysql 主从复制
回答
优点
缺点
哈希取余分区
2. 能干嘛
1. 算法构建一致性哈希环
2. 服务器IP节点映射
3. key 落到服务器的落键规则
3. 3大步骤
1. 一致性哈希算法的容错性
2. 一致性哈希算法的扩展性
4. 优点
一致性哈希算法的数据倾斜问题
5. 缺点
6. 小总结
一致性哈希算法分区
1. 为什么出现
3. 多少个hash 槽
2. 哈希槽计算
哈希槽分区
面试题
3主3从redis 集群扩缩容配置案例架构说明
systemctl start docker
1. 关闭防火墙+ 启动docker 后台服务
创建并运行docker容器实例
1. docker run
容器名字
2. --name redis-node-6
3. --net host
获取宿主机root用户权限
4. --privileged=true
5. -v /data/redis/share/redis-node-6:/data
redis 镜像和版本号
6. redis:6.0.8
开启redis集群
7. --cluster-enabled yes
开启持久化
8. --appendonly yes
redis 端口号
9. --port 6386
命令分步解释
2. 新建6个docker 容器实例
docker exec -it redis-node-1 /bin/bash
1. 进入容器
截图中的ip是linxu 的ip
2. 构建主从关系
3主3从
3. 进入容器redis-node-1 并为6台机器构建集群关系
2. cluster info
可以用来查看从节点挂在哪个主节点下面
3. cluster nodes
3主3从redis 集群配置
1. 启动6机 构成的集群并通过exec进入
2. 对6381 新增两个key
3. 防止路由失效加参数-c 并新增两个key
4. 查看集群信息
数据读写存储
2. 再次查看集群信息
docker start redis-node-1
1. 先启6381
docker stop redis-node-4
2.再停6384
docker start redis-node-4
3. 再启6384
4. 主从机器分配情况以实际情况为准
3. 先还原之前的3主3从
redis-cli --cluster 自己IP:6381
4. 查看集群状态
容错切换迁移
主从容错切换迁移案例
docker exec -it redis-node-7 /bin/bash
2. 进入6387 容器实例内部
3. 将新增的6387节点(空槽号) 作为master 节点加入源集群
4. 检查集群情况第1次
5. 重新分派槽号
6. 检查集群情况第2次
7. 为主节点6387 分配节点6388
8. 检查集群情况第3次
主从扩容案例
主从缩容案例
开打步骤
cluster(集群) 模式-docker版哈希槽分区进行亿级数据存储
2. 安装redis 集群(大厂面试题第4季- 分布式存储案例真题)
1. Docker 复杂安装详说
概述
https://docs.docker.com/engine/reference/builder/
官网
docker run 依镜像运行容器实例
docker build 命令构建镜像
编写DockerFile文件
构建三步骤
1. 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
3. # 表示注释
4. 每条指令都会创建一个新的镜像层并对镜像进行提交
5. 执行dockerfile 中的下一条指令直到所有指令都执行完成
1. DockerFile 内容基础知识
2. Dcoker 执行Dockerfile 的大致流程
3. 小总结
2. DockerFile 构建过程解析
https://github.com/dokcer-library/tomcat
1`. 参考tomcat8的dockerfile 入门
2. FROM
镜像维护者的姓名和邮箱地址
3. MAINTAINER
1. 容器构建时需要运行的命令
shell格式
exec 格式
2. 两种格式
3. RUN 是在docker build 时运行
4. RUN
当前容器对外暴露出的端口
5. EXPOSE
6.WORKDIR
7.USER
用来在构建镜像过程中设置环境变量
8. ENV
将宿主机目录下的文件拷贝进镜像且自动处理URL和解压tar压缩包
9. ADD
1. COPY src desc
2. COPY [\"src\
3. <src 原路径>: 源文件或者源目录
10. COPY
11. VOLUNE
1. 指定容器启动后的要干的事情
官网最后一行命令
我们演示自己的覆盖操作
参考官网Tomcat 的dockerfile 演示讲解
2. 注意
CMD 是在docker run时运行
RUN 是docker build 时运行
3. 它和前面RUN命令的区别
12. CMD
1. 也是用来指定一个容器启动时要运行的命令
案例说明
3. 命令格式和案例说明
5. 注意
13.ENTERPOINT
14.小总结
3. DockerFile 常用命令保留字指令
Centos7镜像具备vim +ifconfig+jdk8
https://mirrors.yangxingzhen.com/jdk/
JDK的下载镜像地址
1. 要求
大写字母D
准备编写Dockerfile文件
2. 编写
docker build -t 新镜像名字:TAG .
3. 构建
4.运行
5. 在体会下UnionFS(联合文件系统)
1. 自定义镜像mycentisjava8
Dockerfile 写一个
docker image ls -f dangling= true
命令结果
2. 查看
3. 删除
4. 概念
2. 虚悬镜像
1. 准备编写 Dockerfile 文件
2. docker build -t 新镜像名字:TAG .
3. docker run -it 新镜像名字: TAG
3. 家庭作业- 自定义镜像myubuntu
4. 案例
5. 小总结
2. DockerFile解析
通过IDEA 新建一个普通微服务模块
1. IDEA 工具里面搞定微服务jar包
Dockerfile 内容
将微服务jar包和Dockerfile 文件上传到同一个目录下/mydocker
2. 编写Dockerfile
docker build -t shaolin_docker:1.6 .
3. 构建镜像
4. 运行容器
5. 访问测试
通过dockerfile 发布微服务部署到docker 容器
3. Docker 微服务实战
图解
ens33
lo
virbr0
查看docker网络模式命令
All 命令
docker network ls
查看网络
docker network inpect xxx网络名字
查看网络源数据
docker network rm xxx 网络名字
删除网络
2. 常用命令
1. 容器间的互联和通信以及端口映射
2. 容器IP变动时候可以通过服务名字节网络通信而不受影响
3. 能干嘛
1. bridge模式
使用 --network host指定
2. host 模式
使用 --network none指定
3. none 模式
使用 --network container:NAME 或者容器ID 指定
4. container 模式
1. 总结介绍
图1
图2
图3
docker 内容器IP 是有可能发生改变的
结论
2. 容器实例内默认网络IP生产规则
文字说明
图片说明
docker run -d -p 8081:8080
docker run -d -p 8082:8080
代码
两两匹配验证
1. bridge
容器将font color=\"#e74f4c\
docker run -d -p 8083:8080 --network host --name tomcat83 billygoo/tomcat8-jdk8
警告
docker run -d --network host --name tomcat83 billygoo/tomcat8-jdk8
正确
无之前的配对显示了.看容器实例内部
http://宿主机IP:8080/
2. 案例
2. host
docker run -d -p 8084:8080 --network none --name tomcat84 billygoo/tomcat8-jdk8
3. none
docker run -d -p 8085:8080 --name tomcat85 billygoo/tomcat8-jdk8
docker run -d -p 8086:8080 --network container:tomcat85 --name tomcat86 billygoo/tomcat8-jdk8
运行结果
Alpine 操作系统是一个面向安全的轻型Linux 发型版
docker run -it --name alpine1 alpine /bin/sh
docker run -it 0network container:alpine1 --name alpine2 alpine /bin/sh
4. container
过时的link
docker run -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --name tomcat82 billygoo/tomcat8-jdk8
上述成功启动并用docker exec 进入各自容器实例内部
按照IP地址ping 是ok的
按照服务名ping结果
before
新建自定义网络
docker run -d -p 8081:8080 --network zzyy_network --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --network zzyy_network --name tomcat82 billygoo/tomcat8-jdk8
新建容器加入上一步新建的自定义网络
docker exec -it 容器名 bash
ping 容器名称
互相ping测试
自定义网络本身就维护好了主机名和ip的对应关系(ip 和域名都能通)
自定义网络本身就维护好了主机名和ip的对应关系(ip 和域名都能通)
自定义网络本身就维护好了主机名和ip的对应关系(ip 和域名都能通)
问题结论
after
5. 自定义网络
3. 案例说明
4. 网络模式
整体说明
整体架构
5. Docker 平台架构图解
4. Docker网络
http://docs.docker.com/compose/compose-file/compile-file-v3/
https://docs.docker.com/compose/install/
官网下载
curl -L \"https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)\" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
安装步骤
卸载步骤
3. 去哪下
docker-compose.yml
一文件
服务(service)
由一组关联的应用容器组成的一个font color=\"#e74f4c\
工程(project)
两要素
4. Compose核心概念
1. 编写Dockerfile 定义各个微服务应用并构建对应的镜像文件
5. Compose 使用的三个步骤
查看帮助
docker-compose -h
启动所有docker-compose 服务
docker-compose up
启动所有docker-compose 服务并后台运行
docker-compose up -d
font color=\"#e74f4c\
docker-compose down
进入容器实例内部 docker-compose exec docker-compose.yml 文件中写的服务id /bin/bash
docker-compose exec yml里的服务id
展示当前docker-compose 编排过的运行的所有容器
docker-compose ps
展示当前docker-compose 编排过的容器进程
docker-compose top
查看容器输出日志
docker-compose logs yml里的服务id
docker-compose config
重启服务
docker-compose restart
启动服务
docker-compose start
停止服务
docker-compose stop
6. Compose 常用命令
通过idea新建一个普通微服务模块
通过dockerfile发布微服务部署到docker容器
1. 改造升级微服务工程docker_boot
新建mysql 容器实例
进入 mysql容器实例并新建库db2021+ 新建表t_user
2. 单独的redis 容器实例
3. 微服务工程
4. 上面三个容器实例一次顺序启动成功
2. 不用Compose
http://localhost:port/swagger-ui.html#/
3. swagger测试
多个run 命令
2. 编写docker-compose.yml文件
写yml
mvn package 命令将微服务形成新的jar包并上传到liux 服务器/my/mydocker 目录下
编写Dockerfile
docker build -t zzyy_docker:1.6 .
构建镜像
3. 第二次修改微服务工程docker_boot
4. 执行docker-compose up 或者docker-compose up -d
5. 进入mysql 容器实例并新建库db2021+新建表t_user
6. 测试通过
7. Compose 常用命令
8. 关停
5. 使用compose
7. Compse 编排微服务
5. Docker-compose 容器编排
https://www.portainer.io/
https://docs.portainer.io/v/ce-2.9/start/install/server/docker/linux
安装
docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
1. docker 命令安装
3. 设置admin用户和密码后首次登录
4. 选择local 选项卡后本地docker 详细信息展示
登录并演示介绍常用操作case
6. Docker 轻量级可视化工具Portainer
docker stats
操作
1. 原生命令
CAdvisor 监控收集+InfluxDB 存储数据+Granfana 展示图表
一句话
展示Host 和容器两个层次的监控数据
展示历史变化数据
CAdvisor
介绍
特点
功能
InfluxDB
1. 灵活丰富的图形化选项
2. 可以混合多种风格
3. 支持白天和夜间模式
4. 多个数据源
特性
Granfana
总结
容器三剑客
2. 是什么
1. 新建目录
2. 新建3件套组合的 docker-compose.yml
3. 启动docker-compose 文件
4. 查看三个服务容器是否启动
5.测试
7. Docker 容器监控之CAdvisor+ InfluxDB + Granfana
8. 终章&总结
Docker 高级篇
0 条评论
回复 删除
下一页