라즈베리파이4 라즈비안 환경에 쿠버네티스 클러스터를 구성 중입니다.
2022.08.03 - [Raspberry pi] - 라즈베리파이4 쿠버네티스 설치
그리고 nodejs 기반으로 소소하게 돌리고 있는 어플리케이션들을 하나씩 pod로 만들고 있는데요.
nodejs 기반으로 돌아가는 어플리케이션은 별 이슈없이 도커 이미지로 빌드할 수 있고, 그래서 pod에 심는 것도 어렵지 않습니다.
그런데, 어플리케이션들이 사용 중인 mariadb가 라즈베리파이용으로 만들어진 도커 이미지가 없더라구요.
개인이 만들어 올린게 있기는 한데, 아직 의심병이 있는지라 네임드가 아니면 함부로 내려받기가 꺼림칙 합니다.
그래서 찾아보니 mariadb를 수동으로 도커에 밀어넣어 이미지를 생성하는 예제가 있어 따라해 보았습니다.
원본은 아래 사이트입니다.
https://peppe8o.com/create-a-custom-mariadb-container-with-raspberry-pi-and-docker/
시작합니다.
먼저 작업할 디렉토리를 생성합니다.
$ 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
이제 어플리케이션만 하나씩 도커화 시키면 쿠버네티스에 올릴 수 있겠네요.
만약 도커허브에 올리고자 한다면 초기화 스크립트의 사용자계정과, 패스워드를 환경변수로 빼서 전달 받아 생성하도록 셋팅하면 될 것 같습니다.
'Raspberry pi' 카테고리의 다른 글
퍼시스턴스 볼륨을 사용하면 기존 파일이 사라지는 문제 해결 (0) | 2022.08.11 |
---|---|
도커 레지스트리 (nexus3 oss) 만들기 : 커스텀빌드 이미지 올리기 (0) | 2022.08.10 |
라즈베리파이 쿠버네티스 ConfigMap으로 변수 전달하기 : 동적으로 적용하기 (0) | 2022.08.05 |
라즈베리파이 쿨링팬 제어 쿠버네티스 데몬셋으로 실행하기 : nodejs, GPIO 접근권한 (0) | 2022.08.04 |
라즈베리파이4 라즈비안 쿠버네티스 cni 에러 : failed to find plugin "loopback" in path [/usr/lib/cni] (0) | 2022.08.03 |