
介绍 {#介绍}
因为公司业务需要,自研平台需要适配 TaiShan 200 服务器,本来想独立安装 redis,MySQL 等软件的,但是对 aarch64 架构不太熟悉,问了对接的工作人员,说服务器支持 dcoker ,所以一些不方便安装的软件使用Docker 来安装编译环境。
环境说明 {#环境说明}
- 服务器架构信息如下:

- 内存信息如下

- os 版本如下

这台是 Kylin Linux Advanced Server V10 for ARM 操作系统,是标准的 aarch64 指令集的 ARM 架构服务器。kylin 服务器是基于 redhat 版本的,基本可以等同于 centos,所以熟悉 centos 的朋友操作麒麟应该非常熟练。
由于在线安装的方式,会遇到各种包缺失等提示(ARM 架构的生态目前还比不上 x86 的便利),所以这里选用离线安装的方式。
下载相关文件,认准 aarch64 标识,noarch 代表全架构支持
安装插件 {#安装插件}
$ yum -y install wget vim
安装 Docker {#安装 Docker}
下载软件包安装 {#下载软件包安装}
- 通过仓库下载指定版本的软件包
$ wget https://download.docker.com/linux/static/stable/aarch64/docker-20.10.7.tgz
- 解压 Docker
$ tar -zxvf docker-20.10.7.tgz -C /server/docker
# -C 表示解压存放的文件目录
- 移动目录到 /usr/bin 目录下
# 移动目录
$ cp -rp docker* /usr/bin
# 为使 Docker 可以正常使用,还需要关闭 SELinux 及防火墙。
$ setenforce 0
$ systemctl stop firewalld
$ systemctl disable firewalld
$ systemctl start firewalld
$ systemctl status firewalld
此时只是暂时禁用 SELinux,如果要长期禁用 SELinux,还需要修改 /etc/selinux/config 文件。
将 SELINUX=enforcing 改为 SELINUX=permissive 或 disabled,才能长期有效。
启动 docker.service 服务 {#启动 docker-service 服务}
- 整段执行如下命令,配置 docker.service 文件。
$ cat >/usr/lib/systemd/system/docker.service <<EOF
=========================== 以下为写入内容 ==========================
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target docker.socket
[Service]
Type=notify
EnvironmentFile=-/run/flannel/docker
WorkingDirectory=/usr/local/bin
# 注意这个路径,如果不对将找不到 dockerd 启动程序
ExecStart=/usr/bin/docker/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock --selinux-enabled=false --log-opt max-size=1g
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
- 重启服务器,使修改的配置文件生效。
$ reboot
- 随后启动相关服务,输出 Docker 的状态
$ systemctl daemon-reload
$ systemctl enable docker
$ systemctl start docker
$ systemctl restart docker
$ systemctl status docker
验证 Docker {#验证 Docker}
$ docker -version

安装 JDK {#安装 JDK}
- 下载 JDK
$ wget https://download.oracle.com/otn/java/jdk/8u291-b10/d7fc238d0cbf4b0dac67be84580cfb4b/jdk-8u291-linux-aarch64.tar.gz?AuthParam=1623297465_7186e5be169b0e8492340a0a1a58071e
# 重命名
$ mv jdk-8u291-linux-aarch64.tar.gz\?AuthParam\=1623297465_7186e5be169b0e8492340a0a1a58071e jdk-8u291-linux-aarch64.tar.gz
- 解压 JDK
$ tar -zxvf jdk-8u291-linux-aarch64.tar.gz
- 配置环境变量
$ vim /etc/profile
=========末尾添加以下内容============
#set java environment
JAVA_HOME=/server/jdk/jdk1.8.0_291
CLASSPATH=.:$JAVA_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH

安装 influxdb {#安装 influxdb}
- 下载 influxdb
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.8.4_linux_arm64.tar.gz
- 解压 influxbd
tar -zxvf influxdb-1.8.4_linux_arm64.tar.gz
- 修改 influxdb 配置
# 这是我的配置文件地址,你的可能有所区别
$ vim /server/influxdb/influxdb-1.8.4-1/etc/influxdb/influxdb.conf
================================================================
# Bind address to use for the RPC service for backup and restore.
# 启动地址
bind-address = "127.0.0.1:8088"
# 服务调用地址
bind-address = "127.0.0.1:8086"
- 编辑环境变量
vim /etc/profile
==============================
export INFLUXD_CONFIG_PATH=/server/influxdb/influxdb-1.8.4-1/etc/influxdb/influxdb.conf
- 添加 influxdb 服务到启动项
vim /etc/systemd/system/influxdb.service
============================================
# 写入内容
[Unit]
Description=influxdb service
After=network.target
[Service]
Type=simple
Restart=on-failure
RestartSec=5s
WorkingDirectory=/server/influxdb/influxdb-1.8.4-1/usr/bin
ExecStart=/server/influxdb/influxdb-1.8.4-1/usr/bin/influxd run --config /server/influxdb/influxdb-1.8.4-1/etc/influxdb/influxdb.conf
[Install]
WantedBy=multi-user.target
- 执行启动
systemctl daemon-reload
systemctl enable influxdb
systemctl restart influxdb
systemctl status influxdb
安装 MySQL 和 Redis {#安装 MySQL 和 Redis}
因为已经安装了 Docker ,所以就直接用 Docker 操作了,docker pull 下载 redis 镜像 ,MySQL 是没有 arm 架构的,这个已经在 docker hup 上面确认过了,官方提供的包都是 AMD 和 Linux 架构 ,替代品为mysql/mysql-server ,传送门

- 拉取 redis 和MySQL镜像
$ docker pull redis:latest
$ docker pull mysql/mysql-server:latest
- 查看拉取的镜像
$ docker images

- 启动 MySQL 和redis容器
# 启动 redis
$ docker run --restart=always -dit --name redis -p 6379:6379 -v /server/redis/conf/redis.conf:/redis.conf -v /server/redis/data:/data redis:latest redis-server --appendonly yes
# 启动 MySQL
$ docker run -itd --name mysql -p 3306:3306 -v /server/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=test mysql/mysql-server
=========================================================
# --restart=always 表示随着系统启动自启动容器
# -p 映射的端口号
# -v 挂载目录
# -e 初始化密码
- 测试启动是否成功
$ docker ps

- 进入容器
$ docker exec -it 容器 ID bash
- 查看容器内部信息
$ docker inspect 容器 ID
- 启动或停止已有的容器
# 停止正在运行的容器
$ docker stop 容器 ID
# 启动容器
$ docker start 容器 ID
- 万能命令
# 查看帮助
$ docker 参数 --help
以上都是基于测试环境演示,具体的根据自己环境调试即可,感谢阅读。