Docker MySQL 미러 구축 및 초기화

문서 목록
  • DockerMySQL 미러 구축 및 초기화
  • Dockerfile의 일반적인 구문
  • FROM
  • RUN
  • CMD
  • ENV
  • COPY
  • ADD
  • WORKDIR
  • EXPOSE
  • 자체 초기화된 MySQL 미러링 구축
  • Dockerfile
  • 시작 스크립트
  • schema.sql
  • privileges.sql

  • 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/

    좋은 웹페이지 즐겨찾기