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