시놀러지 NAS 에 Docker 를 인스톨 하고 있으면, 복수의 화상(프로그램)을 다운로드 할 수 있다.나는 데이터베이스를 서버에 구축하는 것이 목적이기 때문에 mysql을 다운로드했어.1.이미지 다운로드 및 초기설정
컨테이너 이름은 적절하게 지도록 하고 고급 설정에 들어가 초기 세팅을 해야 한다.Container는 말 그대로 프로그램을 실행할 수 있는 창고이며 아무런 세팅이 되어 있지 않다. 따라서 웹사이트에서 다운로드하면 기본적으로 설정된 기본값을 수동으로 설정해야 실행된다.
우선 반드시 설정해야 하는 것은 포트 설정이다.컨테이너도 종료해 재기동하는 경우, 외부 접속을 위한 로컬 포트를 라우터(라우터)로부터 받는 것이 기본값이지만. 포트값이 계속 바뀔 경우 mysql workbench 혹은 Deaver 등으로 접속하는 포트 설정을 매번 바꿔야 하므로 포트값은 고정해 두는 것이 좋다. Local port를 설정한 후 라우터에서 Port-forwarding도 함께 설정해 주는 것을 잊지 말자.
포트는 중복되지 않도록 입맛에 맞게 설정해도 상관없다
그리고 두 번째로 꼭 설정해야 하는 것은 Database의 초기 설정이다.Oracle의 경우 Dataspace 할당 → Database 생성(system, sys 관리자 계정 자동 생성) → 관리자 비밀번호 초기 설정(설치 시)이 기본이지만 Docker의 경우 Database 생성 → 관리자가 root로 설정(끝?)되어 있기 때문에 나머지 기본값을 설정해주지 않으면 컨테이너가 실행되자마자 종료된다.(관리자 연결을 해야하는데 관리자 계정 세팅이 안되고 사용자 계정도 없어서 초기 실행 오류가 발생한다) 나는 처음 설치했을 때 왜 실행되자마자 계속 꺼지는지 몰랐다.
처음 컨테이너를 실행할 때 설정되어 있는 값
여기에 기본적으로 추가해야 할 변수는 다음과 같다.추가 필요 변수 설명 예 MYSQL_ROOT_PASSWORD 관리자 계정(root) 비밀번호 1234MYSQL_USER 관리자 계정 이외의 사용자 계정 PCDBKKMYSQL_PASSWORD 사용자 계정 비밀번호 1234MYSQL_DATABASE 데이터베이스 이름 finance_project추가 필요 변수 설명 예 MYSQL_ROOT_PASSWORD 관리자 계정(root) 비밀번호 1234MYSQL_USER 관리자 계정 이외의 사용자 계정 PCDBKKMYSQL_PASSWORD 사용자 계정 비밀번호 1234MYSQL_DATABASE 데이터베이스 이름 finance_project어쨌든 여기까지라면 컨테이너 초기 설정 및 외부 접속까지는 완료된 셈이다. Container 내 mysql 권한 부여 및 초기 설정2021년 12월 현재 시놀러지 나스의 mysqlversion은 8.0이다. 따라서 그 이전의 언어는 호환성이 없기 때문에 언어는 8.0 이상의 언어에 맞게 실행해야 한다.mysql은(다른 데이터베이스 프로그램도 마찬가지이지만 관리자 계정(mysql은 root, oracle은 sys, system)의 외부 접속이 막혀 있다. 이것의 외부 접속을 해제하는 방법도 있지만, 보다 나은 것은 사용자에게 데이터베이스 권한 전체를 부여하는 방법이다.이 부분은 container 안의 terminal에 들어가서 초기 쿼리를 입력해야 한다.컨테이너 세부 설정 항목에 들어가면 terminal 입력란이 있다. 여기에 아래와 같은 쿼리를 입력하여 권한을 부여한다. (권한을 부여하지 않으면. mysql 접속 자체는 가능하지만 권한이 없기 때문에 데이터 테이블의 생성, 삭제, 수정을 아무것도 할 수 없다.) mysql container 중 권한 부여먼저 Docker 안의 mysql Container의 ‘상세’로 접속하여 terminal을 켠다.그리고 왼쪽 상단의 ‘실행’ 버튼을 누르면 Bash와 쿼리를 입력하고 실행할 수 있는 창이 열린다.우선 아까 처음 데이터베이스를 만들 때 1) 초기 데이터베이스를 만들고 2) USER를 만들고 3) user 비밀번호까지 설정했다.터미널 bash에서 아래 스크립트를 입력한다.1. 관리자 권한으로 접속하는[font-uroot-p]mont-uroot-p관리자 권한으로 접속하는 쿼리이다. 입력하면 비밀번호를 입력하라고 뜨는데 설정한 비밀번호를 입력하면 된다.2. 생성된 데이터 테이블 표시데이터베이스를 표시하다아까 만들어놓은 데이터 테이블을 확인한다. Finance execution으로 해놨는데 그게 확인이 돼.데이터베이스를 표시합니다.추가적으로 sql 쿼리는 모두;를 입력해야 그것으로 끝이 실행된다. ; 을 치지 않으면 다음 쿼리를 치도록 추가적인 row가 생성된다.3. 접속한 관리자 계정에서 mysql 이용설정 관리자 권한으로 권한설정 등을 해야 하므로 mysql을 이용한다는 쿼리를 쳐준다.mysql을 사용한다.mysql을 사용한다.4. 사용자를 확인한다호스트를 선택하고 사용자에서 사용자를 선택합니다.권한을 부여할 계정을 확인한다.여기서 host에서 localhost는 직접 연결된 호스트만 접속 가능하다는 뜻이고 %는 외부 접속을 허용한다는 뜻이다.5. 사용자에게 권한 부여grant privileges on 데이터베이스. 테이블명 to ‘userid’@’호스트 타입’; flush privileges;sql 쿼리에서는 *를 치면 ‘모든 것’이라는 뜻이 된다.모든 데이터베이스의 모든 테이블에 대해 권한을 부여하고 싶다면 *.*를 입력하면 된다.그리고 쿼리를 입력한 후 그에 시스템에 적용시킬 문구가 flush privileges;이다. 권한 적용을 메모리에 적용시키지 않으면 지금까지는 모두 비메모리로만 돌아갔기 때문이다. 종료하자마자 휘발되어 버린다.6. mysql workbench/Dbeaver 접속1) hostname에는 서버가 LAN에 물려있는 IP를 입력해준다2) port는 처음 sql container를 만들 때 설정한 local port를 입력해준다(container port가 아님)3) username:새로 생성한 사용자 계정명을 입력하고 비밀번호를 입력해준다.4) Test Connection을 하여 잘 연결되는지 확인한다.PS. 하나의 데이터베이스를 만들면 자주 접속이 되는데 동일 프로그램에 대해 컨테이너를 여러개 실행할 때 Lost Connection to MySQL server at ‘reading initial communication packet’, Systemerror:0 이 뜨면서 접속이 안되는 문제점이 있어 해결 중이다. 찾아보니 SQL 프로그램 자체의 문제점이 아니라 OS 방화벽 문제라고 합니다. 이건 어떻게 해결해야 할지 모르겠네. 좀 찾아봐야 할 것 같다.