1. 程式人生 > >在docker中安裝mysql資料庫

在docker中安裝mysql資料庫

安裝Docker環境(CentOS 7.4)

step 1: 安裝必要的一些系統工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

Step 2: 新增軟體源資訊

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Step 3: 更新並安裝 Docker-CE

sudo yum makecache fast
sudo yum -y install docker-ce

Step 4: 開啟Docker服務

sudo service docker start

通常我們使用Docker的時候都是使用的root,官方說法如下:

The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can access it with sudo. For this reason, docker daemon always runs as the root user.

To avoid having to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.

下面是使用非root使用者操作的步驟:

建立docker組 sudo groupadd docker

將當前使用者加入docker組 sudo gpasswd -a ${USER} docker

重新啟動docker服務 sudo systemctl restart docker

修改/var/run/docker.sock許可權 sudo chmod a+rw /var/run/docker.sock

Step 5: 下載Mysql官方映象

執行 docker pull mysql:5.7

下載mysql5.7官方映象,用docker images檢視已下載的映象列表。 初始化Mysql服務 配置資料庫引數

Step 6:修改init.sh檔案,配置說明:

#!/bin/bash

command=`docker ps |grep mysql`
if [[ "$command" == ""  ]];then
    echo "strting mysql..."
    docker start mysql
else 
    echo  "mysql is  starting !"
fi

➜  mysql ./start.sh 
mysql is  starting !
➜  mysql cat init.sh 
#!/bin/bash
# 在Docker容器中初始化mysql服務
 
# 映象名稱
IMAGE=$1
# 容器名稱
INSTANCE_NAME=mysql
# Mysql資料檔案存放路徑,預設為當前shell檔案所在目錄
HOME=$(cd `dirname $0`; pwd)
#資料儲存目錄
DATA_DIR="$HOME/data"
#資料儲存目錄
CONF_DIR="$HOME/conf"
 
#資料庫名
DATABASE=swqdb
#使用者名稱
USER=swq
#使用者密碼
PASSWORD=swq#2018
# ROOT密碼
ROOT_PASSWORD=swq#2018
#建立data資料夾
mkdir data conf
 
DOCKER_PARAM="-v $CONF_DIR:/etc/mysql/conf.d -v $DATA_DIR:/var/lib/mysql"
MYSQL_PARAM="-e MYSQL_ROOT_PASSWORD=$ROOT_PASSWORD -e MYSQL_DATABASE=$DATABASE -e MYSQL_USER=$USER -e MYSQL_PASSWORD=$PASSWORD"
MYSQL_VARS="--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci"
docker run -p 3306:3306 --name $INSTANCE_NAME $DOCKER_PARAM --user 1000:1000 $MYSQL_PARAM -d $IMAGE $MYSQL_VARS

Step 7: 初始化服務

建立Mysql目錄

sudo mkdir -p /data/mysql

在mysql目錄建立init.sh檔案(見上)

docker run -p 3306:3306 --name $INSTANCE_NAME $DOCKER_PARAM --user 1000:1000 $MYSQL_PARAM -d $IMAGE $MYSQL_VARS 中的--user 1000:1000是當前使用者的uid和gid,因為docker容器內部預設是使用root賬戶,該命令可以使對映的資料夾擁有者為當前操作使用者.

Step 8: 執行初始化指令碼

./init.sh mysql:5.7

執行完上述命令後mysql服務初始化完成,並自動啟動,建立了一個名為mysql資料檔案存放於/data/mysql/data目錄,服務埠號3306,建立了預設資料庫qiyuesuodb,預設使用者qiyuesuo初始密碼qiyuesuo#2018。 Mysql服務管理

啟動服務:docker start mysql

停止服務:docker stop mysql

登入資料庫:mysql -h 127.0.0.1 -uswq -pswq#2018

清除資料:停止mysql服務,cd至mysql目錄,sudo rm -rf ./data 刪除data資料夾,然後再啟動服務即可。

其他指令碼

#!/bin/bash

#說明
#1.先使用者確認是否刪除
#2.使用者確認後刪除容器和data目錄

echo -n "This operation will completely remove mysql and mysql data , continue? [y/n] "
read opt
if [[ $opt == y  ]];then 
    echo "removing mysql..."
    docker rm -f mysql
    echo "removing mysql data..."
    rm -rf data conf
    echo "All of mysql data are removed!  "
elif [[ $opt == n ]];then
    echo "Exiting..." 
else 
    echo "Please input y or n!" 
    echo "Exiting..."
fi


#獲取當前日期
echo "建立備份資料夾..."
ls_date=`date +%Y%m%d`
mkdir backup$ls_date
echo "備份資料庫配置和資料..."
cp -r ./conf ./backup$ls_date
cp -r ./data ./backup$ls_date
echo "備份完成.."