由于项目的数据库和中间件都会部署在linux系统上,所以使用docker这一工具。

docker的安装

如果嫌麻烦,可以直接安装最新版本

1
2
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

安装指定版本可以参考:如何在 Ubuntu 20.04 上安装和使用 Docker

docker的运行及配置

运行docker

1
systemctl start docker

查看docker现有的镜像

1
docker images

设置docker开机自启动

1
systemctl enable docker

容器开机自启动

1
docker update ($docker ps -a -q) --restart=always

配置下载地址

docker的配置最主要就是配置下载地址,选用国内的阿里云镜像下载地址,依次执行:

1
2
3
4
5
6
7
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json<<-'EOF'
{
"registry-mirrors":["htte6jcuw6y. mirror.aliyuncscom"]
}
EOF
sudo systemctl daemon-reload

参考文献:使用阿里云 docker 镜像加速

使用例:docker安装mysql

安装

1
docker pull mysql

也就是下载mysql的标准镜像文件到本地docker库中

创建mysql实例并运行

好比java中类的概念,镜像文件就是Bean;docker创建实例的行为就好比Bean的实例化,只有先实例化一个Bean的对象才能够使用其中的方法;而docker的容器就是jvm栈区,用于存放实例化的对象。
现在我们试创建一个mysql的实例化并运行

1
docker run -itd --name mysql-test -p 3306:3306 -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/data/mysql -v /mydata/mysql/conf.d:/etc/mysql.d -e MYSQL_ROOT_PASSWORD=123456 mysql

注意这行命令的参数可以体现docker虚拟化的一些特征:
-p port1:port2,即将软件在docker的内部端口port2映射到主机(linux设备)的port1端口,意思是访问主机的port1端口,相当于访问docker内部的port2端口;-v /file1:/file2,即将软件在docker内部的文件映射到本机的存储上,意思是修改主机的file1中的文件,就相当于修改了docker内部file2中的文件,二者具有同等效力;而-e就是mysql常规的参数,配置mysql的密码等,-itd就是-i、-t、-d合在一起的,-d作用就是将该容器以守护线程的形式后台开启
所以为什么docker会给出这些参数呢?因为docker运行的软件是一个黑匣子嘛,里面的所有东西外面都是不好看到的,所以要预留一些特殊通道供外面看到(访问)喽。
不过总之是运行起来了

但是用户也可以手动进入docker内部,例如进入一下mysql的内部文件:

1
docker exec -it ID /bin/bash

-it表示交互关系,ID表示mysql的容器id,运行后docker不是分配了一个id嘛,取前三个就可以了。这里就不多演示了。

配置

之后写入mysql的配置文件,就在映射的文件 /mydata/mysql里写一个my.cnf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DAERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

主要是为了配置utf编码

完成安装

最后重启容器:

1
docker restart ID

依然是取前三个就行了

这样就算安装完成了,外部机器访问本机(linux设备)的3306端口就可以访问到mysql了

使用例:docker安装redis

安装

拉取镜像:

1
docker pull redis

创建实例并运行

1
docker run -itd --name redis-test -p 6379:6379 -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf

redis默认指定的端口是6379
其中-d表示以/etc/redis/redis.conf中的配置文件后台运行,而/etc/redis/redis.conf不是映射到/mydata/redis/conf/redis.conf了吗?所以实际上在外部配置配置文件就可以了。
配置就不多说了,最主要的持久化功能新版redis已经默认支持了

完成安装

外部机器访问本机(linux设备)的6379端口就可以访问到redis了