基於Docker環境構建redis單機容器
1 背景介紹
用傳統部署搭建一套redis環境,中間會消耗太多的重複的工作,導致部署效率非常低。例如:申請虛擬機器,安裝作業系統,軟體包依賴安裝和redis應用部署,這個過程中間需要花費不少時間,同時在安裝的過程中出現問題也需要花費一些時間去處理。然後傳統方式部署方式可移植性相當差。要想將現有redis遷移到新主機,可不是那麼容易的事情,可能最簡單的方式是tar包過去,但是新主機還是需要安裝redis相關的依賴包上去,還需要花些時間去除錯redis,中間反反覆覆的重複工作太浪費時間了。
為了打破傳統部署模式帶來的效率低下問題,我們採用docker容器部署模式,將重複的工作精簡化,也為了方便運維工程師更加快速搭建一套redis環境,redis容器化後能夠解決安裝過程中出現的重複性繁瑣的工作。最終以映象的儲存在映象倉庫中。只要有需求用到redis服務,可以在任何安裝有docker軟體的主機上面執行redis容器,即可達到需求。Docker容器化後的映象即可實現即開即用的效果。
2 映象打包流程
Ø Linux編譯環境:準備一臺能上外網的linux環境,並安裝好docker執行環境。
Ø 基礎映象:在構建應用映象前置條件,需要準備一套乾淨的centos基礎映象,然後在這個基礎映象上面去部署redis軟體。
Ø 配置標準化:按dockerfile的命令格式來編寫,將redis軟體安裝與redis配置步驟寫入到dockerfile檔案中。然後準備好執行環境需要的配置檔案和對應的執行環境啟動指令碼,方便在構建應用映象時將這些檔案打包到映象中。
Ø 構建應用映象:透過編寫dockerfile檔案在基礎作業系統映象裡面將所要執行的所依賴的軟體包和redis軟體部署到映象中,最後透過docker命令將其打成一個新的完整映象包,下次要用redis就直接下載映象部署。
Ø啟動容器:docker命令啟動容器的過程中會將redis服務啟動。
在Docker中,構建一個自定義映象共有兩種方法,一是透過commit指令構建,二是透過Dockerfile檔案構建。這裡我們推薦第二種方法用dockerfile檔案構建redis映象。
3
Dockerfile基本框架
Dockfile是一種被Docker程式解釋的指令碼,Dockerfile由一條一條的指令組成,每條指令對應Linux下面的一條命令。Docker程式將這些Dockerfile指令翻譯真正的Linux命令。Dockerfile有自己書寫格式和支援的命令,Docker程式解決這些命令間的依賴關係,類似於Makefile。Docker程式將讀取Dockerfile,根據指令生成定製的image。相比image這種黑盒子,Dockerfile這種顯而易見的指令碼更容易被使用者接受,它明確的表明image是怎麼產生的。有了Dockerfile,當我們需要定製自己額外的需求時,只需在Dockerfile上新增或者修改指令,重新生成image即可,省去了敲命令的麻煩。
Dockerfile 的內容分為四個部分:基礎映象資訊、維護者資訊、映象操作指令和容器啟動時執行指令
作業系統 |
FROM |
按需求選擇不同型別的基礎作業系統映象 |
常用軟體 |
ADD |
選擇執行所需要的常用軟體,如PHP、NGINX,自動設定相應的執行變數 |
指定使用者 |
USER |
設定啟動容器的使用者,預設是root使用者 |
執行安裝 |
RUN |
執行針對需求包編寫安裝指令碼 |
切換目錄 |
WORKDIR |
可以多次切換(相當於cd命令) |
環境變數 |
ENV |
映象中設定環境變數 |
埠對映 |
EXPOSE |
該指令會將容器中的埠對映成宿主機器中的某個埠 |
儲存使用 |
VOLUMN |
按需定義外掛目錄(IO要求高,持久化,宿主機間共享等) |
啟動執行 |
ENTRYPOINT |
設定指令,指定容器啟動時執行的命令,可以多次設定,但是隻有最後一個有效 |
啟動執行 |
CMD |
容器啟動時需要執行的指令碼 |
4 Redis容器化過程
4.1 Linux 編譯環境
準備一臺centos7虛擬機器,並在這臺主機上面安裝Docker軟體,這裡以docker版本1.13.1為例,來介紹如何安裝Docker軟體步驟。
#下載docker-engine wget #下載docker-engine-selinux wget
#安裝docker軟體依賴檔案 yum install -y libtool-ltdl policycoreutils-python
#先安裝docker-engine-selinux,再安裝docker-engine-selinux yum localinstall docker-engine-selinux-1.13.1-1.el7.centos.noarch.rpm -y yum localinstall docker-engine-1.13.1-1.el7.centos.x86_64.rpm –y
#重啟docker服務 systemctl start docker systemctl enable docker |
下面代表docker 軟體已經安裝成功
4.2 獲取基礎映象
可以直接在Linux編譯環境下載Centos7基礎映象,要求編譯環境是要能上外網連上hub.docker.com外網映象倉庫來下載映象,下面輸入docker search centos可以看到外網docker映象倉庫中有很多centos映象。可以透過docker pull openshift/base-centos7命令來下載centos基礎映象。
用docker pull已經將映象下載到本地linux主機上面,接下來鏡檢查openshift/base-centos7映象完整性,只要docker run命令來啟動這個映象,我們看到這個容器已經正常啟起來。驗證表明這個映象是正常的。
下面是docker日常用到的一些簡單命令:
1 、下載centos 映象 docker pull openshift/base-centos7 2 、檢視映象 docker images 3 、刪除映象 Docker rmi <IMAGE ID > 4 、執行docker 容器 docker run -itd openshift/base-centos7 echo "hello word" 5 、啟停docker 容器 docker start <CONTAINER ID > Docker stop <CONTAINER ID > Docker kill <CONTAINER ID > 6 、進入docker 容器中 Docker exec –it <CONTAINER ID > bash Docker attach <CONTAINER ID > 7 、刪除容器 Docker rm <CONTAINER ID > |
4.3 建立dockerfile 構建redis 環境
1、編寫redis打包映象的dockerfile步驟
2、dockerfile程式設計
#引用centos基礎映象 FROM openshift/base-centos7 MAINTAINER jaymarco #安裝redis依賴包與redis軟體 RUN yum install gcc gcc-c++ make cmake tar python-setuptools -y && \ curl -fL | tar xzf - -C /tmp &&\ cd /tmp/redis-3.2.3 && \ make PREFIX=/usr/local/redis install && \ mkdir -p /usr/local/redis/{bin,etc,var,logs} && \ cp -af src/{redis-benchmark,redis-check-aof,redis-check-rdb,redis-cli,redis-sentinel,redis-server} /usr/local/redis/bin/ && \ cp -a redis.conf /usr/local/redis/etc/ &&\ cp -a sentinel.conf /usr/local/redis/etc/ &&\ echo "export PATH=/usr/local/redis/bin:\$PATH" > /etc/profile.d/redis.sh && \ source /etc/profile.d/redis.sh && \ groupadd -r redis &&\ useradd -g redis redis && \ chmod -R 755 /usr/local/redis/etc && \ yum clean all && \ rm -rf /tmp/redis-3.2.3 &&\ /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\ echo 'Asia/Shanghai' >/etc/timezone
#redis引數最佳化 RUN sed -e 's/^bind 127.0.0.1/#bind 127.0.0.1/' \ -e 's/# save ""/save ""/' \ -e 's/save 900 1/#save 900 1/' \ -e 's/save 300 10/#save 300 10/' \ -e 's/save 60 10000/#save 60 10000/' \ -e 's/appendonly no/appendonly yes/' \ -e 's/# maxmemory-policy noeviction/maxmemory-policy noeviction/' \ -e '481i\requirepass Redis@2017' \ -e '539i\maxmemory 2147483648' \ -i /usr/local/redis/etc/redis.conf && \ sed "s|dir ./|dir /usr/local/redis/dumpdb/|" -i /usr/local/redis/etc/redis.conf && \ sed "s|logfile ""|logfile "/usr/local/redis/logs/redis.log"|" -i /usr/local/redis/etc/redis.conf
#容器埠對映 EXPOSE 6379 #啟動redis ENTRYPOINT ["/usr/local/redis/bin/redis-server", "/usr/local/redis/etc/redis.conf"] |
4.4 構建redis 映象
透過docker build執行建立,-t引數指定映象名稱,來構建redis映象
docker build -t redis:v3.2.3 .
執行中會有類似輸出:
執行完畢後,輸入 docker images 可以檢視當前本機的映象,如下圖,可以看到新增的映象
1.1 啟動redis 容器
Redis是有狀態資料,我們將redis的資料檔案儲存到本地宿主機,只需要在啟動redis容器的時候將本地目錄以卷的方式掛載到容器中。
在本地宿主機建立一個redis儲存目錄
mkdir –p /home/redisdump
然後啟動 redis 容器
docker run -itd --name redis -v /home/redisdump:/usr/local/redis/dumpdb \ -p 6379:6379 redis:v3.2.3 |
我們看到容器已經正常啟動,並能檢視到它正在執行的進行資訊。
1 驗證redis容器
啟動redis容器的時候已將redis容器的6379埠對映到外面的宿主機6379埠,說明我們能夠透過宿主機地址加上6379就能夠訪問redis容器裡面的資料。
現在我們來測試一下
現在宿主機上模擬插入一條資料,然後返回到容器檢視資料是否存在
進入容器我們檢視資料是有的,說明我們的映象是成功的 。
有需要的朋友可以關注我的公眾號,文章每日一更
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28833846/viewspace-2701145/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基於docker 搭建redis環境—redis單機版DockerRedis
- Docker構建redis叢集環境DockerRedis
- 如何構建基於 docker 的開發環境Docker開發環境
- 如何構建基於docker的開發環境Docker開發環境
- 構建一個基於容器的開發環境開發環境
- 基於docker構建中介軟體容器應用環境Docker
- 基於 Docker 構建統一的開發環境Docker開發環境
- docker構建php環境DockerPHP
- Docker 構建PHP 映象環境DockerPHP
- 基於docker環境下搭建redis主從叢集DockerRedis
- 基於 Vagrant 構建 PHP 開發環境PHP開發環境
- 基於openvswitch+Docker構建SDN網路測試環境 (使用ovs-docker進行構建)Docker
- Docker折騰記: (2)基於docker-compose構建yapi容器DockerAPI
- 基於Docker搭建LNMP環境DockerLNMP
- 用前端姿勢玩docker【三】基於nvm的前端環境構建技巧前端Docker
- websocketd | 基於 docker 構建WebDocker
- 基於CentOS7映象容器的MySQL環境構築CentOSMySql
- 用 Docker 構建 MySQL 主從環境DockerMySql
- docker 靈活的構建 PHP 環境DockerPHP
- 用 Docker 構建 PHP 開發環境DockerPHP開發環境
- 基於ECS快速搭建Docker環境Docker
- Docker容器學習梳理 - 基礎環境安裝Docker
- 用前端姿勢玩docker【四】基於docker快速構建webpack的開發與生產環境前端DockerWeb
- docker 入門講解 - 構建本地環境Docker
- Docker 構建 Java Web 開發環境(一)DockerJavaWeb開發環境
- Docker LNMP Redis 環境搭建DockerLNMPRedis
- 基於GitLab CI搭建Golang自動構建環境GitlabGolang
- 基於 GitLab CI 搭建前端自動構建環境Gitlab前端
- 基於Docker的LNMP開發環境DockerLNMP開發環境
- Docker容器 關於映象構建的安全問題Docker
- 基於ubuntu映象構建redis映象UbuntuRedis
- Linux 上部署 docker,基於 docker 搭建 lnmp 環境LinuxDockerLNMP
- Docker 構建統一的前端開發環境Docker前端開發環境
- 利用 Docker 構建一個簡單的 java 開發編譯環境DockerJava編譯
- docker(podman)容器設定中文環境Docker
- 使用docker-compsoe構建一個簡單nginx+php環境DockerNginxPHP
- 徒手用 Docker 構建自己的 PHP 開發環境DockerPHP開發環境
- Docker 構建 Java Web 開發環境——使用Dockerfile(二)DockerJavaWeb開發環境