一莽红、什么是 Dockerfile骄酗?
Dockerfile 是一個用來構(gòu)建鏡像的文本文件稀余,文本內(nèi)容包含了一條條構(gòu)建鏡像所需的指令和說明。
這里不講Dockerfile的指令趋翻,可自行百度睛琳。
二、創(chuàng)建MySql的Dockerfile
創(chuàng)建基于5.7.30版本的MySql踏烙,編寫Dockerfile文件具體如下:
#創(chuàng)建一個基于5.7.30版本的MySql
FROM mysql:5.7.30
MAINTAINER don
EXPOSE 3306
LABEL version="0.1" description="Mysql服務(wù)器" by="don"
#設(shè)置免密登錄
ENV MYSQL_ALLOW_EMPTY_PASSWORD yes
#將所需文件放到容器中
COPY /mysql/setup.sh /mysql/setup.sh #拷貝安裝腳本
COPY /mysql/create_db.sql /mysql/create_db.sql #創(chuàng)建數(shù)據(jù)庫
COPY /mysql/initial_data.sql /mysql/initial_data.sql #初始數(shù)據(jù)
COPY /mysql/privileges.sql /mysql/privileges.sql #設(shè)置密碼和權(quán)限
#設(shè)置容器啟動時執(zhí)行的命令
CMD ["sh", "/mysql/setup.sh"]
三师骗、構(gòu)建MySql的Dockerfile
使用docker build
命令構(gòu)建剛才創(chuàng)建的Dockerfile
文件,這里一定要注意最后面有個.
讨惩,--no-cache=true
表示禁用緩存辟癌。
docker build -f Dockerfile -t loamen-mysql:5.7 --no-cache=true .
如果是在Windows環(huán)境下構(gòu)建,可能會出現(xiàn)如下提示:
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
該提示表示W(wǎng)indows構(gòu)建出來的擁有所有權(quán)限荐捻,如果不需要那么多可以使用-rwxr-xr-x
修改黍少,如果不需要修改權(quán)限可以忽略。
執(zhí)行成功后可以通過docker images
查看剛才生成的鏡像靴患,這里可以看到多了loamen-mysql
的鏡像
REPOSITORY TAG IMAGE ID CREATED SIZE
loamen-mysql 5.7 4da21faea397 2 minutes ago 449MB
mysql 5.7.30 9cfcce23593a 4 weeks ago 448MB
四仍侥、運(yùn)行mysql容器
使用docker run
命令來運(yùn)行容器,這里使用了-v
掛載本地卷鸳君,但沒有使用-e MYSQL_ROOT_PASSWORD=123456
來設(shè)置密碼农渊,是因為這里要使用空密碼創(chuàng)建初始數(shù)據(jù)。
docker run --privileged=true --name loamen-mysql -p 3306:3306 -v /my/mysql/data:/var/lib/mysql -v /my/mysql/conf.d:/etc/mysql/conf.d -v /my/mysql/logs:/var/log/mysql -d loamen-mysql:5.7
運(yùn)行好后使用docker ps
來查看剛才創(chuàng)建的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bd285ecb867a loamen-mysql:5.7 "docker-entrypoint.s…" 4 seconds ago Up 4 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp loamen-mysql
五、其他操作
進(jìn)入容器bash
砸紊,這里spaceon-mysql
使用CONTAINER ID
值bd285ecb867a
也可以传于。
docker exec -it spaceon-mysql /bin/bash
刪除容器,-f
表示強(qiáng)制刪除醉顽,如果不強(qiáng)制刪除可以使用docker stop
先停止容器沼溜,-v
表示連本地卷一起刪除。
docker rm -f loamen-mysql -v
刪除鏡像
docker rmi loamen-mysql:5.7
六游添、腳本內(nèi)容
setup.sh
初始化運(yùn)行腳本如下
#!/bin/bash
set -e
#查看mysql服務(wù)的狀態(tài)系草,方便調(diào)試,這條語句可以刪除
echo `service mysql status`
echo '1.啟動mysql...'
#啟動mysql
service mysql start
sleep 3
echo `service mysql status`
echo '2.創(chuàng)建數(shù)據(jù)庫...'
mysql < /mysql/create_db.sql
sleep 3
echo '2.創(chuàng)建數(shù)據(jù)庫完畢...'
echo '3.開始導(dǎo)入數(shù)據(jù)...'
mysql < /mysql/initial_data.sql
echo '3.導(dǎo)入數(shù)據(jù)完畢...'
echo '4.修改mysql權(quán)限...'
mysql < /mysql/privileges.sql
sleep 3
echo '4.權(quán)限修改完畢...'
#sleep 3
echo `service mysql status`
echo 'mysql容器啟動完畢,且數(shù)據(jù)導(dǎo)入成功'
tail -f /dev/null
create_db
腳本內(nèi)容如下
USE mysql;
CREATE DATABASE IF NOT EXISTS spaceon_gms;
create_db.sql
腳本內(nèi)容如下
--使用默認(rèn)數(shù)據(jù)庫
USE mysql;
-- 創(chuàng)建一個名為loamen_demo的數(shù)據(jù)庫
CREATE DATABASE IF NOT EXISTS loamen_demo;
initial_data.sql
腳本內(nèi)容如下
--使用默認(rèn)數(shù)據(jù)庫
--不要忘記初始化到哪個數(shù)據(jù)庫
USE loamen_demo;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
--其他數(shù)據(jù)庫初始化腳本
...
privileges.sql
腳本內(nèi)容如下
use mysql;
SELECT host, user FROM user;
-- 將數(shù)據(jù)庫的權(quán)限授權(quán)給root用戶唆涝,密碼為123456:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
-- 刷新權(quán)限這一條命令一定要有:
flush privileges;
如果是Windows下創(chuàng)建的腳本文件找都,請使用utf-8
編碼,如果到Linux中運(yùn)行依然亂碼廊酣,可以使用如下命令進(jìn)行轉(zhuǎn)換
sed -i "s/\r//" create_db.sql