容器数据卷
什么是容器数据卷??
应用+环境=打包成一个镜像
需求,数据mysql可以持久化
容器之间,可以有一个数据共享的技术!!!
docker容器中产生的数据,同步到本地,或者云,这样数据不会丢失。
将容器内的目录,挂载到linux上。
目的:为了容器的持久化+数据同步操作!!!容器与容器之间,数据共享!
方式一:使用数据卷,命令-v(参考-p,主机服务器端口:容器内端口)
docker run -it -v 主机目录:容器内目录
Mount挂载
查看命令:docker inspect 容器id

数据同步
容器内部和服务器内部数据同步,双向绑定


实战安装mysql,数据持久化问题data目录
运行容器,需要数据挂载。
mysql--docker hub官方docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
-d后台运行
-p 端口号,2个
-v 数据卷挂载同步
-e 环境配置
--name 起一个别名容器名
启动哪个镜像+版本号
[root@iZuf6f34ah9elznexcxb5kZ /]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7本机navicat访问docker里面的mysql数据库,端口自定义3310
具名挂载,匿名挂载
没有起的名字的,叫匿名挂载
-P随机端口,没有取名字,=匿名挂载
docker run -d -P --name nginx01 -v /ect/nginx nginx
docker volume ls
这里发现,匿名挂载,我们-v只写了容器内的路径,没有写容器外的路径!
local 9ejifjaijaeirjeakdja0093
具名挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
通过-v 卷名:容器内路径
查看一下:docker volume inspect

DockerFile
docker file
mkdir创建一个文件,写入脚本,通过脚本创建镜像。
镜像是一层一层的,脚本就是一个一个命令;
每个命令都是一层;
FROM centos
VOLUME ["volume01","volume02"]
CMB echo "====end====="
CMB /bin/bash查看文件,cat+文件名
[root@iZuf6f34ah9elznexcxb5kZ docker-test-volume]# vim dockerfile1
[root@iZuf6f34ah9elznexcxb5kZ docker-test-volume]# cat dockerfile1
#创建一个dockfile,
#文件中的指令全部大写,参数
#这里的每一个命令,都是一层
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "---end---"
CMD /bin/bash
docker images;查看所有镜像

容器内部多个mysql数据同步

--volumes-from继承关系,


docker file构建过程
基础知识:
每个保留关键字,都必须是大写的
dockerfile是面向开发的,我们以后发布项目,直接编写dockerfile文件,简单。

FROM 基础镜像,一切从这里开始构建
MAINTAINER 镜像是谁写的,作者+邮箱
RUN 镜像构建的时候,运行的命令
ADD 步骤,tomcat镜像,添加内容
WORKDIR 镜像的工作目录
VOLUME 挂载的目录
EXPOSE 指定对外暴露的端口号
RUN 奔跑吧。
CMD 指定这个容器启动的时候,只有最有一个会生效。需要运行的命令cmd echo
ENTRYPOINT 指定这个容器启动的时候,可以追加命令
ONBUILD
COPY 将文件copy到镜像中
ENV 设置环境变量

Docker网络
容器编排,集群部署
理解,docker0



docker 容器到网络
container to a network
docker network connect


一个容器,2个ip,直接打通

企业实战
Redis负载均衡和高可用
shell脚本配置6个redis
for port in $(seq 1 6);\
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat <<EOF>/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enable yes
cluster-config-file nodes.conf
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done

检查无误,开始启动
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port} \
-v /mydata/redis/node-${port}/data:/data \
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf\
-d --net redis --ip 172.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf; \
先启动一个,一个一个启动
docker run -p 6371:6379 -p 16371:16379 --name redis-1 \
-v /mydata/redis/node-1/data:/data \
-v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
创建集群
redis-cli --cluster create 172.38.0.11:6379 172.18.0.12:6379 172.18.0.13:6379 172.18.0.14:6379 172.18.0.15:6379 172.18.0.16:6379 --cluster-replicas 1
springboot--docker

Docker Compose
Docker Swarm
CI/CD jenkins流水线
