docker部署redis實戰
- 2019 年 12 月 12 日
- 筆記
「 換電腦的時候不想再搭建開發環境了!——編程三分鐘」
什麼是docker
Docker是一個用來管理容器的應用程序,而容器就是模擬運行應用程序所依賴環境的一個服務。一般一個容器內只安裝一個程序,在容器內的應用程序會認為自己是機器上運行的唯一進程,一台機器可以獨立運行多個容器。
使用容器的好處就是不用再繁瑣的配置運行環境,便於構建、測試、持續集成;可以動態擴容和縮容、充分利用一台服務器跑多個服務,因此在本機就可以模擬出微服務架構。
當然,我個人覺得最爽的一點還是可以在容器里隨意的開發測試,但也不用擔心把自己心愛的電腦搞的亂七八糟了。
準備
- 一台安裝docker的機器
- 能通網並訪問最新版本的Docker Engine (服務端)
- 本地開發機器安裝了Docker Client(Docker 命令行工具),可通過命令行訪問。
運行容器
可以在 官網上 搜索到現成的鏡像,也可以用以下方式查找容器,命令格式:
docker search <name>
實際執行
$ docker search redis NAME DESCRIPTION STARS OFFICIAL AUTOMATED redis Redis is an open source key-value store that… 7023 [OK] bitnami/redis Bitnami Redis Docker Image 114 [OK] 省略……
我們找到了redis的OFFICIAL(官方)docker 鏡像名就是redis,為了讓它能提供服務,我們接下來的任務就是讓他作為後台服務運行,命令格式:
$ docker run <options> <image-name>
默認情況下,Docker將在前台運行命令。要在後台運行,需要指定選項-d。
$ docker run -d redis 570315fb8a0596ff5581653a77f8ef406f86a0ab4b1a2061de7a423335812ed3
默認情況下,Docker將運行最新版本。如果需要特定版本,則需要將其顯式的指定出來。 例如,版本3.2
$ docker run -d redis:3.2
由於這是我們第一次使用Redis鏡像,所以它將被下載到Docker主機上,如果本地存在就不會了。
查看運行中的容器
可以用docker ps
命令列出所有正在運行的容器,包括用於啟動容器的鏡像和正常運行的時間等信息。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 570315fb8a05 redis "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 6379/tcp elastic_mclean
列出正在運行的容器的更多詳細信息,例如IP地址,命令格式如下:
docker inspect <friendly-name|container-id>
通過docker logs命令可以查看容器的日誌,命令格式如下:
docker logs <friendly-name|container-id>
訪問redis
我們現在用容器部署成功了一個redis,但是和直接安裝一個redis不一樣,容器就像一台虛擬機一樣,想要訪問服務,要不就進入到裏面,要不就通過暴露端口像遠程訪問一樣來進行訪問。
-p <host-port>:<container-port>
選項可以在啟動容器的時候綁定端口。
這個時候使用-name <name>
來在啟動容器的時候定義一個名稱,以後查詢以及查看日誌都會比較方便。
因為redis默認佔用6379端口,我們可以將端口6379映射到本地的6379
$ docker run -d --name redisHostPort -p 6379:6379 redis:latest 694384d739307f3c5bc59fa
tips:默認情況下,主機上的端口映射到0.0.0.0,可以在定義端口映射的時候指定特定的IP,例如-p 127.0.0.1:6379:6379
假設我們要部署多個redis不可能每次都自己親手來找一個端口來映射,docker是支持自動綁定到可用端口上的,只要用-p 6379
這個參數就可以了,像下面這樣。
$ docker run -d --name redisDynamic -p 6379 redis:latest dcd3dabe51c3f0a8ddbdfd
到底綁定了哪個端口,可以用以下命令查詢(這個時候就用到自定義的名稱redisDynamic了),當然直接用docker ps
也是可以的。
$ docker port redisDynamic 6379 0.0.0.0:32768
存儲數據
在使用容器的時候我們會發現,一旦創建和刪除、升級容器,裏面存儲的數據也就隨風而去了,所以我們必須想辦法把數據存儲下來。
我們查詢到官網上的redis鏡像存儲數據的目錄在/data
目錄,然後我們存儲在本地/opt/docker/data/redis
使用參數-v 本機位置:容器內位置
docker run -d --name redisMapped -v /opt/docker/data/redis:/data redis c9c154695500260407d99d
當然了,也可以把配置文件重定向到本地,可以把所有的容器配置、日誌、數據統一管理,非常的方便。
與平台交互
docker run ubuntu ps
啟動Ubuntu容器並執行命令ps以查看容器中運行的所有進程。 docker run -it ubuntu bash
直接訪問容器內的bash shell。
$ docker run ubuntu ps PID TTY TIME CMD 1 ? 00:00:00 ps $ docker run -it ubuntu bash root@6db973337059:/# exit
訪問正在運行的docker docker attach <container>
要attach上去的容器必須正在運行。 docker exec -it <container> bash|sh
直接訪問容器內的bash shell。
$ docker attach c9c154695500 /bin/bash root@c9c154695500:/data# exit $ docker exec -it c9c154695500 /bin/bash root@c9c154695500:/data# exit
這裡也可以直接用容器name
- attach 直接進入容器,不會啟動新進程
- exec 在容器中打開新終端,會啟動新進程
那什麼時候用attach,什麼時候用exec呢?