Centos7安装docker及mysql,rabbitmq,redis中间件
在CentOS 7上安装Docker可以按照以下步骤进行操作:
一 安装Docker
1.更新系统软件包列表:(不是非必须执行)
sudo yum update -y
2.添加Docker的官方仓库源。创建并编辑/etc/yum.repos.d/docker-ce.repo
文件
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
##### 3.安装Docker引擎
sudo yum install docker-ce -y
##### 4.启动Docker服务并设置开机自启动
sudo systemctl start docker
sudo systemctl enable docker
##### 5.确认Docker已成功安装
docker --version
##### 6.配置镜像加速
进入docker配置的目录
cd /etc/docker/
创建 daemon.json
touch daemon.json
编辑这个文件
vim daemon.json
输入这些内容,其中url改成自己的加速器地址,亦可使用该地址
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}
注意:这个文件是个json文件,如果写入的时候,有空格什么的,会造成在重启docker服务的时候产生报错,非常的坑,一般是这个文件的格式有问题,需要特别要注意
加载配置
systemctl daemon-reload
重启docker服务
systemctl restart docker
开机启动
systemctl enable docker
### 二 安装mysql
##### 1. 创建docker file挂载目录
mkdir /home/mysql/data
##### 2.创建要挂载的mysql配置文件
touch my.cnf
<code>touch my.cnf</code>的内容为:
[mysql]
设置mysql客户端默认字符集
default-character-set=utf8
character-set-database=utf8
[client]
default-character-set=utf8
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
collation_server=utf8_unicode_ci
character_set_server=utf8
skip-character-set-client-handshake
lower_case_table_names = 1
创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
skip_grant_tables
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
##### 3. 创建容器
docker run -d -p 0.0.0.0:3307:3306 --restart=always -e MYSQL_ROOT_PASSWORD="更换为您的mysql的root密码" --name=mysql57 -v /etc/localtime:/etc/localtime -v $PWD/my.cnf:/etc/my.cnf -v $PWD/data:/var/lib/mysql mysql:5.7 --default-authentication-plugin=mysql_native_password
<code>**注意:执行上述命令,由于使用到$PWD,所以需要在服务器的 /home/mysql 这个目录下执行。这样可以挂载当前目录下的目录data和my.cnf到容器中去**</code>
##### 4.查看容器运行情况
```shell
docker ps |grep mysql
上传图片使用:复制本地图片-》ctl+alt+u 即可上传到cnblogs
5.进入容器执行脚本
将脚本test.sql 放到 /home/data中去
进入docker容器中执行脚本:
docker exec -it c42ec1a965d4 /bin/bash
登录容器中的mysql终端
cd /var/lib/mysql
mysql -uroot -pxxxxx
登录成功后,进行创建数据库的操作:
mysql> show databases;
mysql> use mysql go;
#创建test数据库
mysql> CREATE DATABASE `test` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
# 切换到test数据库
mysql> use test;
#执行挂载进来的test.sql
mysql> source /var/lib/mysql/test.sql
回到宿主机查看数据库和文件是否存在:
cd /home/mysql/data
查看 test 数据库是否创建成功
6.外部程序使用数据库
通过 docker ps |grep mysql 看到公开的外部端口为3307
所以比如在springboot应用中配置就是:
spring
#数据库配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master:
url: jdbc:mysql://localhost:3307/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 数据库root账号密码
如果应用是通过docker发布的话,那么需要使用--link的方式来使用,比如
docker run -d -p 9080:9080 --name test_website_2.0 --link mysql57:mysql --link redis:redis -v $PWD/bannerimgs:/bannerimgs -v $PWD/upload:/upload test
--link mysql57:mysql 的意思是:mysql57为容器的名称,mysql 为该容器取的别名,这时使用容器联接时,spring boot的数据源配置就应该为:
spring
#数据库配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master:
url: jdbc:mysql://mysql:3307/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 数据库root账号密码
注意: url: jdbc:mysql://mysql:3307/test
这里的配置
三 redis容器发布
docker run -d --name redis -p 6380:6379 redis --requirepass 123456
注意:如果需要持久化到mysql或者文件,可以同mysql一样挂载相应的配置文件或者目录到redis容器中去
四 rabbitmq的容器发布
这里直接打了一个基础镜像的导出gzip包,链接为:
https://www.alipan.com/s/MpK56gUeHjS
下载到服务器后,比如/home/rabbitmq,执行镜像导入
docker load -i rabbitmq.gzip
docker images |grep rabbitmq
启动容器
docker run -di --name=rabbit -e RABBITMQ_DEFAULT_USER=rabbitmq -e RABBITMQ_DEFAULT_PASS=rabbitmqpwd -p 5617:5617 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 -p 15670:15670 -p 15674:15674 rabbitmq:stomp
此镜像带有management模块和stomp插件,可以进行websock开发支持
应用中使用同mysql,注意区分是直接引用,还是通过容器引用的配置的不同