简介:mysql,redis(单节点),consul(单节点),nginx,在docker内。springboot不在docker内,也就是在docker宿主机器上。
docker官网:https://docs.docker.com/engine/install/centos/
docker仓库:https://hub.docker.com/_/mysql?tab=description
1.安装docker
1.1卸载老的版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
1.2安装yum-utils包(提供yum-config-manager 实用程序)并设置稳定的存储库。
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
1.3安装最新版本的 Docker Engine 和 containerd,或者进入下一步安装特定版本:
sudo yum install docker-ce docker-ce-cli containerd.io
1.4启动 Docker。
sudo systemctl start docker
1.5设置开机自启
sudo systemctl enable docker
1.6阿里云镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://rn2ij708.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2安装mysql
2.1安装mysql临时镜像
docker run -p 3369:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0
2.2需要远程登录mysql 需要做一下操作
#进入mysql bin目录
docker exec -it mysql /bin/bash
#登录mysql
mysql -u root -p
#切换数据库
use mysql
#修改账号host
update user set host = '%' where user = 'root';
#修改账号密码
alter user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
#查看用户当前信息
select user,host,plugin from user;
#刷新
flush privileges;
2.3查看docker mysql镜像的目录 以便准确挂载到雇主机器
#进入docker容器内
docker exec -it mysql /bin/bash
# 查找Docker内,MySQL配置文件my.cnf的位置
mysql --help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
#查找数据文件位置 exit 退出docker容器以后
docker inspect mysql
"Mounts": [
{
"Type": "volume",
"Name": "89586be25ba94bb049e72271fbc59d51741920781ed9e29e4dc20c7db90a59fc",
"Source": "/var/lib/docker/volumes/89586be25ba94bb049e72271fbc59d51741920781ed9e29e4dc20c7db90a59fc/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
docker exec -it mysql bash
配置文件在
/etc/mysql/my.cnf
拷贝文件到之指定目录
docker cp mysql:/etc/mysql/my.cnf /home/mysql/conf
# 删除临时容器
docker rm -f mysql
2.4创建本地路径并挂载Docker内数据
docker run --restart=always \
-p 3369:3306 --name mysql \
-v /home/mysql/data:/var/lib/mysql \
-v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /home/mysql/log:/var/log/mysql \
-v /home/mysql/mysql-files:/var/lib/mysql-files \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0
--name:为容器指定一个名字
-p:指定端口映射,格式为:主机(宿主)端口:容器端口
-d:后台运行容器,并返回容器 id
3安装redis
#配置文件目录 和 数据目录
注意:docker redis 默认无redis.conf 文件,如果需要,自行去下载
mkdir -p /home/docker/redis/conf && mkdir -p /home/docker/redis/data
#准备配置文件
cd /home/docker/redis/conf
wget https://raw.githubusercontent.com/antirez/redis/6.2.2/redis.conf
#运行
docker run -p 6379:6379 --name redis \
-v /home/docker/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /home/docker/redis/data:/data \
--restart=always \
--privileged=true \
-d redis:6.2.2 /etc/redis/redis.conf --appendonly yes
参数解释
--restart=always -> 开机启动容器,容器异常自动重启
-d -> 以守护进程的方式启动容器
--privileged=true -> 提升容器内权限
-p 6379:6379 -> 绑定宿主机端口
-v /home/docker/redis/conf/redis.conf:/etc/redis/redis.conf -> 映射配置文件
-v /home/docker/redis/data:/data -> 映射数据目录
--name redis -> 指定容器名称
--appendonly yes -> 开启数据持久化
如果搞不懂挂载目录,可以像安装mysql 先默认安装,然后查看目录。
#安装
docker run -p 6379:6379 --name redis -d redis:6.2.2 redis-server
#查看
docker inspect redis
"Mounts": [
{
"Type": "volume",
"Name": "ffef00095809f501fe4b7c0835820e6bff3752274bfda4b5dff548f5711da1be",
"Source": "/var/lib/docker/volumes/ffef00095809f501fe4b7c0835820e6bff3752274bfda4b5dff548f5711da1be/_data",
"Destination": "/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
4安装nginx
#创建临时容器
docker run --name nginx -p 80:80 -d nginx:1.20.0
#进入nginx目录
docker exec -it nginx bash
#查看nginx.cnf
cat /etc/nginx/nginx.conf
从这个配置文件可以看出
nginx的日志文件在 /var/log/nginx 目录下
很重要的一点 最后一行 引入了 /etc/nginx/conf.d/ 文件下所有的配置文件
通过查看default.conf 文件的信息 默认的页面路径 /usr/share/nginx/html
#创建挂载目录
mkdir -p /home/docker/nginx/conf
#然后将nginx的一些配置信息 copy到刚创建的目录中去
docker cp nginx:/etc/nginx/nginx.conf /home/docker/nginx
docker cp nginx:/etc/nginx/conf.d/default.conf /home/docker/nginx/conf
# 删除临时容器
docker rm -f nginx
#重新安装容器
docker run --name nginx -p 80:80 -p 443:443 \
--restart=always \
-v /home/docker/nginx/html:/usr/share/nginx/html \
-v /home/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/docker/nginx/logs:/var/log/nginx \
-v /home/docker/nginx/conf:/etc/nginx/conf.d \
-v /home/docker/nginx/cert:/etc/nginx/cert \
-d nginx:1.20.0
注:
1.nginx反向代理 不可以在使用127.0.0.1或者localhost访问宿主机器服务。可以使用ifconfig查看docker监听的ip。然后替代127.0.0.1。
5单节点consul
docker run -d -p 8500:8500 --restart=always --name=consul consul:1.10.2 agent -server -bootstrap -ui -node=consul-node1 -client='0.0.0.0'
-d: 后台运行容器,并返回容器ID;
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-name consul 指定容器名称,自定义
consul:1.10.2 指定镜像, 镜像名:标签名
agent: 表示启动 Agent 进程。
server:表示启动 Consul Server 模式。
client:表示启动 Consul Cilent 模式。
bootstrap:表示这个节点是 Server-Leader ,每个数据中心只能运行一台服务器。
技术角度上讲 Leader 是通过 Raft 算法选举的,但是集群第一次启动时需要一个引导
Leader,在引导群集后,建议不要使用此标志。
6安装rabbitmq
docker pull rabbitmq:management
#rabbitmq:management (镜像配有控制台)。
#创建挂载目录 mkdir...
docker run --restart=always \
-p 5673:5672 -p 15673:15672 --name rabbitmq \
-v /home/rabbitmq/data:/var/lib/rabbitmq \
-v /home/rabbitmq/conf:/etc/rabbitmq \
-v /home/rabbitmq/log:/var/log/rabbitmq \
-d rabbitmq
#进入docker rabbitmq
docker exec -it rabbitmq bash
#开启控制台
rabbitmq-plugins enable rabbitmq_management
#guest 不支持远程访问,最好添加一个用户管理
#如果使用阿里云或者腾讯云 记得开放15673端口
#创建账号
rabbitmqctl add_user admin admin
#授权角色
rabbitmqctl set_user_tags admin administrator
#添加权限 成功输出 Setting permissions for user "admin" in vhost "/" ...
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
7常用命令
docker exec -it mysql /bin/bash
docker rmi -f 镜像名:删除镜像
docker start 容器名/容器id:启动容器
docker stop 容器名/容器id:停止容器
docker ps :查看运行的容器
docker ps -a:查看所用容器(已运行、已停止的都有)
docker rm -f 容器名/容器id:删除容器
docker exec -it 容器名/容器id bash:进入容器
docker logs 镜像名:常看日志
docker images 查看本地镜像