0.简介
Docker 是一种开源的容器化平台,可以将其理解为一个高度轻量化的虚拟机,但原理截然不同。容器共享主机操作系统的内核,避免了传统虚拟机模拟完整操作系统的巨大开销,从而实现了极致的轻量化、秒级的启动速度以及接近原生的性能表现。
运作依赖于三个核心概念:镜像、容器和仓库。镜像是一个只读的模板,类似于安装系统所用的ISO文件,它包含了运行某个软件所需的一切代码、运行时、库和环境变量。容器则是镜像的一个运行实例,它是一个隔离的、安全的进程空间,可以被创建、启动、停止和删除。而仓库则是集中存储和分发镜像的地方,如同GitHub之于代码可以获取海量的官方或社区维护的镜像。
使用 Docker 解决了环境一致性的难题,确保了应用从开发、测试到生产环境都能以完全相同的方式运行,杜绝了“在我电脑上还好好的”这类问题。
一.安装Docker环境
(1)更新一下软件包
sudo apt-get update
sudo apt-get upgrade
(2)安装Docker依赖
sudo apt-get install ca-certificates curl gnupg lsb-release
(3)添加Docker密钥
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

(4)添加阿里云Docker源
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
(5)安装Docker
apt-get install docker-ce docker-ce-cli containerd.io
(6)验证安装
sudo docker version
如果打印版本信息则安装成功:

二.通过Docker安装MySQL
(1)拉取MySQL镜像
docker pull mysql:5.7
(2)配置示例
docker run -itd --name mysql-test -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
[-p 3306:3306 :映射容器服务的 3310 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码]
举例,这种配置方式特别适合开发测试环境,通过端口映射可以方便地从宿主机访问容器内的MySQL服务,而数据卷挂载则能确保数据持久化,即使容器被删除数据也不会丢失。:
docker run -d -p 3310:3306 -v D:\docker-mysql:/etc/mysql/conf.d -v D:\docker-mysql\data:/var/lib/mysql -e M YSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
(3)数据卷容器,实现多个mysql同步
数据卷容器是一种特殊的容器,它不运行任何应用,只是用来管理数据卷。其他容器可以通过--volumes-from参数共享这些数据卷,实现多个容器间的数据共享和同步。

修改上面举例的部分,在其基础上去掉-v加上-volumes-from mysql01创建成功后mysql02同样挂载到mysql01所挂载的位置实现数据持久化
(4)使用DockerFile
#使用Dockerfile构建MySQL并创建数据库:
FROM mysql:5.7 #基于mysql5.7
ENV MYSQL_ROOT_PASSWORD=123456 #设置密码
ENV LANG=C.UTF-8 #设置字符
COPY yourdb.sql /dokerpath/ #复制.sql文件
VOLUME /var/lib/mysql # 挂载目录
三.Docker部署Redis集群

上边是主机,后边是从机。主机崩溃从机代替
(1)创建redis网络
docker network create redis --subnet 172.38.0.0/16
(2)使用Shell创建多个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-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
(3)使用Docker创建容器
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
在上面的命令中,不同节点需要将上边的-1,换成实际的-n,ip也继续向后
如第二个为:
docker run -p 6371:6379 -p 16371:16379 --name redis-2 -v /mydata/redis/node-2/data:/data -v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf -d --net redis --ip 172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
(4)运行容器redis-1
docker exec -it redis-1 /bin/sh
(5)创建集群
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1
随后可以进行验证:
claster info

claster nodes


488

被折叠的 条评论
为什么被折叠?



