既然有了docker,就一步步學習docker的容器技術,也方便開發,不用外部安裝一坨又大又跑不動的軟件html
剛剛起步docker,遇到到不少的坑,仍是決定記錄一下,轉個身就忘了mysql
這次的系統是Mac, 從鏡像中心pull一個mysql鏡像,進入網易雲的鏡像中心,點複製便可,也能夠從其餘倉庫下載,都同樣redis
大多倉庫下方都帶有該應用的說明、版本、操做、注意點解決方式,做爲新手仍是耐心的看一下比較好,實在看不懂英文,能夠找翻譯,比百度、Google漫天找答案准確的多sql
複製pull的信息,直接上終端,等待下載完,docker images查看個人鏡像docker
hello-world是以前作docker測試使用,另外redis和mysql是本次下載的,放着後面用shell
做爲有文件潔癖的我,仍是要把hello-world給刪掉,刪掉image也是有套路操做的數據庫
①命令 docker ps -a 查看鏡像生成的容器,(若是容器中沒有,就跳過①②步)bash
②命令 docker rm fe58 刪除容器,輸入容器ID(ID是64位的,展現只展現16位,若是容器很少且ID前幾位不重複,能夠直接自由輸入幾位均可以被標識到該目標)服務器
③命令 docker rmi 2cb 刪除鏡像(比刪除容器命令多了一個 i ), 完成app
若是有美感的同窗想重複名鏡像容器的話,提醒一下: 不能以大寫字母和下劃線命名
在下認爲仍是不要重命名了,雖然有點長,但這名字記錄着咱們當時在哪裏搞到她的,也就能夠去哪裏查看相關的文檔信息,畢竟婆家這麼多
下面對文檔作個翻譯,跟着操做 ☟☟☟
①啓動一個mysql服務器實例
啓動MySQL實例很簡單:
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
some-mysql是要分配給容器的名稱,my-secret-pw是爲MySQL root用戶設置的密碼,tag是指定所需MySQL版本的標記。 請參閱上面的列表以獲取相關標籤。
≡≡》跟着①說明操做一波,運行成功並返回一個64位ID, -d命令是將mysql至於後臺運行,而後咱們就能夠繼續打命令
②從Docker另外一個容器應用程序鏈接到MySQL
此鏡像暴露標準MySQL端口(3306),所以容器連接使MySQL實例可用於其餘應用程序容器。 像這樣啓動你的應用程序容器,將它連接到MySQL容器:
$ docker run --name some-app --link some-mysql:mysql -d application-that-uses-mysql
≡≡》這邊尚未應用服務,先留着
③從MySQL命令行客戶端鏈接到MySQL
如下命令啓動另外一個mysql容器實例並對原始mysql容器運行mysql命令行客戶端,容許您對數據庫實例執行SQL語句 (如下是一行命令):
$ docker run -it --link some-mysql:mysql --rm mysql sh -c 'exec mysql h\"$MYSQL_PORT_3306_TCP_ADDR\" -P\"$MYSQL_PORT_3306_TCP_PORT\" -uroot -p\"$MYSQL_ENV_MYSQL_ROOT_PASSWORD\"'
some-mysql是原始mysql容器的名稱。
此鏡像還能夠用做非Docker或遠程MySQL實例的客戶端:
$ docker run -it --rm mysql mysql -hsome.mysql.host -usome-mysql-user -p
有關MySQL命令行客戶端的更多信息能夠在MySQL文檔中找到
≡≡》文檔記錄的都是docker run,說明都是從頭執行鏡像,如今剛剛已經運行了mysql,接着寫就行了,執行sql也就是操做數據庫了,操做數據庫就要先進入數據庫
docker exec -it 8e22 bash 命令進運行的容器查看,必須是運行時的容器,看到進入了root@...的僞終端,不知道命令的時候,好比docker exec --help,上面就會提示各類操做以及說明,到了僞終端就好操做了,常規數據庫命令,仔細的人會發現上面啓動mysql的時候,打id是redis的id,不是mysql的,後面怎麼操做都不會正確,粗心是會把本身弄死的,尷尬
從新run mysql鏡像,並exec進入運行容器:
跳出mysql> 就熟悉了,就能夠showdatabases; create ...一頓操做,退出命令: exit
學習微服務的時候,常常提到服務的高可用、負載均衡,固然mysql在這裏也能夠作到同樣的效果,實現docker中mysql主從式高可用數據庫,也在於docker的優勢,具備隔離性,媽媽不再用擔憂機子不夠用的問題,因此咱們只須要多run 幾個mysql,一個做爲主數據庫(master),另外幾個做爲從數據庫(slave),配置容器屬性,後面用到再學習
繼續翻譯
④容器shell訪問和查看MySQL日誌
docker exec命令容許您在Docker容器內運行命令。 如下命令行將在mysql容器中爲您提供一個bash shell:
$ docker exec -it some-mysql bash
MySQL Server日誌可經過Docker的容器日誌得到:
$ docker logs some-mysql
≡≡》進入運行時容器已經操做過了,查看日誌是要退出bash,在docker中訪問日誌,會打印在終端上
⑤使用自定義MySQL配置文件
MySQL啓動配置在文件/etc/mysql/my.cnf中指定,該文件又包含在/etc/mysql/conf.d目錄中以.cnf結尾的全部文件。 此目錄中的文件中的設置將擴充和/或覆蓋/etc/mysql/my.cnf中的設置。 若是要使用自定義的MySQL配置,能夠在主機上的目錄中建立備用配置文件,而後將該目錄位置掛載到mysql容器中的/etc/mysql/conf.d
若是/my/custom/config-file.cnf是自定義配置文件的路徑和名稱,則能夠像這樣啓動mysql容器(請注意,此命令中僅使用自定義配置文件的目錄路徑):
$ docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
這將啓動一個新容器some-mysql,其中MySQL實例使用/etc/mysql/my.cnf和/etc/mysql/conf.d/config-file.cnf中的組合啓動設置,後者的設置優先。
請注意,啓用了SELinux的主機系統上的用戶可能會遇到此問題。 當前的解決方法是將相關的SELinux策略類型分配給新的配置文件,以便容許容器裝入它:
$ chcon -Rt svirt_sandbox_file_t /my/custom
≡≡》這裏會出現問題,就像文檔中說的同樣,須要被容許,才能夠執行自定義配置文件方式
就學到這裏,休息下,太長了,不容易消化,一個mysql應用的操做,大部分應用也有相似的套路
-------------------------------------------------