docker構建percona容器

本文主要描述使用docker構建percona容器,並根據官方的percona鏡像構建自己需要Dockerfile文件

注意:使用docker,系統至少是CentOS6.5以上。

一、安裝docker軟件

1.添加epel

# rpm -ivhhttp://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

2.安裝docker程序,主程序是docker-io

# yum install –y docker-io



二、percona官方鏡像導入並運行容器。

1、要將官方製作好的percona鏡像pull進來(這個過程比較慢)

搜索官方的percona鏡像倉庫

docker search percona

NAME                                       DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED

percona                                    Percona Server is a fork of the MySQL rela...   19        [OK]       

paulczar/percona-galera                                                                    6                    [OK]

klevo/percona                              Percona MySQL server supporting replicatio...   1                    [OK]

nicescale/percona-mysql                    Percona MySQL for NiceScale, support conne...   1                    [OK]

wangyuntao/percona                                                                         0                    [OK]

freshbooks/percona                                                                         0                    [OK]

playlist/percona                                                                           0                    [OK]

tyjak/percona-sphinxse                     percona 5.5 with sphinxse                       0                    [OK]

assembla/percona                                                                           0                    [OK]

internavenue/centos-percona                                                                0                    [OK]

lagotto/percona                                                                            0                    [OK]

mkaag/percona                                                                              0                    [OK]

inviqa/percona                                                                             0                    [OK]

vixns/percona-cluster                                                                      0                    [OK]

servicerocket/docker-percona-with-backup                                                   0                    [OK]

strapdocker/percona                                                                        0                    [OK]

psoutham/percona-tk                                                                        0                    [OK]

rocketgraph/docker-percona-node                                                            0                    [OK]

vincentserpoul/percona                     Percona 5.6 with external storage on anoth...   0                    

syslogic/docker-percona-galera                                                             0                    [OK]

jmdejager/docker-percona-galera                                                            0                    [OK]

bryanlatten/percona                                                                        0                    [OK]

kverma/percona                             Fork of official percona image but with lo...   0                    [OK]

graemej/percona                            Percona server for use in CI environments.      0                    [OK]

erickbrower/percona                                                                        0                    [OK]



找到官方倉庫並導入

docker pull percona:5.6

注:我這裏導入是的我需要的5.6版本,一般直接導入percona即可。

注:官方percona是基於debian:wheezy鏡像製作的。

2、查看自己最新pull的鏡像可以使用

docker images

3現在就可以生成新的容器了

docker -d -eMYSQL_ROOT_PASSWORD=“密碼”-P percona:5.6

注:-d daemon的方式在後臺運行

-e 可以設置mysql的管理密碼

-P 將容器內部的3306端口映射到宿主機的隨機端口

-p ip:hostPort:containerPort |ip::containerPort | hostPort:containerPort | containerPort     指定宿主機的端口

-v /host:/container  可以指定容器使用的目錄


二、構建自己需要的Dockerfile文件

由於官方的percona裏面的配置文件不符合自身需求,所以要用自己的my.cnf文件構建新的鏡像。

1.到官網下載perconaDockerfile以及相關配置文件,根據官網的文件進行修改

Docker官方倉庫:https://registry.hub.docker.com/

搜索percona下載官方的percona文件

注:Dockerfile是構建percona的文件

docker-entrypoint.sh是容器啓動時運行的腳本

2.創建docker目錄,方便管理自己的Dockerfile

# mkdir /root/docker

將這兩個文件放到docker目錄下,另外還有自己配置好的my.cnf也放入此目錄下

3.修改Dockerfiledocker-entrypoint.sh文件

注:***字體是修改部分

Dockerfile文件:

# vim:set ft=dockerfile:

FROM debian:wheezy

 

# add our user and group firstto make sure their IDs get assigned consistently, regardless of whateverdependencies get added

RUN groupadd -r mysql&& useradd -r -g mysql mysql

 

RUN apt-key adv --keyserverha.pool.sks-keyservers.net --recv-keys 430BDF5C56E7C94E848EE60C1C4CBDCDCD2EFD2A

 

RUN echo 'debhttp://repo.percona.com/apt wheezy main' > /etc/apt/sources.list.d/percona.list

 

ENV PERCONA_MAJOR 5.6

ENV PERCONA_VERSION5.6.24-72.2-1.wheezy

 

RUN apt-get update \

    && apt-get install -y \

       percona-server-server-$PERCONA_MAJOR=$PERCONA_VERSION \

    && rm -rf /var/lib/apt/lists/* \

    && rm -rf /var/lib/mysql \

    && mkdir /var/lib/mysql \

    && sed -ri 's/^(bind-address|skip-networking)/;\1/'/etc/mysql/my.cnf

 

VOLUME /var/lib/mysql

 

COPY docker-entrypoint.sh /

COPY my.cnf /

 

ENTRYPOINT["/docker-entrypoint.sh"]

 

EXPOSE 3306

CMD ["mysqld"]

 

 

docker-entrypoint.sh文件:

將自己的配置文件替換原本的配置文件,並創建配置文件裏面相應的目錄

#!/bin/bash

set -e

 

mv /etc/mysql/my.cnf /root/

mv /my.cnf /etc/mysql/

mkdir -p /var/log/mysql/{slowlog,errorlog,generallog,binlog,relaylog}

chown -R mysql.mysql/var/log/mysql/{slowlog,errorlog,generallog,binlog,relaylog}

 

if [ "${1:0:1}" ='-' ]; then

    set -- mysqld "$@"

fi

 

if [ "$1" = 'mysqld']; then

    # read DATADIR from the MySQL config

    DATADIR="$("$@" --verbose --help 2>/dev/null |awk '$1 == "datadir" { print $2; exit }')"

   

    if [ ! -d "$DATADIR/mysql" ]; then

       if [ -z "$MYSQL_ROOT_PASSWORD" -a -z"$MYSQL_ALLOW_EMPTY_PASSWORD" ]; then

           echo >&2 'error: database is uninitialized andMYSQL_ROOT_PASSWORD not set'

           echo >&2 ' Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?'

           exit 1

       fi

      

       echo 'Running mysql_install_db ...'

       mysql_install_db --datadir="$DATADIR"

       echo 'Finished mysql_install_db'

      

       # These statements _must_ be on individual lines, and _must_end with

       # semicolons (no line breaks or comments are permitted).

       # TODO proper SQL escaping on ALL the things D:

      

       tempSqlFile='/tmp/mysql-first-time.sql'

       cat > "$tempSqlFile" <<-EOSQL

           DELETE FROM mysql.user ;

           CREATE USER 'root'@'%' IDENTIFIED BY'${MYSQL_ROOT_PASSWORD}' ;

           GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;

           DROP DATABASE IF EXISTS test ;

       EOSQL

      

       if [ "$MYSQL_DATABASE" ]; then

           echo "CREATE DATABASE IF NOT EXISTS\`$MYSQL_DATABASE\` ;" >> "$tempSqlFile"

       fi

      

       if [ "$MYSQL_USER" -a "$MYSQL_PASSWORD" ];then

           echo "CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY'$MYSQL_PASSWORD' ;" >> "$tempSqlFile"

          

           if [ "$MYSQL_DATABASE" ]; then

              echo "GRANT ALL ON \`$MYSQL_DATABASE\`.* TO'$MYSQL_USER'@'%' ;" >> "$tempSqlFile"

           fi

       fi

      

       echo 'FLUSH PRIVILEGES ;' >> "$tempSqlFile"

      

       set -- "$@" --init-file="$tempSqlFile"

    fi

   

    chown -R mysql:mysql "$DATADIR"

fi

 

exec "$@"


4.構建鏡像

# docker build t my-percona5.6 /root/docker

-t:指定鏡像名稱


5.運行容器

# docker run -d –e MYSQL_ROOT_PASSWORD=“密碼” –P  my-percona5.6


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章