Docker详解
2023-05-08 20:46:15 0 举报
AI智能生成
Docker
作者其他创作
大纲/内容
高级篇(大厂进阶)
Docker复杂安装详说
安装mysql主从复制
主从复制原理
默认你懂
主从搭建步骤
新建主服务器容器实例3307
进入/mydata/mysql-master/conf目录下新建my.cnf
vim my.cnf
修改完配置后重启master实例
docker restart mysql-master
进入mysql-master容器
docker exec -it mysql-master /bin/bash
mysql -uroot -proot
master容器实例内创建数据同步用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
新建从服务器容器实例3308
进入/mydata/mysql-slave/conf目录下新建my.cnf
vim my.cnf
修改完配置后重启slave实例
docker restart mysql-slave
在主数据库中查看主从同步状态
show master status;
进入mysql-slave容器
docker exec -it mysql-slave /bin/bash
mysql -uroot -proot
在从数据库中配置主从复制
主从复制命令参数说明
在从数据库中查看主从同步状态
show slave status \G;
在从数据库中开启主从同步
分支主题
查看从数据库状态发现已经同步
主从复制测试
主机新建库-使用库-新建表-插入数据,ok
从机使用库-查看记录,ok
安装redis集群(大厂面试题第4季-分布式存储案例真题)
cluster(集群)模式-docker版
哈希槽分区进行亿级数据存储
面试题
1~2亿条数据需要缓存,请问如何设计这个存储案例
回答
单机单台100%不可能,肯定是分布式存储,用redis如何落地?
上述问题阿里P6~P7工程案例和场景设计类必考题目,
一般业界有3种解决方案
哈希取余分区
缺点那???
一致性哈希算法分区
是什么
能干嘛
提出一致性Hash解决方案。
目的是当服务器个数发生变动时,
尽量减少影响客户端到服务器的映射关系
3大步骤
算法构建一致性哈希环
服务器IP节点映射
key落到服务器的落键规则
优点
一致性哈希算法的容错性
一致性哈希算法的扩展性
缺点
一致性哈希算法的数据倾斜问题
小总结
哈希槽分区
是什么
哈希槽计算
3主3从redis集群扩缩容配置案例架构说明
见自己的processon笔记
开打步骤
3主3从redis集群配置
关闭防火墙+启动docker后台服务
systemctl start docker
新建6个docker容器redis实例
命令分步解释
docker run
创建并运行docker容器实例
--name redis-node-6
容器名字
--net host
使用宿主机的IP和端口,默认
--privileged=true
获取宿主机root用户权限
-v /data/redis/share/redis-node-6:/data
容器卷,宿主机地址:docker内部地址
redis:6.0.8
redis镜像和版本号
--cluster-enabled yes
开启redis集群
--appendonly yes
开启持久化
--port 6386
redis端口号
进入容器redis-node-1并为6台机器构建集群关系
进入容器
docker exec -it redis-node-1 /bin/bash
构建主从关系
一切OK的话,3主3从搞定
链接进入6381作为切入点,查看集群状态
链接进入6381作为切入点,查看节点状态
cluster info
cluster nodes
主从容错切换迁移案例
数据读写存储
启动6机构成的集群并通过exec进入
对6381新增两个key
防止路由失效加参数-c并新增两个key
查看集群信息
容错切换迁移
主6381和从机切换,先停止主机6381
6381主机停了,对应的真实从机上位
6381作为1号主机分配的从机以实际情况为准,具体是几号机器就是几号
再次查看集群信息
先还原之前的3主3从
先启6381
docker start redis-node-1
再停6385
docker stop redis-node-5
再启6385
docker start redis-node-5
主从机器分配情况以实际情况为准
查看集群状态
redis-cli --cluster check 自己IP:6381
主从扩容案例
新建6387、6388两个节点+新建后启动+查看是否8节点
进入6387容器实例内部
docker exec -it redis-node-7 /bin/bash
将新增的6387节点(空槽号)作为master节点加入原集群
检查集群情况第1次
重新分派槽号
检查集群情况第2次
槽号分派说明
为主节点6387分配从节点6388
检查集群情况第3次
主从缩容案例
目的:6387和6388下线
检查集群情况1获得6388的节点ID
将6388删除
从集群中将4号从节点6388删除
将6387的槽号清空,重新分配,本例将清出来的槽号都给6381
检查集群情况第二次
将6387删除
检查集群情况第三次
DockerFile解析
是什么
Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
概述
官网
https://docs.docker.com/engine/reference/builder/
构建三步骤
编写Dockerfile文件
docker build命令构建镜像
docker run依镜像运行容器实例
DockerFile构建过程解析
Dockerfile内容基础知识
1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2:指令按照从上到下,顺序执行
3:#表示注释
4:每条指令都会创建一个新的镜像层并对镜像进行提交
Docker执行Dockerfile的大致流程
(1)docker从基础镜像运行一个容器
(2)执行一条指令并对容器作出修改
(3)执行类似docker commit的操作提交一个新的镜像层
(4)docker再基于刚提交的镜像运行一个新容器
(5)执行dockerfile中的下一条指令直到所有指令都执行完成
小总结
DockerFile常用保留字指令
参考tomcat8的dockerfile入门
https://github.com/docker-library/tomcat
FROM
基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
容器构建时需要运行的命令
两种格式
shell格式
exec格式
RUN是在 docker build时运行
EXPOSE
当前容器对外暴露出的端口
WORKDIR
指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
USER
指定该镜像以什么样的用户去执行,如果都不指定,默认是root
ENV
用来在构建镜像过程中设置环境变量
ADD
将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
COPY
类似ADD,拷贝文件和目录到镜像中。
将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置 :源文件或者源目录 :容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
COPY src dest
COPY ["src", "dest"]
VOLUME
容器数据卷,用于数据保存和持久化工作
CMD
指定容器启动后的要干的事情
注意
Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
参考官网Tomcat的dockerfile演示讲解
官网最后一行命令
分支主题
我们演示自己的覆盖操作
分支主题
它和前面RUN命令的区别
CMD是在docker run 时运行。
RUN是在 docker build时运行。
ENTRYPOINT
也是用来指定一个容器启动时要运行的命令
类似于 CMD 指令,但是ENTRYPOINT不会被docker run后面的命令覆盖,
而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序
命令格式和案例说明
优点
在执行docker run的时候可以指定 ENTRYPOINT 运行所需的参数。
注意
如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
小总结
案例
自定义镜像mycentosjava8
要求
Centos7镜像具备vim+ifconfig+jdk8
JDK的下载镜像地址
官网
https://mirrors.yangxingzhen.com/jdk/
编写
准备编写Dockerfile文件
大写字母D
构建
docker build -t 新镜像名字:TAG .
注意,上面TAG后面有个空格,有个点
运行
docker run -it 新镜像名字:TAG
再体会下UnionFS(联合文件系统)
虚悬镜像
是什么
仓库名、标签都是的镜像,俗称dangling image
Dockerfile写一个
查看
docker image ls -f dangling=true
命令结果
删除
家庭作业-自定义镜像myubuntu
编写
准备编写DockerFile文件
构建
docker build -t 新镜像名字:TAG .
运行
docker run -it 新镜像名字:TAG
小总结
Docker微服务实战
通过IDEA新建一个普通微服务模块
建Module
docker_boot
改POM
写YML
主启动
业务类
通过dockerfile发布微服务部署到docker容器
IDEA工具里面搞定微服务jar包
编写Dockerfile
Dockerfile内容
将微服务jar包和Dockerfile文件上传到同一个目录下/mydocker
构建镜像
docker build -t zzyy_docker:1.6 .
打包成镜像文件
运行容器
访问测试
Docker网络
是什么
docker不启动,默认网络情况
ens33
lo
virbr0
docker启动后,网络情况
查看docker网络模式命令
常用基本命令
All命令
查看网络
docker network ls
查看网络源数据
docker network inspect XXX网络名字
删除网络
docker network rm XXX网络名字
案例
能干嘛
容器间的互联和通信以及端口映射
容器IP变动时候可以通过服务名直接网络通信而不受到影响
网络模式
总体介绍
bridge模式:使用--network bridge指定,默认使用docker0
host模式:使用--network host指定
none模式:使用--network none指定
container模式:使用--network container:NAME或者容器ID指定
容器实例内默认网络IP生产规则
说明
结论
docker容器内部的ip是有可能会发生改变的
案例说明
bridge
是什么
案例
说明
代码
docker run -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --name tomcat82 billygoo/tomcat8-jdk8
两两匹配验证
host
是什么
案例
说明
代码
警告
docker run -d -p 8083:8080 --network host --name tomcat83 billygoo/tomcat8-jdk8
正确
docker run -d --network host --name tomcat83 billygoo/tomcat8-jdk8
无之前的配对显示了,看容器实例内部
没有设置-p的端口映射了,如何访问启动的tomcat83??
none
是什么
禁用网络功能,只有lo标识(就是127.0.0.1表示本地回环)
案例
docker run -d -p 8084:8080 --network none --name tomcat84 billygoo/tomcat8-jdk8
container
是什么
案例
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
运行结果
案例2
Alpine操作系统是一个面向安全的轻型 Linux发行版
docker run -it --name alpine1 alpine /bin/sh
docker run -it --network container:alpine1 --name alpine2 alpine /bin/sh
运行结果,验证共用搭桥
假如此时关闭alpine1,再看看alpine2
自定义网络
过时的link
是什么
案例
before
案例
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结果???
after
案例
自定义桥接网络,自定义网络默认使用的是桥接网络bridge
新建自定义网络
新建容器加入上一步新建的自定义网络
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
互相ping测试
问题结论
自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)
自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)
自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)
Docker平台架构图解
整体说明
整体架构
Docker-compose容器编排
是什么
Docker-Compose是Docker官方的开源项目,
负责实现对Docker容器集群的快速编排。
能干嘛
去哪下
官网
https://docs.docker.com/compose/compose-file/compose-file-v3/
官网下载
https://docs.docker.com/compose/install/
安装步骤
卸载步骤
Compose核心概念
一文件
docker-compose.yml
两要素
服务(service)
一个个应用容器实例,比如订单微服务、库存微服务、mysql容器、nginx容器或者redis容器
工程(project)
由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
Compose使用的三个步骤
编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务。
最后,执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线
Compose常用命令
Compose编排微服务
改造升级微服务工程docker_boot
以前的基础版
SQL建表建库
一键生成说明
改POM
写YML
主启动
业务类
config配置类
RedisConfig
SwaggerConfig
新建entity
User
UserDTO
新建mapper
新建接口UserMapper
src\main\resources路径下新建mapper文件夹并新增UserMapper.xml
新建service
新建controller
mvn package命令将微服务形成新的jar包
并上传到Linux服务器/mydocker目录下
编写Dockerfile
构建镜像
docker build -t zzyy_docker:1.6 .
不用Compose
单独的mysql容器实例
新建mysql容器实例
进入mysql容器实例并新建库db2021+新建表t_user
单独的redis容器实例
微服务工程
上面三个容器实例依次顺序启动成功
swagger测试
http://localhost:你的微服务端口/swagger-ui.html#/
上面成功了,有哪些问题?
先后顺序要求固定,先mysql+redis才能微服务访问成功
多个run命令......
容器间的启停或宕机,有可能导致IP地址对应的容器实例变化,映射出错,
要么生产IP写死(可以但是不推荐),要么通过服务调用
使用Compose
服务编排,一套带走,安排
编写docker-compose.yml文件
第二次修改微服务工程docker_boot
写YML
通过服务名访问,IP无关
mvn package命令将微服务形成新的jar包
并上传到Linux服务器/mydocker目录下
编写Dockerfile
构建镜像
docker build -t zzyy_docker:1.6 .
执行 docker-compose up
或者
执行 docker-compose up -d
进入mysql容器实例并新建库db2021+新建表t_user
测试通过
Compose常用命令
关停
Docker轻量级可视化工具Portainer
是什么
安装
官网
https://www.portainer.io/
https://docs.portainer.io/v/ce-2.9/start/install/server/docker/linux
步骤
docker命令安装
第一次登录需创建admin,访问地址:xxx.xxx.xxx.xxx:9000
设置admin用户和密码后首次登陆
选择local选项卡后本地docker详细信息展示
上一步的图形展示,能想得起对应命令吗?
登陆并演示介绍常用操作case
Docker容器监控之
CAdvisor+InfluxDB+Granfana
原生命令
操作
问题
是什么
容器监控3剑客
一句话
CAdvisor监控收集+InfluxDB存储数据+Granfana展示图表
CAdvisor
InfluxDB
Granfana
总结
compose容器编排,一套带走
新建目录
新建3件套组合的
docker-compose.yml
启动docker-compose文件
docker-compose up
查看三个服务容器是否启动
测试
浏览cAdvisor收集服务,http://ip:8080/
第一次访问慢,请稍等
cadvisor也有基础的图形展现功能,这里主要用它来作数据采集
浏览influxdb存储服务,http://ip:8083/
浏览grafana展现服务,http://ip:3000
ip+3000端口的方式访问,默认帐户密码(admin/admin)
配置步骤
配置数据源
选择influxdb数据源
配置细节
1
2
配置面板panel
1
2
3
4
5
6
到这里cAdvisor+InfluxDB+Grafana容器监控系统就部署完成了
终章の总结
知识回顾简单串讲和总结
进阶篇:雷丰阳老师的K8S
基础篇(零基小白)
Docker简介
前提知识+课程定位+开场闲聊
是什么
问题:为什么会有docker出现
docker理念
一句话
解决了运行环境和配置问题的软件容器,
方便做持续集成并有助于整体发布的容器虚拟化技术。
容器与虚拟机比较
容器发展简史
传统虚拟机技术
容器虚拟化技术
对比
能干嘛
技术职级变化
coder
programmer
software engineer
DevOps engineer
开发/运维(DevOps)新一代开发工程师
一次构建、随处运行
更快速的应用交付和部署
更便捷的升级和扩缩容
更简单的系统运维
更高效的计算资源利用
· Docker应用场景
哪些企业在使用
新浪
美团
蘑菇街
......
去哪下
官网
docker官网:http://www.docker.com
仓库
Docker Hub官网: https://hub.docker.com/
Docker安装
前提说明
Docker的基本组成
镜像(image)
容器(container)
仓库(repository)
小总结
Docker平台架构图解(架构版)
首次懵逼正常,后续深入,先有大概轮廓,混个眼熟
整体架构及底层通信原理简述
安装步骤
CentOS7安装Docker
https://docs.docker.com/engine/install/centos/
安装步骤
确定你是CentOS7及以上版本
cat /etc/redhat-release
卸载旧版本
yum安装gcc相关
CentOS7能上外网
分支主题
yum -y install gcc
yum -y install gcc-c++
安装需要的软件包
官网要求
执行命令
yum install -y yum-utils
设置stable镜像仓库
大坑
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
官网要求
推荐
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
我们自己
更新yum软件包索引
yum makecache fast
安装DOCKER CE
yum -y install docker-ce docker-ce-cli containerd.io
官网要求
执行结果
启动docker
systemctl start docker
测试
docker version
本次安装时间2021.11
docker run hello-world
卸载
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
阿里云镜像加速
是什么
https://promotion.aliyun.com/ntms/act/kubernetes.html
注册一个属于自己的阿里云账户(可复用淘宝账号)
获得加速器地址连接
登陆阿里云开发者平台
点击控制台
选择容器镜像服务
获取加速器地址
粘贴脚本直接执行
直接粘
或者分步骤都行
mkdir -p /etc/docker
vim /etc/docker/daemon.json
重启服务器
systemctl daemon-reload
systemctl restart docker
永远的HelloWorld
启动Docker后台容器(测试运行 hello-world)
docker run hello-world
run干了什么
底层原理
为什么Docker会比VM虚拟机快
Docker常用命令
帮助启动类命令
启动docker: systemctl start docker
停止docker: systemctl stop docker
重启docker: systemctl restart docker
查看docker状态: systemctl status docker
开机启动: systemctl enable docker
查看docker概要信息: docker info
查看docker总体帮助文档: docker --help
查看docker命令帮助文档: docker 具体命令 --help
镜像命令
docker images
列出本地主机上的镜像
OPTIONS说明:
-a :列出本地所有的镜像(含历史映像层)
-q :只显示镜像ID。
docker search 某个XXX镜像名字
网站
https://hub.docker.com
命令
docker search [OPTIONS] 镜像名字
案例
OPTIONS说明:
--limit : 只列出N个镜像,默认25个
docker search --limit 5 redis
docker pull 某个XXX镜像名字
下载镜像
docker pull 镜像名字[:TAG]
docker pull 镜像名字
没有TAG就是最新版
等价于
docker pull 镜像名字:latest
docker pull ubuntu
docker system df 查看镜像/容器/数据卷所占的空间
docker rmi 某个XXX镜像名字ID
删除镜像
删除单个
docker rmi -f 镜像ID
删除多个
docker rmi -f 镜像名1:TAG 镜像名2:TAG
删除全部
docker rmi -f $(docker images -qa)
面试题:谈谈docker虚悬镜像是什么?
是什么
仓库名、标签都是的镜像,俗称虚悬镜像dangling image
长什么样
后续Dockerfile章节再介绍
思考
结合我们Git的学习心得,大家猜猜是否会有
docker commit /docker push??
容器命令
有镜像才能创建容器,
这是根本前提(下载一个CentOS或者ubuntu镜像演示)
说明
docker pull centos
docker pull ubuntu
本次演示用ubuntu演示
新建+启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明
启动交互式容器(前台命令行)
列出当前所有正在运行的容器
docker ps [OPTIONS]
OPTIONS说明
退出容器
两种退出方式
exit
run进去容器,exit退出,容器停止
ctrl+p+q
run进去容器,ctrl+p+q退出,容器不停止
启动已停止运行的容器
docker start 容器ID或者容器名
重启容器
docker restart 容器ID或者容器名
停止容器
docker stop 容器ID或者容器名
强制停止容器
docker kill 容器ID或容器名
删除已停止的容器
docker rm 容器ID
一次性删除多个容器实例
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
重要
有镜像才能创建容器,这是根本前提(下载一个Redis6.0.8镜像演示)
启动守护式容器(后台服务器)
在大部分的场景下,我们希望 docker 的服务是在后台运行的,
我们可以过 -d 指定容器的后台运行模式。
docker run -d 容器名
redis 前后台启动演示case
前台交互式启动
docker run -it redis:6.0.8
后台守护式启动
docker run -d redis:6.0.8
查看容器日志
docker logs 容器ID
查看容器内运行的进程
docker top 容器ID
查看容器内部细节
docker inspect 容器ID
进入正在运行的容器并以命令行交互
docker exec -it 容器ID bashShell
重新进入docker attach 容器ID
案例演示,用centos或者unbuntu都可以
上述两个区别
attach 直接进入容器启动命令的终端,不会启动新的进程
用exit退出,会导致容器的停止。
exec 是在容器中打开新的终端,并且可以启动新的进程
用exit退出,不会导致容器的停止。
推荐大家使用 docker exec 命令,因为退出容器终端,不会导致容器的停止。
用之前的redis容器实例进入试试
进入redis服务
docker exec -it 容器ID /bin/bash
docker exec -it 容器ID redis-cli
一般用-d后台启动的程序,再用exec进入对应容器实例
从容器内拷贝文件到主机上
容器→主机
docker cp 容器ID:容器内路径 目的主机路径
导入和导出容器
export 导出容器的内容留作为一个tar归档文件[对应import命令]
import 从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]
案例
docker export 容器ID > 文件名.tar
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
小总结
常用命令
Docker镜像
是什么
是什么
分层的镜像
UnionFS(联合文件系统)
Docker镜像加载原理
为什么 Docker 镜像要采用这种分层结构呢
重点理解
Docker镜像层都是只读的,容器层是可写的
当容器启动时,一个新的可写层被加载到镜像的顶部。
这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
Docker镜像commit操作案例
docker commit提交容器副本使之成为一个新的镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
案例演示ubuntu安装vim
从Hub上下载ubuntu镜像到本地并成功运行
原始的默认Ubuntu镜像是不带着vim命令的
外网连通的情况下,安装vim
安装完成后,commit我们自己的新镜像
启动我们的新镜像并和原来的对比
小总结
本地镜像发布到阿里云
本地镜像发布到阿里云流程
镜像的生成方法
上一讲已经介绍过
基于当前容器创建一个新的镜像,新功能增强
docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]]
后面的DockerFile章节,第2种方法
将本地镜像推送到阿里云
本地镜像素材原型
阿里云开发者平台
https://promotion.aliyun.com/ntms/act/kubernetes.html
创建仓库镜像
选择控制台,进入容器镜像服务
选择个人实例
命名空间
继续
仓库名称
继续
进入管理界面获得脚本
将镜像推送到阿里云
将镜像推送到阿里云registry
管理界面脚本
脚本实例
将阿里云上的镜像下载到本地
下载到本地
本地镜像发布到私有库
本地镜像发布到私有库流程
是什么
Docker Registry
将本地镜像推送到私有库
下载镜像Docker Registry
运行私有库Registry,相当于本地有个私有Docker hub
案例演示创建一个新镜像,ubuntu安装ifconfig命令
从Hub上下载ubuntu镜像到本地并成功运行
原始的Ubuntu镜像是不带着ifconfig命令的
外网连通的情况下,安装ifconfig命令并测试通过
安装完成后,commit我们自己的新镜像
启动我们的新镜像并和原来的对比
curl验证私服库上有什么镜像
将新镜像zzyyubuntu:1.2修改符合私服规范的Tag
修改配置文件使之支持http
push推送到私服库
curl验证私服库上有什么镜像2
pull到本地并运行
Docker容器数据卷
坑:容器卷记得加入
--privileged=true
why
回顾下上一讲的知识点,参数V
是什么
一句话:有点类似我们Redis里面的rdb和aof文件
将docker容器内的数据保存进宿主机的磁盘中
运行一个带有容器卷存储功能的容器实例
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
能干嘛
数据卷案例
宿主vs容器之间映射添加容器卷
直接命令添加
命令
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
查看数据卷是否挂载成功
容器和宿主机之间数据共享
读写规则映射添加说明
读写(默认)
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
默认同上案例,默认就是rw
只读
容器实例内部被限制,只能读取不能写
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
卷的继承和共享
容器1完成和宿主机的映射
容器2继承容器1的卷规则
docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu
Docker常规安装简介
总体步骤
搜索镜像
拉取镜像
查看镜像
启动镜像
服务端口映射
停止容器
移除容器
安装tomcat
docker hub上面查找tomcat镜像
docker search tomcat
从docker hub上拉取tomcat镜像到本地
docker pull tomcat
docker images查看是否有拉取到的tomcat
使用tomcat镜像创建容器实例(也叫运行镜像)
docker run -it -p 8080:8080 tomcat
-p 小写,主机端口:docker容器端口
-P 大写,随机分配端口
i:交互
t:终端
d:后台
访问猫首页
问题
解决
可能没有映射端口或者没有关闭防火墙
把webapps.dist目录换成webapps
先成功启动tomcat
查看webapps 文件夹查看为空
免修改版说明
docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
安装mysql
docker hub上面查找mysql镜像
从docker hub上(阿里云加速器)拉取mysql镜像到本地标签为5.7
使用mysql5.7镜像创建容器(也叫运行镜像)
命令出处,哪里来的?
简单版
使用mysql镜像
建库建表插入数据
外部Win10也来连接运行在dokcer上的mysql容器实例服务
问题
插入中文数据试试
为什么报错?
docker上默认字符集编码隐患
删除容器后,里面的mysql数据如何办
容器实例一删除,你还有什么?
删容器到跑路。。。。。?
实战版
新建mysql容器实例
新建my.cnf
通过容器卷同步给mysql容器实例
重新启动mysql容器实例再重新进入并查看字符编码
再新建库新建表再插入中文测试
结论
假如将当前容器实例删除,再重新来一次,之前建的db01实例还有吗?trytry
安装redis
从docker hub上(阿里云加速器)拉取redis镜像到本地标签为6.0.8
入门命令
命令提醒:容器卷记得加入--privileged=true
在CentOS宿主机下新建目录/app/redis
mkdir -p /app/redis
将一个redis.conf文件模板拷贝进/app/redis目录下
/app/redis目录下修改redis.conf文件
默认出厂的原始redis.conf
使用redis6.0.8镜像创建容器(也叫运行镜像)
测试redis-cli连接上来
请证明docker启动使用了我们自己指定的配置文件
修改前
修改后
记得重启服务
测试redis-cli连接上来第2次
安装Nginx
见高级篇Portainer
0 条评论
下一页