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

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

     本書謝絕任何轉載

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM