docker從入門到實踐
https://yeasy.gitbooks.io/docker_practice/image/build.html
## 一、命令行方式+dockerfile部署。
1️⃣ 部署mysql容器
docker pull mysql #拉取mysql鏡像
docker run --name mysql -v /Users/zhaotengwei/Desktop/mysql:/database -p 6666:3306 -e MYSQL_ROOT_PASSWORD=woaini123.. -d mysql
創建一個容器名字叫做mysql
-v 掛載本地目錄與容器內的目錄,用:區分。冒號前面是本地宿主機目錄,后面的是容器內的目錄。如果/database不存在的話會自動創建。
掛載好了之后就可以實現本地與容器內目錄的互聯。比如你在掛載的本地目錄里新增一個文件。那么容器內的那個目錄也會相應的增加這個文件。
-p 6666:3306 端口映射 :前是本地端口,后是容器端口。 這樣設置好之后,那么你連接宿主機上6666端口就可以訪問容器內的3306端口了。(6666我隨便設的)
下面的Navicat就可以連接了。
-e MYSQL_ROOT_PASSWORD=woaini123.. 設置環境變量 ,也就是設置數據庫root密碼,我沒有設置用戶,所以用的root。
-d 后台運行。
最后 的mysql 是鏡像名稱。
這樣運行之后就有了一個mysql容器在運行了。
2️⃣配置mysql並且創建數據庫。
單單有這個容器是無法連接上mysql的。Navicat會提示連接失敗。
mysql 8.0 默認使用 caching_sha2_password 身份驗證機制;客戶端不支持新的加密方式。
解決方案:
修改用戶(root)的加密方式。
這里看上一篇docker(三)里有講。
接下來遇到的問題是容器mysql的中文亂碼問題。
https://blog.csdn.net/m0_37639542/article/details/72852875這一篇講的很詳細。
簡單列舉一下步驟:
1.docker exec -ti xxx(容器id) /bin/bash #進入容器
2.mysql -u root -p #進入mysql
3.mysql>SHOW VARIABLES LIKE 'character_set_%';//查看數據庫字符集
基本上都如圖所示:默認就是瑞典latin1
4. SHOW VARIABLES LIKE 'collation_%';
圖上的第一個 connection 就是我們通過workbench等客戶端連接的時候指定的編碼。
外部訪問數據亂碼的問題就出在這個connection連接層上
5.接下來我做了兩件事來解決這個問題:
第一步:
第二步:
修改配置文件
配置文件在etc/mysql/mysql.conf.d/mysql.cnf這個文件里頭 (容器目錄)
要自己安裝vim
apt-get updata
apt-get install vim
修改結果:
最后Navicat導出主機上的sql數據庫,在連接的容器數據庫中載入sql文件創建容器中的數據庫。
mysql 容器部分完成。
3️⃣部署flask 容器。
flask我用的dockerfile部署的。。
1.在你的web項目中touch一個dockerfile。
項目結構:
dockerfile 內容:
WORKDIR 指定工作目錄
格式為 WORKDIR <工作目錄路徑>。如該目錄不存在,WORKDIR 會幫你建立目錄。
使用 WORKDIR 指令可以來指定工作目錄(或者稱為當前目錄),以后各層的當前目錄就被改為指定的目錄,最好不要在RUN中用cd手動切換目錄。
COPY . /app 復制當前目錄的所有文件到/app目錄下。
dockerfile編寫好之后進入dockerfile所在的目錄執行
docker build -t flask . #根據dockerfile創建一個叫flask的鏡像。
最后
docker run --name web -p 5000:5000 --link mysql:mysql -d flask 創建容器並與mysql容器link.
大功告成,flask可以訪問到mysql數據庫了。