在windows環境裏,用Docker搭建Redis開發環境(新書第一個章節)

    你們都知道高併發分佈式組件的重要性,並且若是要進大廠,這些技術不可或缺。但這些技術的學習難點在於,大多數項目裏的分佈式組件,都是搭建在Linux系統上,在本身的windows機器上很難搭建開發環境,若是沒法搭建開發環境,就沒法實際操練,而單靠背理論題,是沒法經過面試的。linux

     好比搭建Redis環境,或許能夠在windows上下載個版本,但這個版本不是最新的,並且若是要搭建集羣,可能還只能到Linux環境上。對此,能夠先在Windows機器上安裝Docker,而後在linux容器裏安裝Redis。這樣一旦引入Docker,不只能比較容易地搭建Redis集羣,並且還能在Windows上搭建其它分佈式組件的環境。面試

    在本文裏,首先將介紹Docker的相關技能,而後再給搭建基於Docker的Redis開發環境的步驟。 redis

1 瞭解必要的Docker技能

    在Docker裏,容器、鏡像和倉庫是三個比較重要的概念。其中鏡像(image)是一個靜態的概念,好比能夠把一個最小化的linux操做系統打包成一個鏡像而後再傳入倉庫,也能夠先在linux 上安裝Redis,再把整合這二者的二進制流打包成一個鏡像。若是在本機安裝好Docker後,本地操做系統、Docker以及容器的相互關係以下圖所示。其中最底層的是本機操做系統,好比Windows,在之上是能運行容器的Docker。 docker

  

     在實際項目裏中,會用Docker命令,從倉庫中下載鏡像,好比是linux+Redos鏡像,而後再能經過命令啓動鏡像,這樣就可使用鏡像裏的Redis等應用了。在下文給出具體的操做演示前,這裏先總結下Docker的相關概念。shell

  • 倉庫實際上是個代碼中心,能夠是在本地,也能夠設置在遠端,在其中能存儲鏡像,在本書裏,通常是從默認的遠端倉庫裏下載鏡像。
  • 鏡像是靜態,有些相似Java裏的類,而容器是鏡像運行時的實體,也能夠理解成由類實例化而成的對象。而經過Docker加容器的方式,能夠快速地在Windows平臺上搭建基於Linux的Redis環境。
  • 在開發應用意義上講的Docker,通常包含Docker軟件和Docker命令。在後文裏,不只會給出下載安裝Docker的步驟,更會講述平時項目裏常常用到的能下載鏡像和啓動容器等的Docker命令。經過此類命令,你們能對Redis進行必要的開發、配置和部署動做。

    若是要在Windows上安裝Docker, 能夠到官網www.docker.com上去下載對應於Windows的Docker安裝程序,下載完成後按步驟依次按提示點擊,便可完成安裝。完成後,能在任務欄裏看到Docker圖標,鼠標移上去後,能看到相似於「Docker正在運行」的提示。再進入到命令窗口,輸入docker version命令,若是能正確地看到輸出的版本信息,就說明Docker已經成功地在本地安裝成功。  ubuntu

2 Docker的相關命令

    這裏將給出比較經常使用Docker命令,打開命令行窗口,首先運行docker images來看下當前本機有哪些鏡像。因爲此時剛安裝好Docker,還沒下載鏡像,因此本地沒有任何鏡像。能夠經過docker pull命令來下載鏡像,好比能夠用docker pull ubuntu:latest,去默認的遠端docker倉庫下載最新的ubuntu鏡像,而ubuntu 是基於Debian的Linux 操做系統,這裏pull命令後ubuntu:latest,表示去下載最新版本的ubuntu。下載完成後,再運行docker iamges命令,就能看到以下圖所示的效果。 windows

     其中REPOSITORY和TAG字段分別表示鏡像的名字和標籤,而IMAGE ID則表示鏡像的ID,CREATED和SIZE則表示該鏡像的建立時間和大小。通常來講,能夠經過REPOSITORY:TAG或IMAGE ID,能惟一標識某個鏡像。bash

    而經過docker rmi命令能刪除本地鏡像,具體語法是docker rmi 鏡像名:標籤,或者是docker rmi 鏡像ID。好比這裏能經過docker rmi ubuntu:latest或docker rmi 1d622ef86b13,能刪除剛下載的ubuntu:latest鏡像。服務器

2.1 Docker容器相關的命令

    鏡像和容器是相似於類和對象的關係,經過實例化類,能獲得對象,而經過run命令,則能運行鏡像生成容器。好比經過前文的docker pull命令下載好ubuntu鏡像後,就能夠經過以下的run命令來啓動該鏡像。併發

         1      docker run -it ubuntu:latest /bin/bash

    其中經過ubuntu:latest,能指定待運行的鏡像,-it表示在終端交互式操做,而/bin/bash則表示容器啓動後須要執行的命令,這裏是啓動shell。運行上述命令後,就能在該容器裏運行基於linux的命令,好比ls或pwd,運行完命令後,能夠經過exit從容器交互窗口裏退出來。相關的操做的效果以下圖所示。

 

     而經過docker ps命令,能看到當前全部的容器,若是要展現全部的容器,則能夠加入-a參數。運行docker ps -a後,能看到以下圖所示的結果。 

    其中STATUS表示當前容器的狀態,這裏是Exited,表示已退出,並且從中還能看到容器的ID以及該容器所對應的鏡像。

    而經過docker rm 容器ID命令,能刪除指定的容器,好比能經過docker rm bc8d0ea9a1a3命令刪除剛纔經過run命令建立的容器,刪除後再運行docker ps -a,就能確認該容器已經被刪除。

2.2 用pull命令下載最新Redis鏡像

    能夠用「docker pull redis」命令,下載最新版本的redis鏡像,這裏也能夠用「docker pull redis:標籤」的命令,下載指定版本的redis,若是不指定,則會用默認的標籤latest去下載最新版本的redis鏡像。運行該命令後,能看到以下圖所示的效果圖,從中能看到,已經成功下載了最新版本redis鏡像。

 

    隨後能夠用以下的run命令來運行Redis容器。

         1      docker run -itd --name myFirstRedis -p 6379:6379 redis:latest

    這裏的-it表示在終端交互式操做,而d則表示在後臺運行。經過—name能指定該容器的名字,而經過-p參數,指定了容器的6379端口映射到宿主機(即運行Docker的機器)6379端口,這樣在容器外部就能以宿主機ip:6379的方式訪問Redis服務,最後的redis:latest參數,則指定根據該鏡像啓動容器。運行完上述run命令後,再執行docker ps命令,能看到以下圖所示的結果。 

   從中能看到,名爲myFirstRedis的容器處於Up狀態,而且是經過6379端口對外提供服務。

2.3 經過exec命令進入Redis容器

   經過run命令,能在後臺啓動Redis容器,此時能夠經過以下的exec命令,進入到Redis容器,進入容器後,就能執行Redis的相關操做。

         1      docker exec -it myFirstRedis /bin/bash

    docker exec 表示在運行的容器中執行命令, 其中myFirstRedis參數表示在哪一個容器裏執行命令,-it表示以終端交互的方式執行命令,而/bin/bash則表示須要指定的命令。執行上述exec命令後,就能看到以下圖所示的效果,這說明已經進入了名爲myFirstRedis的容器,隨後在命令窗口裏能夠繼續輸入Redis命令。

    在上圖所示的界面裏,能夠繼續輸入redis-cli命令,鏈接該容器裏的Redis服務器,隨後能夠經過set val 1命令,建立一個值的1的val變量,建立後再能夠經過get val來獲取val變量的值,具體效果以下圖所示。 

    這裏提到的redis-cli等命令的含義,在後文裏會詳細說明,但只要若是能成功地運行Redis相關命令並看到對應的結果,就能說明基於Docker的Redis開發環境已經成功地安裝到本機裏。隨後若是要退到Windows命令行,則須要連續兩次輸入exit,其中經過第一個exit命令,能退出用redis-cli進入到的Redis運行窗口,而經過第二個命令,能退出因docker exec命令而進入到的Redis容器。

2.4 中止、重啓和刪除Redis容器

    因爲本書所介紹的Redis的開發和運行環境是基於Docker的,當Redis容器啓動後,在修改容器配置等操做後,可能須要重啓容器,而且在一些場景裏,還須要中止並刪除過時的Redis容器,因此在這裏就將給出相關的操做步驟。

    當運行docker ps,發現名爲myFirstRedis的Redis容器處於Up(即運行中)狀態時,能夠經過docker stop myFirstRedis命令中止該容器,其中myFirstRedis是待中止的容器名。請注意這裏中止的是容器,而不是Redis服務,運行後再經過docker ps,就沒法再看到myFirstRedis,應爲該命令只返回處於Up狀態的容器,此時須要用docker ps -a命令,查看全部容器時,才能看到以下圖所示的效果,從中能看到,myFirstRedis容器已經處於Exited(即退出)狀態。 

     若是要再啓動該容器,能夠用docker start myFirstRedis或docker restart myFirstRedis命令,這兩個命令的參數都是待啓動的容器名。這兩個命令的差異是,docker start會掛載容器所關聯的文件系統,而docker restart不會。因此在須要重啓容器時,建議先運行docker stop命令,再運行docker start命令。

    若是當Redis等容器裏的配置或數據過於老舊時,能夠經過docker rm命令刪除該容器,具體語法是docker rm 容器名,但在刪除前,首先要確保該容器處於Exited狀態,不然刪除時會出錯。

    好比要刪除名爲myFirstRedis的Redis容器,首先要用docker stop myFirstRedis命令確保該容器處於Exited狀態,隨後再用docker rm myFirstRedis命令刪除,刪除完成後再運行docker ps -a命令查看全部狀態的容器時,就沒法再看到該容器了。 

3 總結容器和Redis的相關命令 

    在上文裏,給出了針對容器和Redis的若干命令,爲了讓你們在學習過程當中不產生混淆,這裏將根據流程,總結下相關的命令。

    第一,    在安裝完Docker軟件後,能夠在命令行裏輸入docker pull redis命令去下載最新的Redis鏡像,下載完成後,能經過docker images命令來確認鏡像。

    第二,    能夠用docker run -itd --name myFirstRedis -p 6379:6379 redis:latest命令,根據下載的redis:latest鏡像建立名爲myFirstRedis容器。建立完成後,能經過docker ps -a命令來查看對應的容器。

    第三,    若是建立前已經有名爲myFirstRedis的容器,那麼若是再建立同名的容器,就會出現問題,這時能夠先用docker stop myFirstRedis命令確保該容器處於Exited狀態,並經過docker rm myFirstRedis命令刪除該容器。

    第四,    在建立並啓動myFirstRedis容器後,則能夠經過docker exec -it myFirstRedis /bin/bash命令進入到myFirstRedis容器,隨後能夠經過redis-cli命令,建立一個連到Redis服務器的客戶端,並經過該客戶端輸入各類Redis命令。

    第五,    若是須要從新啓動myFirstRedis容器,能夠先經過docker stop myFirstRedis命令中止該容器,再經過docker start myFirstRedis命令啓動它。

    第六,    若是要中止Redis服務器,則能夠先經過redis-cli命令鏈接到服務器,再輸入shutdown命令,或者在myFirstRedis容器的命令行裏直接輸入exit命令。

4 求贊和版本說明 

    經過上文的總結,你們能系統性地理解相關命令。雖說,用Docker搭建基於Linux的Redis的開發環境要比直接安裝基於Windows的Redis環境要麻煩,但一方面,在Linux環境上能安裝最新版的Redis,而在Windows上則只能安裝比較老的版本,並且在大多數項目裏,Redis都是配置在Linux上,因此,你們在安裝Redis環境上付出的努力是值得的。

     本文是從我新書第一個章節裏摘錄出來的,若是你們感受能夠,都請點贊,若是有什麼項目,也能夠留下評論。

     本書謝絕任何轉載

相關文章
相關標籤/搜索