Docker MySQL 미러 구축 및 초기화
Docker MySQL 미러 구축 및 초기화
docker를 사용하여 직접pull MySQL의 이미지를 만드는 것은 간단하지만 용기에 대한 초기화 작업이 필요할 때가 있습니다. 예를 들어 프로필을 마운트하고 데이터베이스를 초기화하는 등 Dockerfile을 교묘하게 활용해야 합니다.
Dockerfile의 일반적인 구문
docker는 Dockerfile을 통해 새로운 이미지를 구축할 수 있으며 Dockerfile의 작성을 파악하는 것이 Docker 입문 학습의 첫걸음이다.
FROM
Dockerfile의 첫 번째 명령은 기본 렌즈를 지정합니다. 즉, 당신의 렌즈가 어떤 렌즈를 바탕으로 구축되었는지.예를 들어 여기서 나는 MySQL 기반의 거울을 만들려고 한다. 그러면
FROM mysql
거울 뒤에 특정 버전을 지정할 수 있습니다. 없으면 기본적으로latest입니다.
FROM mysql:5.7.25
RUN
컨테이너에서 지정된 명령을 실행합니다.
두 가지 명령 형식이 있습니다.
RUN
RUN ["executable", "param1", "param2"]
주의해야 할 것은 Dockerfile의 모든 명령은 한 층의 거울을 구축할 것이다. 만약 여러 개의 RUN 명령이 있다면, 가능한 한 여러 개의 RUN 명령으로 작성된 것을 분리하지 마라. 이것은 거울이 여러 층으로 쌓이고 비대하며 오류가 발생하기 쉽다는 것이다.한 문장을 쓰거나 sh 파일에 대량으로 실행하는 것을 권장합니다.
CMD
명령 형식은 RUN과 유사하지만 RUN은 컨테이너를 구축할 때 실행하는 명령과 실행 결과를 제출하는 명령이며, CMD는 컨테이너를 시작할 때 실행하는 명령을 지정하며 구축할 때 실행하지 않는다.
주의해야 할 것은 RUN이 여러 개가 있을 수 있고 하나하나가 작용할 수 있다는 것이다.CMD도 여러 개가 있을 수 있지만 마지막 하나만 기준이다.
ENV
환경 변수를 설정합니다.
두 가지 명령 형식이 있지만, 작용은 같다.
ENV
ENV = ...
COPY
파일을 컨테이너에 복사합니다.
공통 명령 형식
COPY ...
COPY ["",... ""]
ADD
컨테이너에 파일을 포장하면 COPY의 업그레이드 버전으로 이해할 수 있습니다.
ADD ...
ADD ["",... ""]
이 중 ADD
는 로컬 파일뿐만 아니라 URL(wget 유사)도 지원한다.WORKDIR
컨테이너에서 명령을 실행할 때 사용할 작업 디렉토리를 설정합니다.
WORKDIR
EXPOSE
용기가 감청하는 내부 포트를 외부로 노출시키고 외부에서 내부 포트에 접근해야 할 경우 포트 맵을 지정해야 합니다.
EXPOSE
자체 초기화된 MySQL 미러링 구축
Dockerfile
먼저 Dockerfile은 이렇게 길고 구체적인 명령에는 설명이 있습니다.핵심 논리는 세 개의 파일을 복사해서 용기가 시작될 때setup을 실행하는 것이다.sh, setup.sh는 다른 두 파일을 실행합니다.
FROM mysql:5.7.25
# allow no password
ENV MYSQL_ALLOW_EMPTY_PASSWORD yes
# copy file into container
COPY setup.sh /mysql/setup.sh
COPY schema.sql /mysql/schema.sql
COPY privileges.sql /mysql/privileges.sql
# exec these command when container start up
CMD ["sh", "/mysql/setup.sh"]
여기에 우선 비밀 면제 로그인을 허용하는 것은 뒤에 설정하는 것을 편리하게 하기 위해서이며, 비밀번호는 마지막에privileges를 통과한다.sql로 설정합니다.
시작 스크립트
setup.sh의 역할은 MySQL 서비스를 시작한 다음에 두 개의 ql 파일을 실행하는 것이다.
#!/bin/bash
set -e
echo '1. starting mysql...'
service mysql start
echo '2. creating database...'
mysql < /mysql/schema.sql
# set password
echo '3. setting password....'
mysql < /mysql/privileges.sql
# check mysql status
echo `service mysql status`
echo '4. mysql for baobaozhuan is ready...'
tail -f /dev/null
schema.sql
일부 데이터베이스에 대한 초기화 작업은 여기에 놓을 수 있다. 예를 들어 여기에 우리는 데이터베이스를 만들어야 한다.물론 표를 작성하고 데이터를 삽입하는 것은 모두 가능하다.
create database if not exists baobaozhuan;
privileges.sql
이 파일은 MySQL에 대한 권한 설정입니다. 예를 들어 사용자 비밀번호 설정, 새 사용자 만들기, 데이터베이스 권한 수여 등입니다.
다음 두 가지는 매우 중요합니다. 처음에 권한을 부여하지 않았는데, 결과적으로 goserver는 docker 안의 MySQL 서버에 연결되지 않았습니다.
use mysql;
-- new user
set password for root@localhost = password('SYSU_baobaozhuan2019');
-- important
grant all on *.* to root@'%' identified by 'SYSU_baobaozhuan2019' with grant option;
-- use privileges
flush privileges;
프로젝트에 오신 것을 환영합니다.https://swsad-dalaotelephone.github.io/docs/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AtCoder Beginner Contest 132 Fii i 블록의 수량은 N i - N i + 1\rac {N} {i} -\rac {N} {i+1} iN - i+1N 수학적 증명은 할 수 없지만 예를 들면 이해하기 쉽다.예를 들어 첫 번째 블록은 111에 의해 유일...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.