【记录】在Linux-CentOS7通过Docker部署Ethercalc
Docker重新安装
因为原先版本的容器在调整配置文件后,重启会报错,经排查可能是版本不兼容的问题,所以对旧版本的docker进行卸载,重新安装最新版。
报错信息:
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
卸载容器
1、查看安装过的包:
yum list installed | grep docker
发现本机安装过的旧版本:docker.x86_64,docker-client.x86_64,docker-common.x86_64
2、删除安装的docker相关的包
yum -y remove docker.x86_64
yum -y remove docker-client.x86_64
yum -y remove docker-common.x86_64
安装容器
1、确认CentOS系统版本,安装Docker需内核版本官方要求至少 3.8 以上,建议 3.10 以上
uname -r
2、把yum包更新到最新
yum update
3、安装需要的软件包,yum-util 提供yum-config-manager功能
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
4、设置yum的源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
5、查看核实仓库中docker的版本,我们用的社区版(CE),为免费版本;还有一个版本:企业版(EE),为收费版本。
yum list docker-ce --showduplicates | sort -r
6、安装docker
sudo yum install docker-ce
7、启动docker,设置开机启动
sudo systemctl start docker
sudo systemctl enable docker
8、查看版本
docker version
修改容器配置
1、查看当前容器数据路径
sudo docker info
一般默认是在/var/lib/docker,这样后期会因为容器日志占用太大内存,导致磁盘爆满,进而影响服务器的正常使用,所以我们要修改容器数据的路径,并控制日志的数量和大小
2、修改容器配置
sudo vi /etc/docker/daemon.json
然后配置如下内容:
{
"data-root":"/data/docker/",
"log-driver":"json-file",
"log-opts":{"max-size":"200m","max-file":"3"},
"registry-mirrors":["https://registry.docker-cn.com"]
}
第一行是修改数据路径,我这边修改为/data/docker,
第二、三行是说明日志类型并限制容器日志的大小和数量,我这边是限制单个日志文件大小为200M,数量个数为3个,即每个容器日志最多600M
第四行是指定容器的源
3、加载配置,并重启容器
systemctl daemon-reload
systemctl restart docker
4、再次确认是否生效
安装Ethercalc
用docker安装Ethercalc
1、搜索镜像
sudo docker search ethercalc
2、拉取好评最多的镜像
sudo docker pull audreyt/ethercalc
共1.04G
3、创建数据卷
sudo docker volume create ethercalc_data_20221212
创建数据卷用于后续容器挂载,方便后续数据的迁移等
4、启动容器
sudo docker run -p 9000:8000 -uroot --privileged=true --restart always --cpus 2 -itd --name 20221212_ethercalc -v ethercalc_data_20221212:/dump/ audreyt/ethercalc
-p 9000:8000 代表将容器内的8000端口映射到宿主机的9000端口,这边需要说明的是,如何知道容器内的Ethercalc服务,采用的是8000端口?同样的,如何知道容器内的数据是在哪个路径?
因为当时在官方文档没找到相关说明,我这边采用的是先试运行一个,查看运行的信息,确认端口等信息
sudo docker run -uroot --privileged=true --restart always -it audreyt/ethercalc
可以得知,端口号为8000,由于启用redis失败,存储路径回退到/dump/,稳妥起见,我们进入该目录,先看看里面有什么,然后再建一个新的线上表,模拟一些数据后,发现确实多了三个文件,cat文件后里面的内容和模拟数据一致,至此确定文件存储目录。
-uroot:是给了 root 用户身份,但并没有真正的 root 权限
–privileged:真正让当前用户有了 root 权限
否则容器在运行的过程中,可能存在因为权限问题,无法正常创建及读写
–restart always,是为了保证该容器在docker重启后,可以自动启动
–cpus 2,是为了限制该容器可以调动cpu的数量,避免占用cpu太多,影响服务器其它应用。
-v ethercalc_data_20221212:/dump/,这边采用的是具名挂载。
数据卷挂载方式有三种:
-v 容器内路径 #匿名挂载(数据卷名称随机生成)
-v 卷名:容器内路径 #具名挂载(数据卷名称是自行取的)
-v /宿主机路径:容器内路径 #指定路径挂载(数据卷位置是指定宿主机的某个路径)
–name 20221212_ethercalc,对容器进行命名,若没有指定,则名字随机生成
进入容器安装redis
这一款镜像没有带有redis,我们可以自己再加上。有redis加持之后,线上表的服务能力会更强、更稳定。(这个也是之前踩的一个大坑)
1、查询容器ID
sudo docker ps
2、进入容器
sudo docker exec -it 容器ID /bin/bash
3、下载redis
cd /usr/local #进入指定路径
mkdir redis #创建文件
wget http://download.redis.io/releases/redis-5.0.3.tar.gz #下载安装包
tar -zxvf redis-5.0.3.tar.gz #解压缩包
cd redis-5.0.3 #进入解压文件
make #编译
cd src #进入src文件夹
make install PREFIX=/usr/local/redis #指定安装位置进行安装
mkdir /usr/local/redis/etc #创建文件夹
4、修改redis配置
此时默认的配置文件路径为:/usr/local/redis/redis-5.0.3/redis.conf
正常情况下,我们可以通过vi/vim对文件直接进行修改
然而发现在容器中无法使用vi,也无法使用yum。所以干脆复制到宿主机进行修改,然后复制回去。
需要修改的配置:
都在前200行内
将这行注释掉,表示可以远程访问
这个改为yes 表明需要在后台运行
修改完,将其复制到容器内
sudo docker cp /usr/local/redis/etc/redis.conf 20221212_ethercalc:/usr/local/redis/etc/redis.conf
容器和宿主机文件交互:
从容器内复制到宿主机
sudo cp 容器名:容器内文件路径 宿主机文件路径
从宿主机复制到容器内
sudo cp 宿主机文件路径 容器名:容器内文件路径
5、设置redis开机自启动
和上一步一样,我们可以先在宿主机做好修改,再复制进去
创建一个文件名为:rc.local,在里面添加如下命令:
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
在复制到容器内之前,先要在容器内,创建指定文件夹
mkdir /etc/rc.d
然后在宿主机进行复制操作
sudo docker cp /etc/rc.d/rc.local 20221212_ethercalc:/etc/rc.d/rc.local
6、启动redis
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
7、重启Ethercalc
先查询原来任务的进程id
杀死进程
kill -9 进程号
正常情况下,需要再执行启动Ethercalc
node /usr/local/bin/ethercalc
但容器内应已设置自动启动,Ethercalc已经新启动一个进程了
8、退出容器
CTRL+Q+P(退出不关闭)