1. 程式人生 > >在windows環境裡,用Docker搭建Redis開發環境(新書第一個章節)

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

    大家都知道高併發分散式元件的重要性,而且如果要進大廠,這些技術不可或缺。但這些技術的學習難點在於,大多數專案裡的分散式元件,都是搭建在Linux系統上,在自己的windows機器上很難搭建開發環境,如果無法搭建開發環境,就無法實際操練,而單靠背理論題,是無法通過面試的。

     比如搭建Redis環境,或許可以在windows上下載個版本,但這個版本不是最新的,而且如果要搭建叢集,可能還只能到Linux環境上。對此,可以先在Windows機器上安裝Docker,然後在linux容器裡安裝Redis。這樣一旦引入Docker,不僅能比較容易地搭建Redis叢集,而且還能在Windows上搭建其它分散式元件的環境。

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

1 瞭解必要的Docker技能

    在Docker裡,容器、映象和倉庫是三個比較重要的概念。其中映象(image)是一個靜態的概念,比如可以把一個最小化的linux作業系統打包成一個映象然後再傳入倉庫,也可以先在linux 上安裝Redis,再把整合這兩者的二進位制流打包成一個映象。如果在本機安裝好Docker後,本地作業系統、Docker以及容器的相互關係如下圖所示。其中最底層的是本機作業系統,比如Windows,在之上是能執行容器的Docker。 

  

     在實際專案裡中,會用Docker命令,從倉庫中下載映象,比如是linux+Redos映象,然後再能通過命令啟動映象,這樣就可以使用映象裡的Redis等應用了。在下文給出具體的操作演示前,這裡先總結下Docker的相關概念。

  • 倉庫其實是個程式碼中心,可以是在本地,也可以設定在遠端,在其中能儲存映象,在本書裡,一般是從預設的遠端倉庫裡下載映象。
  • 映象是靜態,有些類似Java裡的類,而容器是映象執行時的實體,也可以理解成由類例項化而成的物件。而通過Docker加容器的方式,可以快速地在Windows平臺上搭建基於Linux的Redis環境。
  • 在開發應用意義上講的Docker,一般包含Docker軟體和Docker命令。在後文裡,不僅會給出下載安裝Docker的步驟,更會講述平時專案裡經常用到的能下載映象和啟動容器等的Docker命令。通過此類命令,大家能對Redis進行必要的開發、配置和部署動作。

    如果要在Windows上安裝Docker, 可以到官網www.docker.com上去下載對應於Windows的Docker安裝程式,下載完成後按步驟依次按提示點選,即可完成安裝。完成後,能在工作列裡看到Docker圖示,滑鼠移上去後,能看到類似於“Docker正在執行”的提示。再進入到命令視窗,輸入docker version命令,如果能正確地看到輸出的版本資訊,就說明Docker已經成功地在本地安裝成功。  

2 Docker的相關命令

    這裡將給出比較常用Docker命令,開啟命令列視窗,首先執行docker images來看下當前本機有哪些映象。由於此時剛安裝好Docker,還沒下載映象,所以本地沒有任何映象。可以通過docker pull命令來下載映象,比如可以用docker pull ubuntu:latest,去預設的遠端docker倉庫下載最新的ubuntu映象,而ubuntu 是基於Debian的Linux 作業系統,這裡pull命令後ubuntu:latest,表示去下載最新版本的ubuntu。下載完成後,再執行docker iamges命令,就能看到如下圖所示的效果。 

     其中REPOSITORY和TAG欄位分別表示映象的名字和標籤,而IMAGE ID則表示映象的ID,CREATED和SIZE則表示該映象的建立時間和大小。一般來說,可以通過REPOSITORY:TAG或IMAGE ID,能唯一標識某個映象。

    而通過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環境上付出的努力是值得的。

     本文是從我新書第一個章節裡摘錄出來的,如果大家感覺可以,都請點贊,如果有什麼專案,也可以留下評論。

     本書謝絕任何轉載

&n