天天看點

Docker安裝mysql

事先準備

centos系統或者linux系統

安裝步驟

安裝基礎的工具yum-utils device-mapper-persistent-data lvm2

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

添加docker-ce yum倉庫

因為在阿裡雲的ecs機器上面,yum鏡像使用的阿裡雲的,找不到docker的鏡像,是以需要第一步的安裝基礎工具之後使用yum-config-manager來添加對應的yum倉庫,執行如下指令

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo      

安裝docker-ce

通過上面兩個步驟我們已經建立好了docker-ce的鏡像連結,接下來隻需要安裝docker-ce就可以了,執行如下指令,安裝這個的時間會稍微有點長,需要耐心的等待大概3-5分鐘

yum install docker-ce      

啟動、停止docker服務

systemctl start docker  #啟動docker服務
systemctl stop docker  #關閉docker服務

      

設定開機啟動Docker Daemon程序

systemctl start docker.service
systemctl enable docker.service
systemctl grep docker檢視docker程序的狀态      
# 開機自啟
sudo systemctl enable docker 
# 啟動docker服務  
sudo systemctl start docker      

安裝docker-compose

安裝docker-compose相對比較簡單,可以直接去​​https://github.com/docker/com...​​ 下載下傳然後選擇相應的版本,或者直接執行如下指令安裝,安裝完後docker-compose會被安裝到/usr/local/bin目錄下

curl -L https://github.com/docker/compose/releases/download/1.24.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose      

設定docker-compose可執行

sudo chmod +x /usr/local/bin/docker-compose      

檢視docker-compose是否安裝成功

docker-compose --version      

至此,安裝過程已經全部完

從 2017 年 3 月開始 docker 在原來的基礎上分為兩個分支版本: Docker CE 和 Docker EE。

Docker CE 即社群免費版,Docker EE 即企業版,強調安全,但需付費使用。

Docker 是一個開源的應用容器引擎,基于 Go 語言 并遵從 Apache2.0 協定開源。

Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實作虛拟化。

容器是完全使用沙箱機制,互相之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。

觀察Docker圖示,其實很形象的解釋了什麼是Docker。在沒有使用集裝箱的情況下,我們需要考慮不同形狀、尺寸的貨物怎麼安放,貨物與貨物之間是否能堆疊,這無疑是很繁瑣的事情。現在有了集裝箱(容器),我們就能将不同的貨物放入集裝箱之内這樣就能以同樣的方式來存放貨物,實作了标準化。

Docker采用了集裝箱原理,我們将程式放入到容器中,實作“一次封裝,到處運作”,隻要開發環境能跑,在其他任何流行的機器上都能運作。并且将程式丢入到容器中,很好的實作了程式與程式之間的隔離,避免了類似Java開發的程式和.net開發的程式安裝在一個伺服器上需要很多調試,有時還會産生沖突的情況。

第一步

docker pull mysql:5.7 # 拉取 mysql 5.7 ( docker pull mysql # 拉取最新版mysql鏡像 )

 第二部:

然後建立一個檔案夾用來存放mysql的配置檔案,日志,以及資料等(也就是所謂的挂載目錄,作用就是将此目錄中的檔案或檔案夾覆寫掉容器内部的檔案或檔案夾)

cd mysql:

mkdir conf logs  data

在conf下面建個簡單的配置檔案my.cnf

[mysqld]
 sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

# 表名不區分大小寫
lower_case_table_names=1 
#server-id=1
datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysqlx.sock
#symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid      

可以在mysqld跳過 密碼:

#skip-grant-tables

第三步

在上面建立的目錄下使用指令啟動mysql容器

docker run -it -d -p 3306:3306 --name mymysql \

-v $PWD/conf/my.cnf:/etc/mysql/my.cnf \

-v $PWD/logs:/var/log \

-v $PWD/data:/var/lib/mysql \

-e MYSQL_ROOT_PASSWORD=d8446$@#hashPWd \

mysql:5.7

-d:表示背景運作,不加-d執行上面的指令你就會看到mysql啟動的日志資訊了

-p:表示端口映射,冒号左面的是我們的主控端的端口,也就是我們虛拟機的端口,而右側則表示的是mysql容器内的端口

--name:是我們給mysql容器取的名字

-v:表示挂載路徑,$PWD表示目前目錄下,冒号左面的表示我們主控端的挂載目錄,也就是我們虛拟機所在的檔案路徑,冒号右邊則表是的是mysql容器在容器内部的路徑,上面的指令我分别挂載了my.cnf(mysql的配置檔案),如需使用配置檔案的方式啟動mysql,這裡則需要加上,mysql的日志,還有mysql存放資料所在的目錄

上面指令報錯運作這個:

docker run -it -d -p 3306:3306 --name mysql \
-v $PWD/conf/:/etc/mysql/conf.d \
-v $PWD/logs:/var/log \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=guizhouDB19#87Db919#SS \
mysql:5.7      
如果
-v $PWD/conf/my.cnf:/etc/mysql/my.cnf \
報錯換成這個:
-v $PWD/conf/:/etc/mysql/conf.d      

用戶端測試

 docker exec -it mymysql bash

需要進入docker本地用戶端設定遠端通路賬号

  $ mysql -uroot -p123456

mysql> grant all privileges on *.* to root@'%' identified by "password";

mysql 5.7修改root密碼:

.使用者無密碼登入

mysql -uroot -p (直接點選回車,密碼為空)

5.選擇資料庫

use mysql;

6.修改root密碼

update mysql.user set authentication_string=password('123456') where user='root';

7.執行

flush privileges;

8.退出 mysql

quit

9.編輯 /etc/my.cnf

删除 skip-grant-tables 儲存退出

10.重新開機docker容器

用docker裝的mysql 預設是允許外網通路的。 我們外網通路不了是因為沒有重新開機docker中的mysl,重新開機下就行了。

mysql 預設隻允許本地的localhost通路。網上有一堆更改為允許外部通路的教程,但是由于mysql版本的原因,無一例外的都失敗了。

最後在一篇文章發現了缺失的一個操作。是以現在記錄一下

步驟

  1. mysql -u root -p 登入資料庫

  • 1
  1. use mysql; 選擇基礎資訊資料庫

  1. select User,authentication_string,Host from user 查詢資料庫使用者,在這裡正常來說,應該都localhost

  1. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' 新增一個root使用者,所有位址(%)的都可以通路,并且密碼為123456 。這裡可以根據你的情況酌情修改

  • 2
  • 3
  1. flush privileges; 清除緩存,重新加載權限

  1. 一般來講如果是舊版的mysql,以上的操作,就已經讓資料庫可以外部通路了。但是很遺憾,在mysql5.7中,上面還不足夠。
  2. 你需要修改 /etc/mysql/mysql.conf.d/mysqld.cnf 檔案。将其中的 bind-address 注釋掉。然後重新開機資料庫,搞定

GUI管理

這裡推薦使用 Portainer 作為容器的 GUI 管理方案。

官方位址:https://portainer.io/install.html

安裝指令:

docker volume create portainer_data

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

通路你的 IP:9000 即可進入容器管理頁面

docker通過pull方式安裝mysql

1.搜尋鏡像

指令:docker search mysql,mysql的這種安裝方式和上一節我們介紹的tomcat的步驟很相似。

2.拉取下載下傳鏡像

指令:docker pull mysql:5.6,這裡以5.6版本為例。

3.檢視下載下傳到的鏡像

指令:docker images |grep mysql

4.運作docker容器

docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456-d mysql:5.6

指令說明:

-p 3306:3306:将容器的 3306 端口映射到主機的 3306 端口。-v $PWD/conf:/etc/mysql/conf.d:将主機目前目錄下的 conf/my.cnf 挂載到容器的 /etc/mysql/my.cnf。-v $PWD/logs:/logs:将主機目前目錄下的 logs 目錄挂載到容器的 /logs。-v $PWD/data:/var/lib/mysql :将主機目前目錄下的data目錄挂載到容器的 /var/lib/mysql 。-e MYSQL_ROOT_PASSWORD=123456:初始化 root 使用者的密碼。5.檢視啟動情況