Docker的使用 原

安裝Docker(centos7)

  1. 查看liunx內核版本,命令:uname -r,版本必須高於3.10
  2. 安裝一些必要的系統工具(非必需):
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
  3. 添加軟件源信息:
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  4. 更新 yum 緩存:
    sudo yum makecache fast
    
  5. 安裝 Docker-ce:
    sudo yum -y install docker-ce
    
  6. 啓動 Docker 後臺服務
    sudo systemctl start docker
    
  7. 測試
    docker run hello-world
    
  8. 配置阿里鏡像地址,在 /etc/docker/daemon.json文件中(沒有則新建)中新增如下配置:
    {
      "registry-mirrors":["https://kfwkfulq.mirror.aliyuncs.com"]
    }
    
  9. 卸載
    yum remove docker-ce
    rm -rf /var/lib/docker
    

用Docker運行一個redis

  1. 拉取鏡像
    docker pull redis:4.0.7    #版本號可以不寫,不寫默認拉取的是latest,可以去Docker Hub上看有哪些版本
    
  2. 創建一個redis容器並啓動服務
    docker run -d -v /home/docker/redis/redis.conf:/etc/redis/redis.conf -p 6379:6379 --name docker_redis redis:4.0.7  redis-server /etc/redis/redis.conf
    
    -d 表示後臺運行容器  
    -v 表示給容器掛載文件  
    -p 表示宿主機和容器端口映射  
    --name 表示給容器取個名字  
    redis:4.0.7  是鏡像的名稱  
    redis-server 是啓動redis服務的命令
    
  3. 啓動容器中redis客戶端來連接redis
    	docker exec -it docker_redis redis-cli
    
  4. 其他常用操作
    	docker images -a    #列出本地所有的鏡像  
    	docker rmi redis    #刪除本地的reids鏡像
    	docker ps -a        #列出所有容器
    	docker start docker_redis  #啓動docker_redis容器
    	docker stop docker_redis   #停止docker_redis容器
    	docker rm docker_redis     #刪除docker_redis容器
    	docker exec -it docker_redis /bin/bash  #打開一個docker_redis容器的終端
    	docker stop $(docker ps -a -q)   #stop停止所有容器
    	docker rm $(docker ps -a -q)    #remove刪除所有容器
    	docker cp 容器名:文件路徑 宿主機文件路徑	#將容器中的文件拷貝出來
    	docker cp 宿主機文件路徑 容器名:文件路徑	#將文件拷貝到容器中
    

本地構建一個redis鏡像

  1. 編寫Dockerfile文件
    	####################################################
    	# 使用本地的redis包,基於centos,構建一個redis鏡像
    	####################################################
    
    	# 指定基礎鏡像
    	FROM centos:latest
    	# 定義作者
    	MAINTAINER zyq
    	# 安裝基礎工具
    	RUN yum install -y gcc make
    
    	# 安裝redis
    	WORKDIR /home	
    	ADD redis-4.0.1.tar.gz ./  #會自動解壓的
    	WORKDIR ./redis-4.0.1
    	RUN make PREFIX=/usr/local/bin install #編譯安裝redis
    
    	WORKDIR ../
    	RUN rm -rf redis-4.0.1
    	RUN yum remove -y make gcc 
    	RUN yum clean all
    	#使用本地redis配置文件
    	ADD redis.conf /etc/redis/redis.conf  
    
    	# 指定與宿主機通信端口
    	EXPOSE 6379
    	# 容器啓動時啓動redis服務
    	ENTRYPOINT redis-server /etc/redis/redis.conf
    
    關於dockerfile文件的命令參考:Dockerfile命令詳解(超全版本)
  2. 構建鏡像
    	docker build -t zyq/redis:4.0.1 .
    
  3. 創建容器
    	docker run -d -v /home/docker/redis/log:/var/log/redis -v /home/docker/redis/data:/home/redis/data -p 6379:6379 --name redis zyq/redis:4.0.1
    

用Docker搭建一個redis集羣

  1. 創建6個redis配置文件,port依次未 6380 到 6385,然後cluster-enable設置爲yes

  2. 用上面的DockerFile文件構建一個redis-cluser鏡像,DockerFile文件刪除下面內容

    	# 刪掉這些內容
    	ADD redis.conf /etc/redis/redis.conf 
    	EXPOSE 6379	
    	ENTRYPOINT redis-server /etc/redis/redis.conf
    

    然後build鏡像

    	docker build -t zyq/redis-cluster:4.0.1 .
    
  3. 用構建好的redis-cluser鏡像創建6個節點容器

    	docker run -d -v /home/docker/redis/redis-cluster/redis6380.conf:/etc/redis/redis.conf --net=host --name redis-6380 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf
    	docker run -d -v /home/docker/redis/redis-cluster/redis6381.conf:/etc/redis/redis.conf --net=host --name redis-6381 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf
    	docker run -d -v /home/docker/redis/redis-cluster/redis6382.conf:/etc/redis/redis.conf --net=host --name redis-6382 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf
    	docker run -d -v /home/docker/redis/redis-cluster/redis6383.conf:/etc/redis/redis.conf --net=host --name redis-6383 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf
    	docker run -d -v /home/docker/redis/redis-cluster/redis6384.conf:/etc/redis/redis.conf --net=host --name redis-6384 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf
    	docker run -d -v /home/docker/redis/redis-cluster/redis6385.conf:/etc/redis/redis.conf --net=host --name redis-6385 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf
    
  4. 檢查容器創建情況

    	# 查看所有容器信息
    	docker ps -a  
    
  5. 使用redis-trib.rb創建集羣

    	# ip是使用的宿主機的ip
    	./redis-trib.rb create --replicas 1 192.168.195.88:6380 192.168.195.88:6381 192.168.195.88:6382 192.168.195.88:6383 192.168.195.88:6384 192.168.195.88:6385
    

    這裏值得注意的時,如果docker的網絡模式不是用的host,則我們只能使用這個方法:Redis Cluster 4.0 NAT/Docker。 否則我們在docker宿主機上使用集羣是沒問題的,但在其他機器上是會出毛病。如下面這種錯誤

    	192.168.195.88:6385> set a 1
    	(error) MOVED 15495 172.17.0.5:6379
    

    關於docker的網絡模式可參考:Docker的4種網絡模式

  6. 測試

    	C:\Users\zyq>redis-cli -h 192.168.195.88 -p 6385 -c
    	192.168.195.88:6385> set a 1
    	-> Redirected to slot [15495] located at 192.168.195.88:6382
    	OK
    
下面使用Redis Cluster 4.0 NAT/Docker搭建一下
  1. 修改前面6個redis配置的文件,如下:
    	cluster-announce-ip 192.168.195.88  #宣佈的ip,這裏用宿主機的IP地址
    	cluster-announce-port 6380  #宣佈的數據端口,對應當前配置文件的端口,不要每個文件都設置的一樣
    	cluster-announce-bus-port 16380	  #宣佈的集羣總線端口,不要每個文件都設置的一樣,這裏用數據端口+10000
    
    其餘5個配置文件做根據各自端口做相應修改,然後開始build
    	docker build -t zyq/redis-cluster:4.0.1 .
    
  2. 用構建好的redis-cluser鏡像創建6個節點容器
    	docker run -d -p 6380:6380 -p 16380:16380 -v /home/docker/redis/redis-cluster/redis6380.conf:/etc/redis/redis.conf --name redis-6380 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf
    	docker run -d -p 6381:6381 -p 16381:16381 -v /home/docker/redis/redis-cluster/redis6381.conf:/etc/redis/redis.conf --name redis-6381 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf
    	docker run -d -p 6382:6382 -p 16382:16382 -v /home/docker/redis/redis-cluster/redis6382.conf:/etc/redis/redis.conf --name redis-6382 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf
    	docker run -d -p 6383:6383 -p 16383:16383 -v /home/docker/redis/redis-cluster/redis6383.conf:/etc/redis/redis.conf --name redis-6383 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf
    	docker run -d -p 6384:6384 -p 16384:16384 -v /home/docker/redis/redis-cluster/redis6384.conf:/etc/redis/redis.conf --name redis-6384 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf
    	docker run -d -p 6385:6385 -p 16385:16385 -v /home/docker/redis/redis-cluster/redis6385.conf:/etc/redis/redis.conf --name redis-6385 zyq/redis-cluster:4.0.1 redis-server /etc/redis/redis.conf
    
  3. 創建集羣
    	# 查看各個節點容器的ip
    	docker inspect redis-6385 redis-6384 redis-6383 redis-6382 redis-6381 redis-6380 | grep IPA
    
    	# 使用redis-trib.rb創建集羣,ip是使用的容器自身的ip,就是上面查出的那個
    	./redis-trib.rb create --replicas 1 172.17.0.2:6380 172.17.0.3:6381 172.17.0.4:6382 172.17.0.5:6383 172.17.0.6:6384 172.17.0.7:6385
    
    如果創建集羣的時候卡住,可以看一下防火牆是否添加了 6380-6385 和 16380-16385這幾個端口
  4. 測試
    	C:\Users\zyq>redis-cli -h 192.168.195.88 -p 6380 -c
    	192.168.195.88:6380> set a 1
    	-> Redirected to slot [15495] located at 192.168.195.88:6382
    	OK
    

使用docker-compose

Compose是一個用於定義和運行多容器Docker應用程序的工具。有關Compose的詳細內容,請參閱github上的docker Compose源碼

  1. 安裝docker-compose
    	# 下載安裝文件
    	curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    	# 添加執行權限:
    	chmod +x /usr/local/bin/docker-compose
    	# 測試是否安裝成功:
    	docker-compose --version
    
  2. 編寫docker-compose.yml文件:q
    	version: '3'
    	services: 
    		redis0: 
    			container_name: redis-6380
    			image: zyq/redis-cluster:4.0.1
    			ports: 
    			- 6380:6380
    			- 16380:16380
    			volumes: 
    			- /home/docker/redis/redis-cluster/redis6380.conf:/etc/redis/redis.conf
    			command: redis-server /etc/redis/redis.conf
    		redis1: 
    			container_name: redis-6381
    			image: zyq/redis-cluster:4.0.1
    			ports: 
    			- 6381:6381
    			- 16381:16381
    			volumes: 
    			- /home/docker/redis/redis-cluster/redis6381.conf:/etc/redis/redis.conf
    			command: redis-server /etc/redis/redis.conf
    		redis2: 
    			container_name: redis-6382
    			image: zyq/redis-cluster:4.0.1
    			ports: 
    			- 6382:6382
    			- 16382:16382
    			volumes: 
    			- /home/docker/redis/redis-cluster/redis6382.conf:/etc/redis/redis.conf
    			command: redis-server /etc/redis/redis.conf
    		redis3: 
    			container_name: redis-6383
    			image: zyq/redis-cluster:4.0.1
    			ports: 
    			- 6383:6383
    			- 16383:16383
    			volumes: 
    			- /home/docker/redis/redis-cluster/redis6383.conf:/etc/redis/redis.conf
    			command: redis-server /etc/redis/redis.conf
    		redis4: 
    			container_name: redis-6384
    			image: zyq/redis-cluster:4.0.1
    			ports: 
    			- 6384:6384
    			- 16384:16384
    			volumes: 
    			- /home/docker/redis/redis-cluster/redis6384.conf:/etc/redis/redis.conf
    			command: redis-server /etc/redis/redis.conf
    		redis5: 
    			container_name: redis-6385
    			image: zyq/redis-cluster:4.0.1
    			ports: 
    			- 6385:6385
    			- 16385:16385
    			volumes: 
    			- /home/docker/redis/redis-cluster/redis6385.conf:/etc/redis/redis.conf
    			command: redis-server /etc/redis/redis.conf
    
  3. 啓動
    	docker-compose up -d
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章