docker的安装及使用
由于项目的数据库和中间件都会部署在linux系统上,所以使用docker这一工具。
docker的安装
如果嫌麻烦,可以直接安装最新版本
1 | sudo apt update |
安装指定版本可以参考:如何在 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 | sudo mkdir -p /etc/docker |
参考文献:使用阿里云 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 | [mysqld] |
主要是为了配置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了