Friday, April 5, 2019

Docker 環境安裝 Redis 到外網訪問



Docker 環境安裝 Redis 到外網訪問


寫到一半的時候發現,那我們的東西 ,都放在裡面的話是不是不能拿出來???
當然要想辦法給外面用,所以我找到了大概這些東西

  • docker 簡單指令
  • docker 訪問 外部文件(簡單版) 直接 跟著做
  • docker 映射端口 至 外網 直接 跟著做
Docker 簡單指令


簡單翻了一下,大概搭建到完成Redis 使用的指令
  • docker ps  類似 linux 管理 目前containers 那些被啟動
  • docer stop start restart containers開開關關
  • docker -d -p 外部端口 ip映射
  • docker -v 掛載 外部文件會用到
  • docker --name containers 名稱
  • docker-machine ip default 查docker 實體ip
  • docker exec -it {ps_name} bash 中括號不算
  • docker rm 砍 containers用的 (我目前還沒用到)
看得很模糊走一次就知道了

Docker install Redis


在Redis 裡面呢 假設我們要配置服務器的話那麼

  • docker search redis 
  • docker pull redis:latest 
  • docker images

執行完後會下載 Redis 最後一個版本囉,接下來看下面 就是大概就這邊比較可以學到東西

Docker Run Redis!


上面裝完了基本上就可以 來創造我們的一個 containers 
這是 這次的主角 配置 參數 ,那麼我將會根據 步驟 來 反白我們參數目前進行的部分

docker run -d -p 192.168.99.100:56379:6379 -v /c/Users/redis.conf:/usr/local/etc/redis/redis.conf --name myredis13 redis redis-server  /usr/local/etc/redis/redis.conf

Docker 查詢 docker 實體機 位置


docker run -d -p 192.168.99.100:56379:6379 -v /c/Users/redis.conf:/usr/local/etc/redis/redis.conf --name myredis13 redis redis-server  /usr/local/etc/redis/redis.conf
  • docker-machine ip default 查docker 實體ip

Docker 訪問外部 conf


https://hub.docker.com/_/redis/
docker run -d -p 192.168.99.100:56379:6379 -v /c/Users/redis.conf:/usr/local/etc/redis/redis.conf --name myredis13 redis redis-server  /usr/local/etc/redis/redis.conf
在Redis 裡面呢 假設我們要配置服務器的話那麼怎麼辦呢,我想到可以用vim去配置,或修改文件,後來想想,那既然已經cmd能不能就是直接有本地端直接配置 conf文件呢,查找了一下
大致上是這樣的,我找到了一個最間單的方法,要比較完整的請找 -v 參數 或者是 volume??
在windows 裡面裝的 docker 要讀 conf的 系統大致上已經幫我們配置了一個地方可以放也就是
C:\Users
這個目錄

我們把 Redis 伺服器配置文件放到這個地方,這個文件可以從 我們編譯 Redis 的地方 目錄可以拿的到
所以從這裡把配置文件redis.conf複製到C:\Users\

那我們的Redis 基本上就可以抓到了

Docker 映射端口至外網


docker run -d -p 192.168.99.100:56379:6379 -v /c/Users/redis.conf:/usr/local/etc/redis/redis.conf --name myredis14 redis redis-server  /usr/local/etc/redis/redis.conf

這串指令我還沒詳細介紹過 ,我大致從頭在講一次,docker 啟動 一個Redis 然後 會去映射端口 到 192.168.99.100:56379這個端口,被映射端口為6379 然後 我們的配置文件位於 C:\Users\裡面的redis.conf  在這邊寫法為 /c/Users/redis.conf ,然後映射到虛擬機的位置為/usr/local/etc/redis/redis.conf ,接下來我們創造的 container 他的名字叫做myredis14 然後 選擇啟動哪個 Image 也就是redis  ,然後 呼叫系統服務
redis-server  /usr/local/etc/redis/redis.conf 他的配置文件為  /usr/local/etc/redis/redis.conf 

我們的目標要把Redis 端口映射到port :56379,首先 我們先看 docker ps 
首先我們要先配置文件給設定正確的ip
docker inspect 137|grep -i add      搜尋 此 containers  裡面Ip位置 ,目前還不知道docker 架構所以我隨便說的,可能 docker 想像是一個vm 然後 你啟動她一定是抓取內網ip等等等等,服務配置文件就是去監聽自己的端口172.17.0.2 所以 虛擬機裡的服務去監聽自己
那們我們來更動一下位置 設為 bind 172.17.0.2
接下來,設定完畢後我們可以 來啟動了
這邊的話假設要看文件是否有更動呢,
docker run -d -p 192.168.99.100:56379:6379 -v /c/Users/redis.conf:/usr/local/etc/redis/redis.conf --name myredis14 redis redis-server  /usr/local/etc/redis/redis.conf
首先我們的 docker ps 管理器 為空,那麼可以來下指令
沒意外可以看到我們的 容器為 myredis14  已經被啟動了!

弄個大概我們可以把它產生 一個 image
docker commit 137a23d757d8 redis/testimage:version1
假設其他你有要儲存的東東,下次就可以繼續使用囉!



Docker 刪除多餘的table 


docker ps -a --format "table {{.ID}}\t{{.Names}}"
docker rm myreadis14...

Docker 安裝 和搭建Redis編寫環境


大哥要走了,能不能繼承他的遺志呢,先來著手搭建環境,解決資料重複查詢問題,大哥說醫院架構組的是JPA機制,由於呢java 處理 xml的東西(? 是有問題的?,就在這一層假設能做到cache那麼,可以大大減少對伺服器重複的負擔。
再裝 Redis 之前,我們要先裝起docker ,
先決條件是不能裝vm,
然後電腦版本需求 不能是windows 預覽版,
再來就是系統必須支援hyper-v ,
那麼 我的電腦又開始有一堆問題了
,首先我裝的是 windos 10 home 所以呢,我需要強制開啟hyper-v
上script
再來就是 裝完重新開機我設成這樣
,恩 其中裝環境就可以耗掉很多時間了
https://docs.docker.com/toolbox/toolbox_install_windows/
https://oomusou.io/docker/toolbox/
,我已經把最難的script 找出來了接下來應該算滿簡單

接下來比較詭異的地方來了我們要編譯Redis ,當然我們是需要編寫程式去控制的所以呢我們要在這邊搭建編寫的環境
然後我們使用的visual studio 環境
這邊呢順便,這個專案是微軟專門維護的應該是(?
https://github.com/MicrosoftArchive/redis
然後我們下載進來,進去msvs
開啟我們的專案
這邊的話,因為我們已經決定要把伺服器架在,docker所以呢,我們這邊負責把 相關的lib 給編出來給我們 最上面那隻ConsoleApplication1 (這是我們新建的)給引用,下面會詳細介紹lib放置位置,在上圖中我們把hiredis,Win32_Interop給重新建置就可以了記得,我們假設使用的是 2017,我們在上一章環境把它設為較低一點,相容性會比較好?

沒意外我們要來開始搬檔案了,首先我們先新增一個專案
其實我不常用visual studio 寫code ,所以有點不知道 lib 檔案放置位置所以呢,我參照,一些神人的放置,加上我以前那樣放置code,就編譯成功了,
這位國人話說的有點籠統我們來詳細解析一下

首先我們把剛剛hiredis,Win32_Interop ,給編譯完,取得下面這兩個
  • \redis-3.0\deps\hiredis 
  • \redis-3.0\src\Win32_Interop
複製到我們ConsoleApplication1 目錄底下,然後我們的專案直接參考
就對專案直接右鍵,有個參考,打勾這裡相當於 應該是
#pragma comment(lib,"XXX.lib") 
然後我們按下確定,跑去標頭檔那邊
這邊我們直接指定了


再來回到我們主程式

run! ,但是目前你們是看不到畫面的