部門內部的伺服器太多了,打算將對應的測試環境docker化。
轉成docker後,以後不管是升級調研還是定製化開發測試都方便,就是事情太多,一直沒有抽出身來做,今天處理下並把過程記錄下來跟大家分享下。
收集環境生產伺服器環境資訊
Docker的環境需要同生產伺服器相應版本保持一致。
-
mysql 5.7
-
jdk8
-
sonarqube.3
下載對應docker映象
1.開啟Docker公共倉庫:https://hub.docker.com/搜尋對應程式,如sonarqube。
2.點選“DETAILS”,可以檢視DockerPull Command和Full Description
3.點選Tags檢視歷史版本,找到對應版本,比如我要的是6.3:
4.登入docker-server,搜尋sonarqube:
[root@vm-90-169 ~]# docker search sonarqube INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/sonarqube SonarQube is an open source platform for c... 758 [OK] |
5.下載映象對應版本:
[root@vm-90-169 ~]# docker pull docker.io/sonarqube:6.3 |
6.檢視下載映象
[root@vm-90-169 ~]# docker images | grep 6.3 docker.io/sonarqube 6.3 752d427d3de6 11 months ago 770 MB |
7.同樣的操作,下載其他的映象。
注:部分容器可以設定啟動引數,可以在docker-hub上找到
啟動容器
Mysql啟動引數:
https://dev.mysql.com/doc/refman/5.7/en/environment-variables.html
常用的引數:
MYSQL_ROOT_PASSWORD : root使用者的密碼,這裡設定的初始化密碼為`123456`; MYSQL_DATABASE : 執行時需要建立的資料庫名稱; MYSQL_USER : 執行時需要建立使用者名稱,與MYSQL_PASSWORD一起使用; MYSQL_PASSWORD : 執行時需要建立的使用者名稱對應的密碼,與MYSQL_USER一起使用; MYSQL_ALLOW_EMPTY_PASSWORD : 是否允許root使用者的密碼為空,該引數對應的值為:yes; MYSQL_RANDOM_ROOT_PASSWORD:為root使用者生成隨機密碼; MYSQL_ONETIME_PASSWORD : 設定root使用者的密碼必須在第一次登陸時修改(只對5.6以上的版本支援)。 MYSQL_ROOT_PASSWORD 和 MYSQL_RANDOM_ROOT_PASSWORD 兩者必須有且只有一個。 |
Sonarqube的啟動參考:
$ docker run -d --name sonarqube \ -p 9000:9000 -p 9092:9092 \ -e SONARQUBE_JDBC_USERNAME=sonar \ -e SONARQUBE_JDBC_PASSWORD=sonar \ -e SONARQUBE_JDBC_URL=jdbc:postgresql://localhost/sonar \ sonarqube
|
調整通過docker-compose管理
注:sonarqube的容器,自帶的jdk就是1.8的版本,所以不再單獨準備jdk的映象
[root@vm-90-169 sonarqube]# docker exec -it 856fd94bddb0 /bin/bash root@856fd94bddb0:/opt/sonarqube# java -version openjdk version "1.8.0_121" OpenJDK Runtime Environment (build 1.8.0_121-8u121-b13-1~bpo8+1-b13) OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode) |
檢視啟動結果:
注意事項:
SONARQUBE_JDBC_URL
一定要配置正確,同時要注意sonarqube對mysql的版本支援。
版本
一定要鎖定映象到最小的版本,因為mysql映象升級後需要你手動在容器中執行命令去 mysql-upgrade,否則很久之後,你才發現有的資料已經損壞了。
實在想升級,升級步驟如下:
-
如果是用 docker run 啟動的,那麼停掉再啟動個新的。如果是用 docker-compose 啟動的,直接改版本號 pull 映象重新 up。
-
在新的版本啟動後執行 docker exec -it 你的容器名稱或idmysql-upgrade
埠
如果想在外部通過工具訪問,需要將3306埠對映到host上的一個埠,不準備外部訪問的環境則不必。
時區
新增環境變數 TZ 讓mysql用你的預設時區啟動。
字元編碼
mysql 的映象預設編碼是 latin1,在中國我們一般都用 UTF8 。
一般我們要是在主機上配置 mysql 的話,是去修改配置檔案。但使用容器時對映進去一個配置檔案是很複雜的。
於是我們有個簡單的辦法,mysql 接受很多 flag 通過啟動時傳入。其中就有宣告伺服器預設編碼的。
我們的 command 命令就是給mysql 在啟動時加了兩個引數。
儲存
容器中有檔案,需要對映出來。
初始化
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 |
配置資訊登記
我的個人微信公眾號:質量管理的哪些年。