摘要:今天我寫一點在容器中使用的要不要在生產環境使用運行數據庫這么深奧的問題,等我踩足夠的坑再來寫吧。這是日常使用的狀態,此處省略了別的服務。初始化容器在首次啟動的時候,必須指定一個密碼才能啟動,指定的方式是聲明環境變量。
今天我寫一點在 Docker 容器中使用 MYSQL 的 tips.
要不要在生產環境使用 Docker 運行數據庫這么深奧的問題,等我踩足夠的坑再來寫吧。
但是至少在開發和測試環境你可以用 docker 管理數據庫啊。
先貼一個我常用的 docker-compose 片段,后邊進行詳細的解釋。這是日常使用的狀態,此處省略了別的服務。
version: "2" services: mysql: image: mysql:5.7.16 ports: - ${DB_PORT}:3306 environment: - TZ=Asia/Shanghai command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - ./mysql_data:/var/lib/mysql restart: unless-stopped版本
一定要鎖定鏡像到最小的版本,因為mysql鏡像升級后需要你手動在容器中執行命令去 mysql-upgrade,否則很久之后,你才發現有的數據已經損壞了。
實在想升級,升級步驟如下:
如果是用 docker run 啟動的,那么停掉再啟動個新的。如果是用 docker-compose 啟動的,直接改版本號 pull 鏡像重新 up。
在新的版本啟動后執行 docker exec -it 你的容器名稱或id mysql-upgrade
端口如果想在外部通過工具訪問,需要將3306端口映射到host上的一個端口,不準備外部訪問的環境則不必。
一般來說開發和測試環境還是經常需要登到數據庫上查看的。
添加環境變量 TZ 讓mysql用你的默認時區啟動。
這是因為 mysql 的基礎鏡像是 debian, 這個環境變量可以聲明 debian 的時區,然后被 mysql 繼承。
mysql 的鏡像默認編碼是 latin1 這可不行,在中國我們一般都用 UTF8 。
一般我們要是在主機上配置 mysql 的話,是去修改配置文件。但使用容器時映射進去一個配置文件是很復雜的。
于是我們有個簡單的辦法,mysql 接受很多 flag 通過啟動時傳入。其中就有聲明服務器默認編碼的。
我們的 command 命令就是給 mysql 在啟動時加了兩個參數。
容器中有需要持久化存儲的內容時就會有點麻煩。一般有兩種方案,一種是映射主機的一個目錄,一種是利用數據卷。
在很長時間的使用中,我總結出了這個比較方便的辦法。
因為 docker-compose 有個潛規則就是大家一般都在有 compose 文件那個目錄執行命令。
于是我們做一個以環境名稱命名的文件夾,里邊是 compose 文件,.env 文件,和各種需要持久化的文件夾。
在 compose 文件中,我們映射文件夾用相對目錄。
最后,這個文件夾就是一個整體,只需要把它拷貝在任何機器任何地方都可以啟動這個環境。
初始化mysql 容器在首次啟動的時候,必須指定一個root密碼才能啟動,指定的方式是聲明環境變量 MYSQL_ROOT_PASSWORD 。
一旦在指定的數據文件夾發現已經存在庫的時候,這個參數就會被忽略掉。
所以我們只需要在第一次啟動的時候加上,后面有了數據后都去掉就好了。
在容器中運行的 mysql 該怎么導入導出數據或結構呢?照這么做吧:
# Backup docker exec CONTAINER /usr/bin/mysqldump -u root --password=root DATABASE > backup.sql # Restore docker exec -i CONTAINER /usr/bin/mysql -u root --password=root DATABASE < backup.sql
就這么多吧,還有什么 Tips ,歡迎大家補充。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26860.html
摘要:最近看了這篇文章,了解到容器內的一個進程對應于宿主機器上的一個進程。在宿主機器上的進程擁有者和在容器內的進程擁有者都是,同理,我們已經驗證了第二點。 最近看了這篇文章:Understanding how uid and gid work in Docker containers,了解到: docker容器內的一個進程對應于宿主機器上的一個進程。 容器內的進程,與相對應的宿主進程,由...
摘要:今天小數給大家帶來的是數人云工程師金燁的分享,有關于自動快速部署服務相關組件的一些實踐。當與相遇,雙劍合璧,一切變得如此簡單有趣。通過將服務注冊到來做健康檢查。 今天小數給大家帶來的是數人云工程師金燁的分享,有關于自動快速部署DCOS服務相關組件的一些實踐。當Ansible與Docker相遇,雙劍合璧,一切變得如此簡單有趣。 本次分享將包括以下內容: 云平臺部署使用的服務、組件 Do...
摘要:將安裝與模塊安裝放在一起的話,則每次修改源代碼,都需要重新安裝,這顯然不合適。使用設置鏡像元數據使用指令,可以為鏡像設置元數據,例如鏡像創建者或者鏡像說明。自從年雙十一正式上線,累計處理了億錯誤事件,付費客戶有金山軟件百姓網等眾多品牌企業。 譯者按: Dockerfile 的語法非常簡單,然而如何加快鏡像構建速度,如何減少 Docker 鏡像的大小卻不是那么直觀,需要積累實踐經驗。這篇...
閱讀 3242·2021-10-21 17:50
閱讀 3254·2021-10-08 10:05
閱讀 3380·2021-09-22 15:04
閱讀 581·2019-08-30 14:00
閱讀 1939·2019-08-29 17:01
閱讀 1508·2019-08-29 15:16
閱讀 3219·2019-08-26 13:25
閱讀 852·2019-08-26 11:44