【SOP 系列 09】如何在Mac M1上使用 Docker 玩 OceanBase

随着 OceanBase 社区版 3.1.3 版本的发布,OceanBase 社区版开始支持在 ARM 平台上运行了,之前很多使用 Mac M1 的小伙伴是否还在苦于没有学习 OceanBase 的实操环境呢,本着授人以鱼不如授人以渔,这里我们来介绍如何使用 Dockerfile 来制作一个 OceanBase 的镜像,让 OceanBase 可以在 Mac M1 上 run 起来。

说明: 目前的镜像还不完善,存在诸多问题,例如:

  • 没有设置挂载目录做持久化
  • 启动容器后还需要手动执行 OceanBase 初始化
  • 镜像太大(2.44G)

本文仅作为一个抛砖引玉的作用,使用者可以根据需要添加和优化完善相关的步骤。

拉取 CentOS 7 的基础镜像

docker pull centos:7

宿主机上目录/文件创建

mkdir -p ~/Desktop/docker_test
cd ~/Desktop/docker_test
mkdir script ob_rpm
touch Dockerfile

下载部署 OceanBase 相关的 rpm 包

cd ~/Desktop/docker_test/ob_rpm
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/aarch64/oceanbase-ce-3.1.3-10100032022041510.el7.aarch64.rpm
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/aarch64/oceanbase-ce-libs-3.1.3-10100032022041510.el7.aarch64.rpm
wget http://mirror.centos.org/altarch/7/os/aarch64/Packages/libatomic-8.3.1-2.1.1.el7.aarch64.rpm
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/aarch64/libobclient-2.0.1-3.el7.aarch64.rpm
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/aarch64/obclient-2.0.1-2.el7.aarch64.rpm


lixiaodong@B-Q0NFQ05P-0725 docker_test % ls -lrt ob_rpm
total 424152
-rw-r--r--@ 1 lixiaodong  staff   38365272  4 20 22:21 oceanbase-ce-3.1.3-10100032022041510.el7.aarch64.rpm
-rw-r--r--@ 1 lixiaodong  staff     147536  4 20 22:29 oceanbase-ce-libs-3.1.3-10100032022041510.el7.aarch64.rpm
-rw-r--r--@ 1 lixiaodong  staff      35284  4 20 23:03 libatomic-8.3.1-2.1.1.el7.aarch64.rpm
-rw-r--r--@ 1 lixiaodong  staff  177748040  4 20 23:32 obclient-2.0.1-2.el7.aarch64.rpm
-rw-r--r--@ 1 lixiaodong  staff     859640  4 20 23:42 libobclient-2.0.1-3.el7.aarch64.rpm
lixiaodong@B-Q0NFQ05P-0725 docker_test %

script 脚本内容

lixiaodong@B-Q0NFQ05P-0725 docker_test % pwd
/Users/lixiaodong/Desktop/docker_test

lixiaodong@B-Q0NFQ05P-0725 docker_test % cat script/mkdir_ob.sh
mkdir -p /home/admin/oceanbase/store/obtest/{sstable,clog,ilog,slog}
chown -R admin:admin /home/admin/oceanbase


lixiaodong@B-Q0NFQ05P-0725 docker_test % cat script/init_ob.sh
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase/lib' >> ~/.bash_profile
source ~/.bash_profile
cd ~/oceanbase && bin/observer -i lo -p 2881 -P 2882 -z zone1 -d ~/oceanbase/store/obtest -r '127.0.0.1' -c 1 -n obtest -o "memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=4G,memory_chunk_cache_size=128M,cpu_count=16,net_thread_count=4,datafile_size=10G,stack_size=1536K"

Dockerfile 文件内容

FROM centos:7
RUN useradd -ms /bin/bash admin
ADD ./ob_rpm/*.rpm /opt/ob_rpm/
RUN yum install -y /opt/ob_rpm/*.rpm && yum clean all && rm -rf /opt/ob_rpm

COPY ./script/mkdir_ob.sh /home/admin
RUN sh /home/admin/mkdir_ob.sh
USER admin
COPY ./script/init_ob.sh /home/admin
WORKDIR /home/admin
RUN sh /home/admin/init_ob.sh
CMD ["/bin/bash"]

build docker 镜像

lixiaodong@B-Q0NFQ05P-0725 docker_test % pwd
/Users/lixiaodong/Desktop/docker_test

docker build -t obce-3.1.3-for-mac-m1-v1 ./

注意:

如果在 build 的时候无法连接外网,需要按照如下调整一下,如果可以连外网不用修改。

将标红的这里调整为 false

否则在 Docker build 的时候可能会遇到如下问题:

Docker 镜像确认

lixiaodong@B-Q0NFQ05P-0725 docker_test % docker images obce-3.1.3-for-mac-m1-v1
REPOSITORY                 TAG       IMAGE ID       CREATED              SIZE
obce-3.1.3-for-mac-m1-v1   latest    30c887917038   About a minute ago   2.44GB
lixiaodong@B-Q0NFQ05P-0725 docker_test %

使用制作的镜像拉起一个容器

lixiaodong@B-Q0NFQ05P-0725 docker_test % docker run -itd --name obce-3.1.3-bp1 --privileged obce-3.1.3-for-mac-m1-v1
2fefe043cf5d5246e6f82b6eeecd1982543e87ba29ce206bf7661863f880e14a

登录容器

docker exec -it obce-3.1.3-bp1 /bin/bash

说明:这里可以指定容器的 id,也可以根据启动容器的时候指定的 name,具体以实际的命名为准。

登录容器后执行:

1、sh init_ob.sh

2、间隔 5-10 秒(保险期间)

3、初始化 OceanBase

[admin@2fefe043cf5d ~]$ obclient -h127.0.0.1 -P2881 -uroot -p
Enter password:
Welcome to the OceanBase.  Commands end with ; or \g.
Your MySQL connection id is 3221225472
Server version: 5.7.25 OceanBase 3.1.3 (r10100032022041510-a09d3134c10665f03fd56d7f8bdd413b2b771977) (Built Apr 15 2022 02:16:17)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> set ob_query_timeout=100000000000;
Query OK, 0 rows affected (0.002 sec)

MySQL [(none)]> alter system bootstrap ZONE 'zone1' SERVER '127.0.0.1:2882';
Query OK, 0 rows affected (15.230 sec)

MySQL [(none)]> select version();
+--------------------+
| version()          |
+--------------------+
| 3.1.3-OceanBase CE |
+--------------------+
1 row in set (0.001 sec)

说明:初始化的时候,登录时不能写成 root@sys,因为初始化其中一个步骤才会创建 sys 租户。

4、登录 OceanBase 测试

[admin@2fefe043cf5d ~]$ obclient -h127.0.0.1 -P2881 -uroot@sys -p
Enter password:
Welcome to the OceanBase.  Commands end with ; or \g.
Your MySQL connection id is 3221487630
Server version: 5.7.25 OceanBase 3.1.3 (r10100032022041510-a09d3134c10665f03fd56d7f8bdd413b2b771977) (Built Apr 15 2022 02:16:17)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>
2 个赞

学习学习~

1 个赞

有使用 Mac M1 的小伙伴一起来试试吧~

1 个赞