版本公升級分為兩部分,一部分是資料庫服務的公升級,一部分是其他服務的公升級。
1、當然,首先要判斷是否需要公升級,我沒想到更好的辦法,我是根據docker映象的tag來判斷的,tag可以作為版本號,通過比較以安裝的映象的tag和要安裝的版本號比較即可得知是否需要公升級。
(1)查詢某個映象的tag
declare tag=$(docker images | grep '映象名' | awk )
docker images | grep '映象名' | awk 的意思是,查詢docker images列表中包含某個字串的映象,並返回列表的第二列即tag列。
(2)比較版本號大小
if [ -z "$" ]; then
#tag為空說明沒裝docker,走安裝流程.
elif [[ "$" < "最新版本" ]]; then
#走公升級流程
fi
2、其他服務的公升級比較簡單,只需要銷毀容器和映象,重新構建即可。
(1)銷毀容器,在docker-compose.yml所在目錄下執行:
docker-compose down
(2)刪除映象
docker rmi -f $(docker images | grep athena | awk )
(3)重新構建映象並執行容器,在docker-compose.yml所在目錄下執行
docker-compose up -d
3、資料庫的公升級,我自己琢磨的,不清楚是不是有更好的方案。
步驟:(1)將公升級指令碼拷貝到mysql容器中
(2)執行公升級指令碼
下面分別來說一下(本例中資料庫容器名稱為mysql-server):
(1)將公升級指令碼拷貝到mysql容器中
docker cp 要拷貝的檔案路徑 容器名:要拷貝到容器裡面對應的路徑
在本例中:
docker cp upgrade.sql mysql-server:/usr/local/work
docker cp upgrade.sh mysql-server:/usr/local/work
(2)執行公升級指令碼
在docker-compose.yml檔案目錄下執行:
docker-compose exec 容器名 命令
在本例中:
docker-compose exec mysql-server bash /usr/local/work/upgrade.sh
upgrade.sh:
mysql -uroot -p$mysql_root_password << eof
source /usr/local/work/upgrade.sql
eof
ps:由於mysql容器資料庫的資料是放在宿主機檔案系統的,所以mysql容器的銷毀或建立甚至mysql映象的重新構建都不會影響資料,容器重新執行後資料庫依然能正常使用。
Docker學習筆記 Docker容器
docker利用容器執行應用,容器是從映象建立的執行例項,每個容器都是相互隔離的。映象是唯讀的,容器在啟動的時候在其上建立了一層可讀寫層。啟動乙個容器有兩種方法,一種是從映象建立乙個容器並執行,另一種是重新啟動處於終止狀態的容器。使用docker run命令從映象建立並啟動乙個容器。使用docker...
Docker學習筆記 容器的連線
當我們學會了使用映象和容器後,我們需要能夠連線到容器,比如我們在自己的伺服器上部署了自己的應用,我們怎麼連線到這個應用呢?網路埠對映 首先我們建立了乙個python應用的容器,然後啟動它 兩種方式的區別是 p 容器內部埠隨機對映到主機的高埠 p 容器內部埠繫結到指定的主機埠 同時我們還可以繫結網路位...
docker學習 docker容器
1.容器檢視 已經啟動的容器 docker ps 所有的容器 docker ps a2.啟動容器相關引數 互動式容器 退出時容器處於停止狀態,無法使用 docker run it name mynginx nginx bin bash 退出當前容器 exit 守護式容器 埠88是宿主機的對映埠 do...