Raspberry pi

라즈베리파이4 도커허브에 없는 오픈소스 직접 빌드하기 : mariadb

[혜안] 2022. 8. 8. 15:00
728x90

라즈베리파이4 라즈비안 환경에 쿠버네티스 클러스터를 구성 중입니다.

2022.08.03 - [Raspberry pi] - 라즈베리파이4 쿠버네티스 설치

 

라즈베리파이4 쿠버네티스 설치

결국 라즈비안 64bit를 포기하고 32bit로 설치를 진행했습니다. 설치한 버전은 PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)" NAME="Raspbian GNU/Linux" VERSION_ID="11" VERSION="11 (bullseye)" VERSION_CO..

viewise.tistory.com

 

그리고 nodejs 기반으로 소소하게 돌리고 있는 어플리케이션들을 하나씩 pod로 만들고 있는데요.

nodejs 기반으로 돌아가는 어플리케이션은 별 이슈없이 도커 이미지로 빌드할 수 있고, 그래서 pod에 심는 것도 어렵지 않습니다.

그런데, 어플리케이션들이 사용 중인 mariadb가 라즈베리파이용으로 만들어진 도커 이미지가 없더라구요.

개인이 만들어 올린게 있기는 한데, 아직 의심병이 있는지라 네임드가 아니면 함부로 내려받기가 꺼림칙 합니다.

 

그래서 찾아보니 mariadb를 수동으로 도커에 밀어넣어 이미지를 생성하는 예제가 있어 따라해 보았습니다.

원본은 아래 사이트입니다.

https://peppe8o.com/create-a-custom-mariadb-container-with-raspberry-pi-and-docker/

 

Create a Custom MariaDB Container with Raspberry PI and Docker

Raspberry PI has an ARM architecture. While newer boards has 64-bit ARM CPU, official Raspberry PI OS is still running at 32-bit and many Docker official images

peppe8o.com

 

 

시작합니다.

 

먼저 작업할 디렉토리를 생성합니다.

$ mkdir mariadb_custom
$ cd mariadb_custom

그리고 Dockerfile을 작성합니다.

$ vi Dockerfile
FROM debian
RUN apt update -y && apt install mariadb-server -y
RUN sed -i 's/bind-address/bind-address = 0.0.0.0 #/i' /etc/mysql/mariadb.conf.d/50-server.cnf
RUN mkdir /mysql_scripts
COPY mySqlScript.sql /mysql_scripts/
RUN /etc/init.d/mariadb start && mysql -uroot --password="" -e "source /mysql_scripts/mySqlScript.sql"
CMD /etc/init.d/mariadb start && tail -f /dev/null

내용을 요약하자면,

debian 이미지 기반으로 mariadb를 설치하고,

외부접근 허용 설정,

초기화 스크립트를 복사해 넣고, 초기화를 실행하는 명령들입니다.

그리고 마지막에 mariadb를 실행합니다.

맨 끝에 tail 이 붙은 이유는, CLI를 붙잡고 있어야 컨테이너가 종료되지 않기 때문이라고 하네요.

 

Dockerfile 작성은 끝났고,

초기화 스크립트를 작성해야 합니다.

접근가능한 사용자를 생성해야 하고, 저같은 경우는 사용할 어플리케이션 용 테이블 생성 스크립트도 같이 넣었습니다.

우선 사용자 생성은 필수이니 원본링크처럼 사용자 생성 스크립트만 기술하겠습니다.

$ vi mySqlScript.sql

create user [사용자계정]@'%' identified by '[사용자패스워드]';
grant all privileges on *.* to [사용자계정]@'%';
flush privileges;
quit

[사용자계정] [사용자패스워드] 란에는 실제 사용할 계정과 패스워드로 바꿔 넣으면 됩니다.

 

원본링크에서는 Docker Compose 까지 다루었지만,

저는 쿠버네티스에 올릴꺼라 여기까지만 하고 이미지를 생성해 올렸습니다.

$ sudo docker build -t becans/mariadb-arm7:0.3 .

$ docker images
REPOSITORY                   TAG          IMAGE ID       CREATED        SIZE
becans/mariadb-arm7          0.3          cf07319ec3d8   1 hours ago   542MB

apt를 통한 설치와 설정이 순서대로 실행되고, 이미지가 생성되었습니다.

 

실행을 해보았습니다.

mariadb 기본포트인 3306을 그대로 포워딩하여 실행했습니다.

$ docker run --name mymariadb -p 3306:3306 -d becans/mariadb-arm7:0.3

$ docker ps
CONTAINER ID   IMAGE                     COMMAND                  CREATED        STATUS        PORTS                    NAMES
3fb833db1e68   becans/mariadb-arm7:0.3   "/bin/sh -c '/etc/in…"   1 hours ago   Up 1 hours   0.0.0.0:3306->3306/tcp   mymariadb

 

실행하고 포트 확인을 해보니 docker-proxy가 3306을 잡고있는게 보입니다.

$ sudo netstat -nap |grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      23223/docker-proxy

 

이제 어플리케이션만 하나씩 도커화 시키면 쿠버네티스에 올릴 수 있겠네요.

 

만약 도커허브에 올리고자 한다면 초기화 스크립트의 사용자계정과, 패스워드를 환경변수로 빼서 전달 받아 생성하도록 셋팅하면 될 것 같습니다.

 

728x90