Docker是一個開源的應用容器引擎,可讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。mysql
若是內核版本太低,能夠參考此連接進行升級。linux
安裝dockersql
$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$ sudo yum makecache fast
$ sudo yum -y install docker-ce
$ sudo systemctl start docker
因爲本地沒有hello-world鏡像,因此從倉庫中下載該鏡像並在容器中運行。![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20181224223829426.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdXloNzM=,size_16,color_FFFFFF,t_70) - 鏡像加速 在`/etc/docker/daemon.json`文件(若是沒有,自行建立)中添加: ```json { "registry-mirrors": ["http://hub-mirror.c.163.com"] } ```
$ docker images
$ docker ps
,若是想要查看已經關閉的鏡像能夠加上-a
參數$ docker rmi <image-name/id>
,強行刪除加上-f
參數$ docker rm <container-name/id>
,強行刪除加上-f
參數$ docker build -t <image-name> .
,.
表示當前路徑,可使用具體路徑代替$ docker run -p <本機端口>:<docker容器內部端口> --name <container-name> -d <image-name>
;-d參數表示在後臺運行容器,並返回容器ID$ docker exec -it <container-name> /bin/bash
;-i
以交互模式運行容器、-t
爲容器從新分配一個僞輸入終端$ docker tag <image-name[:tag]> <registryhost/username/image-name[:tag]>
$ docker logs <container-name>
-- init.sql -- drop database if exists starwars; create DATABASE starwars; use starwars; create table if not exists people ( _id INT NOT NULL AUTO_INCREMENT, ID char(100), Name char(100), Heigth char(100), Mass char(100), Hair_color char(100), Skin_color char(100), Eye_color char(100), Birth_year char(100), Gender char(100), Homeworld char(100), Films char(200), Species char(200), Vehicles char(200), Starships char(200), primary key(_id) ); …… ……
Dockerfile
文件以mysql5.7爲基礎鏡像構建咱們所須要的鏡像,首先設置MYSQL_ALLOW_EMPTY_PASSWORD
便於咱們對數據庫進行數據導入的操做,而後將文件(相對/絕對路徑)拷貝到容器中,最後執行腳本寫入數據。docker
FROM mysql:5.7 # no password ENV MYSQL_ALLOW_EMPTY_PASSWORD yes # put the file to container COPY setup.sh /mysql/setup.sh COPY data/mysql/priviledges.sql /mysql/priviledges.sql COPY sql/init.sql /mysql/init.sql # command CMD ["sh", "/mysql/setup.sh"]
具體Dockerfile語法參見連接數據庫
#!/bin/bash set -e #查看mysql服務的狀態,方便調試,這條語句能夠刪除 echo `service mysql status` echo '1.啓動mysql....' #啓動mysql service mysql start sleep 3 echo `service mysql status` echo '2.開始導入數據....' #導入數據 mysql < /mysql/init.sql echo '3.導入數據完畢....' sleep 3 echo `service mysql status` #從新設置mysql密碼 echo '4.開始修改密碼....' mysql < /mysql/priviledges.sql echo '5.修改密碼完畢....' #sleep 3 echo `service mysql status` echo 'mysql容器啓動完畢,且數據導入成功' tail -f /dev/null
use mysql; select host, user from user; -- 由於mysql版本是5.7,所以新建用戶爲以下命令: create user starwars identified by 'starwars'; -- 將starwars數據庫的權限受權給建立的starwars用戶,密碼爲starwars: grant all on starwars.* to starwars@'%' identified by 'starwars' with grant option; -- 這一條命令必定要有: flush privileges;
因爲未使用--name
參數指定容器名稱,因此隨機生成了一個名字brave_agnesi
json
使用docker logs
命令查看日誌:centos
1.進入容器
2.登陸mysql,使用咱們在priviledges.sql
文件中的用戶名密碼
嘗試查詢數據:select * from film;
由上圖可知,咱們成功插入了數據。緩存