安裝docker
#檢視版本
uname -r
#Docker 運作在 CentOS 7 上,要求系統為64位、系統核心版本為 3.10 以上。
#Docker 運作在 CentOS-6.5 或更高的版本的 CentOS 上,要求系統為64位、系統核心版本為 2.6.32-431 或者更高版本。
rpm -iUvh http://dl.fedoraproject.org/pub/epel//x86_64/epel-release--noarch.rpm
yum -y install docker-io
service docker start
#yum下載下傳的docker版本可能比較低
#方法1:
vim /usr/bin/yum-config-manager #确定使用的yum是py2版本
yum remove docker-io
參考: https://docs.docker.com/engine/installation/linux/docker-ce/centos/#install-docker-ce-1
systemctl start docker
#方法2
#下載下傳最新的
wget https://download.docker.com/linux/centos//x86_64/stable/Packages/docker-ce-.ce-el7.centos.x86_64.rpm
更新核心步驟
一、安裝elrepo的yum源--http://elrepo.org/tiki/tiki-index.php
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#如果出現問題:curl: (60) SSL certificate problem: unable to get local issuer certificate
#wget http://mirror.centos.org/centos/6/os/x86_64/Packages/ca-certificates-2016.2.10-65.4.el6.noarch.rpm
#rpm2cpio ca-certificates-2016.2.10-65.4.el6.noarch.rpm | cpio -idmv
#cp -pi ./etc/pki/tls/certs/ca-bundle.* /etc/pki/tls/certs/
#yum reinstall ca-certificates
#yum reinstall openssl
#如果還是不行,直接不用rpm安裝
#wget --no-check-certificate https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#rpm --import RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
二、更新核心
#在yum的elrepo源中有ml和lt兩種核心,其中ml(mainline)為最新版本的核心,lt為長期支援的核心。
#如果要安裝ml核心,使用如下指令:
yum --enablerepo=elrepo-kernel -y install kernel-ml
#如果要安裝lt核心,使用如下指令:
yum --enablerepo=elrepo-kernel -y install kernel-lt
三、修改grub.conf檔案
vim /etc/grub.conf
default=
docker相關操作
docker官方安裝
docker search centos
#使用docker運作centos後輸出,會自殺,因為docker認為沒什麼事情可以做了
docker pull centos /bin/echo "Hello world"
#docker build -t csphere/centos:7.1 .
#背景運作docker
docker run -dit centos
#檢視容器清單
docker ps
docker ps -a
#進入容器
docker attach fc0f0582d9 # 使用了exit指令,容器就會退出背景運作
docker exec -it fc0f0582d9 /bin/sh #不會退出
#在主控端器檢視docker的cpu 記憶體使用狀态
docker stats fc0f0582d9
建構一個容器
參考
vim Dockerfile
# 将官方 Python 運作時用作父鏡像
FROM python:-slim
# 将工作目錄設定為 /app。指定RUN、CMD與ENTRYPOINT指令的工作目錄
WORKDIR /app
# 将目前目錄内容複制到位于 /app 中的容器中。複制檔案指令。它有兩個參數<source>和<destination>。destination是容器内的路徑。source可以是URL或者是啟動配置上下文中的一個檔案
ADD . /app
# 安裝 requirements.txt 中指定的任何所需軟體包。在shell或者exec的環境下執行的指令
RUN pip install -r requirements.txt
# 使端口 80 可供此容器外的環境使用
EXPOSE
# 定義環境變量
ENV NAME World
# 在容器啟動時運作 app.py。提供了容器預設的執行指令。 Dockerfile隻允許使用一次CMD指令。 使用多個CMD會抵消之前所有的指令,隻有最後一個指令生效。
CMD ["python", "app.py"]
Flask
Redis
from flask import Flask
from redis import Redis, RedisError
import os
import socket
# Connect to Redis
redis = Redis(host="redis", db=, socket_connect_timeout=, socket_timeout=)
app = Flask(__name__)
@app.route("/")
def hello():
try:
visits = redis.incr("counter")
except RedisError:
visits = "<i>cannot connect to Redis, counter disabled</i>"
html = "<h3>Hello {name}!</h3>" \
"<b>Hostname:</b> {hostname}<br/>" \
"<b>Visits:</b> {visits}"
return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=)
docker build -t friendlyhello .
#檢視建構的鏡像
docker images
#運作建構的鏡像(将本機的4000映射到docker的80端口)
docker run -p : friendlyhello
curl http://localhost:4000
輸出:
#登入 jhcoder 19901108 [email protected]
docker login
#标記
docker tag friendlyhello jhcoder/get-started:part1
docker images
#REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
#friendlyhello latest bb72871e4fe5 14 hours ago 149.1 MB
#jhcoder/get-started part1 bb72871e4fe5 14 hours ago 149.1 MB
#push上去倉庫
docker push jhcoder/get-started:part1
#可以在任何地方運作這個鏡像
docker run -p : jhcoder/get-started:part1
#檢視日志
docker logs -f sentry_redis_6301
訓示容器的行為(yml)
vim docker-compose.yml
#####檔案注意空格 ## mapping values are not allowed in this context
version: "3"
services:
web:
# 将 username/repo:tag 替換為您的名稱和鏡像詳細資訊
image: jhcoder/get-started:part1
deploy:
replicas:
resources:
limits:
cpus: "0.1"
memory: M
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
- webnet
networks:
webnet:
- 從鏡像庫中拉取我們在步驟 2 中上傳的鏡像。
- 将該鏡像的五個執行個體作為服務 web 運作,并将每個執行個體限制為最多使用 10% 的 CPU(在所有核心中)以及 50MB RAM。
- 如果某個容器發生故障,立即重新開機容器。
- 将主機上的端口 80 映射到 web 的端口 80。
- 訓示 web 容器通過負載均衡的網絡 webnet 共享端口 80。(在内部,容器自身将在臨時端口釋出到 web 的端口 80。)
- 使用預設設定定義 webnet 網絡(此為負載均衡的 overlay 網絡)。
docker swarm init
#部署
docker stack deploy -c docker-compose.yml getstartedlab
#檢視
docker stack ps getstartedlab
#删除
docker stack rm getstartedlab
建構Redis
docker pull hub.c.com/library/redis:latest
docker run --name redis- -p : -d hub.c.com/library/redis
docker ps
使用redis建構哨兵叢集
- 生成6份配置
vim redis-6301.conf
vim redis-6302.conf
vim redis-6303.conf
vim sentry-16301.conf
vim sentry-16302.conf
vim sentry-16303.conf
// redis-conf
daemonize yes
pidfile /var/run/redis-pid
port
requirepass jhcoder
// sentry-16301.conf
port
dir /data
sentinel monitor mymaster
sentinel down-after-milliseconds mymaster
sentinel failover-timeout mymaster
sentinel parallel-syncs mymaster
sentinel auth-pass mymaster jhcoder
// redis-6302.conf
daemonize yes
pidfile /var/run/redis-pid
port
requirepass jhcoder
slaveof
masterauth jhcoder
// sentry-16302.conf
port
dir /data
sentinel monitor mymaster
sentinel down-after-milliseconds mymaster
sentinel failover-timeout mymaster
sentinel parallel-syncs mymaster
sentinel auth-pass mymaster jhcoder
// redis-6303.conf
daemonize yes
pidfile /var/run/redis-pid
port
requirepass jhcoder
slaveof
masterauth jhcoder
### sentry-16303.conf ###
port
dir /data
sentinel monitor mymaster
sentinel down-after-milliseconds mymaster
sentinel failover-timeout mymaster
sentinel parallel-syncs mymaster
sentinel auth-pass mymaster jhcoder
使用shell腳本生成配置檔案
#!/bin/sh
redis6301="
daemonize yes \n
pidfile /var/run/redis-6301.pid \n
port 6301 \n
requirepass jhcoder \n"
sentry16301="
port 16301 \n
dir /data \n
sentinel monitor mymaster 192.168.1.10 6301 2 \n
sentinel down-after-milliseconds mymaster 30000 \n
sentinel failover-timeout mymaster 60000 \n
sentinel parallel-syncs mymaster 1 \n
sentinel auth-pass mymaster jhcoder \n
sentinel announce-ip 192.168.1.10 \n
sentinel announce-port 16301"
redis6302="
daemonize yes \n
pidfile /var/run/redis-6302.pid \n
port 6302 \n
requirepass jhcoder \n
slaveof 192.168.1.10 6301 \n
slave-announce-ip 192.168.1.10 \n
slave-announce-port 6302 \n
masterauth jhcoder \n"
sentry16302="
port 16302 \n
dir /data \n
sentinel monitor mymaster 192.168.1.10 6301 2 \n
sentinel down-after-milliseconds mymaster 30000 \n
sentinel failover-timeout mymaster 60000 \n
sentinel parallel-syncs mymaster 1 \n
sentinel auth-pass mymaster jhcoder \n
sentinel announce-ip 192.168.1.10 \n
sentinel announce-port 16302"
redis6303="
daemonize yes \n
pidfile /var/run/redis-6303.pid \n
port 6303 \n
requirepass jhcoder \n
slaveof 192.168.1.10 6301 \n
slave-announce-ip 192.168.1.10 \n
slave-announce-port 6303 \n
masterauth jhcoder \n"
sentry16303="
port 16303 \n
dir /data \n
sentinel monitor mymaster 192.168.1.10 6301 2 \n
sentinel down-after-milliseconds mymaster 30000 \n
sentinel failover-timeout mymaster 60000 \n
sentinel parallel-syncs mymaster 1 \n
sentinel auth-pass mymaster jhcoder \n
sentinel announce-ip 192.168.1.10 \n
sentinel announce-port 16303"
echo -e ${redis6301} > ../config.d/redis-6301.conf
echo -e ${redis6302} > ../config.d/redis-6302.conf
echo -e ${redis6303} > ../config.d/redis-6303.conf
echo -e ${sentry16301} > ../config.d/sentry-16301.conf
echo -e ${sentry16302} > ../config.d/sentry-16302.conf
echo -e ${sentry16303} > ../config.d/sentry-16303.conf
這裡的配置相比之前改的都是ip的配置
、docker宿主現在使用host模式。
、配置貌似不識别域名!!!!!!!!!!!
、從機标明主機的通訊ip和port,這個配置會自動生成在配置檔案中,最後redisson使用這個ip和port,是以需要注意
slave-announce-ip 宿主ip \n
slave-announce-port \n
- 最終成功指令
docker run -d -ti \
-p : -p : \
-v /data/docker-redis/sentry/config.d/redis-.conf:/etc/redis/redis-.conf \
-v /data/docker-redis/sentry/config.d/sentry-.conf:/etc/redis/sentry-.conf \
-v /data/docker-redis/sentry/data/:/data \
-m m \
--cpuset-cpus="0" \
--network="host" \
--dns="223.5.5.5" \
--name sentry_redis_6301 \
--sysctl net.core.somaxconn= \
hub.c.163.com/library/redis \
/bin/sh -c \
'redis-server /etc/redis/redis-6301.conf && redis-sentinel /etc/redis/sentry-16301.conf'
docker run -d -ti \
-p : -p : \
-v /data/docker-redis/sentry/config.d/redis-.conf:/etc/redis/redis-.conf \
-v /data/docker-redis/sentry/config.d/sentry-.conf:/etc/redis/sentry-.conf \
-v /data/docker-redis/sentry/data/:/data \
-m m \
--cpuset-cpus="1" \
--network="host" \
--dns="223.5.5.5" \
--name sentry_redis_6302 \
--sysctl net.core.somaxconn= \
hub.c.163.com/library/redis \
/bin/sh -c \
'redis-server /etc/redis/redis-6302.conf && redis-sentinel /etc/redis/sentry-16302.conf'
docker run -d -ti \
-p : -p : \
-v /data/docker-redis/sentry/config.d/redis-.conf:/etc/redis/redis-.conf \
-v /data/docker-redis/sentry/config.d/sentry-.conf:/etc/redis/sentry-.conf \
-v /data/docker-redis/sentry/data/:/data \
-m m \
--cpuset-cpus="2" \
--network="host" \
--name sentry_redis_6303 \
--sysctl net.core.somaxconn= \
hub.c.163.com/library/redis \
/bin/sh -c \
'redis-server /etc/redis/redis-6303.conf && redis-sentinel /etc/redis/sentry-16303.conf'
- 測試
redis-cli -p -a jhcoder
#在主機進行hset, 在從機進行hget
#啟動日志檢視
docker logs -f sentry_redis_6302
#進入主機 docker ps
docker exec -ti b4ee02d90d18 /bin/sh
# kill 主機redis-server
ps -ef | grep redis
kill - xxx
#檢視日志輸出
#進入哨兵用戶端
redis-cli -p -a jhcoder
redis-cli -p -a jhcoder
#檢視
SENTINEL masters
#java用戶端可以通過自己寫指令支援哨兵
以上的做法通過用戶端是可以連接配接上的, 但是通過redisson連接配接不上,因為redisson需要連接配接哨兵的6302,但是這裡提供的是内網的ip,外網不能直接通路到,是以嘗試吧哨兵放在主控端器上運作。
docker run -d -ti \
-p : \
-v /data/docker-redis/sentry/config.d/redis-.conf:/etc/redis/redis-.conf \
-v /data/docker-redis/sentry/data/:/data \
-m m \
--cpuset-cpus="0" \
--name sentry_redis_6301 \
--sysctl net.core.somaxconn= \
hub.c.163.com/library/redis \
/bin/sh -c \
'redis-server /etc/redis/redis-6301.conf'
docker run -d -ti \
-p : \
-v /data/docker-redis/sentry/config.d/redis-.conf:/etc/redis/redis-.conf \
-v /data/docker-redis/sentry/data/:/data \
-m m \
--cpuset-cpus="1" \
--name sentry_redis_6302 \
--sysctl net.core.somaxconn= \
hub.c.163.com/library/redis \
/bin/sh -c \
'redis-server /etc/redis/redis-6302.conf'
docker run -d -ti \
-p : \
-v /data/docker-redis/sentry/config.d/redis-.conf:/etc/redis/redis-.conf \
-v /data/docker-redis/sentry/data/:/data \
-m m \
--cpuset-cpus="2" \
--name sentry_redis_6303 \
--sysctl net.core.somaxconn= \
hub.c.163.com/library/redis \
/bin/sh -c \
'redis-server /etc/redis/redis-6303.conf'
搭建redis官方叢集
- 生成6份配置檔案名
vim /data/docker-redis/official/config.d/redis-6401.conf ……
port #
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout
appendonly yes
docker run -d -ti \
-p : -p : \
-v /data/docker-redis/official/config.d/redis-conf:/etc/redis/redis-conf \
-v /data/docker-redis/official/data/:/data \
--name official_redis_6401 \
--sysctl net.core.somaxconn= \
hub.c.com/library/redis \
/bin/sh -c \
'redis-server /etc/redis/redis-6401.conf'
docker run -d -ti \
-p : -p : \
-v /data/docker-redis/official/config.d/redis-conf:/etc/redis/redis-conf \
-v /data/docker-redis/official/data/:/data \
--name official_redis_6402 \
--sysctl net.core.somaxconn= \
hub.c.com/library/redis \
/bin/sh -c \
'redis-server /etc/redis/redis-6402.conf'
docker run -d -ti \
-p : -p : \
-v /data/docker-redis/official/config.d/redis-conf:/etc/redis/redis-conf \
-v /data/docker-redis/official/data/:/data \
--name official_redis_6403 \
--sysctl net.core.somaxconn= \
hub.c.com/library/redis \
/bin/sh -c \
'redis-server /etc/redis/redis-6403.conf'
docker run -d -ti \
-p : -p : \
-v /data/docker-redis/official/config.d/redis-conf:/etc/redis/redis-conf \
-v /data/docker-redis/official/data/:/data \
--name official_redis_6404 \
--sysctl net.core.somaxconn= \
hub.c.com/library/redis \
/bin/sh -c \
'redis-server /etc/redis/redis-6404.conf'
docker run -d -ti \
-p : -p : \
-v /data/docker-redis/official/config.d/redis-conf:/etc/redis/redis-conf \
-v /data/docker-redis/official/data/:/data \
--name official_redis_6405 \
--sysctl net.core.somaxconn= \
hub.c.com/library/redis \
/bin/sh -c \
'redis-server /etc/redis/redis-6405.conf'
docker run -d -ti \
-p : -p : \
-v /data/docker-redis/official/config.d/redis-conf:/etc/redis/redis-conf \
-v /data/docker-redis/official/data/:/data \
--name official_redis_6406 \
--sysctl net.core.somaxconn= \
hub.c.com/library/redis \
/bin/sh -c \
'redis-server /etc/redis/redis-6406.conf'
安裝ruby
ruby下載下傳位址
ruby安裝教程
使用rvm形式安裝
//安裝大于.的ruby,然後安裝redis子產品
gem install redis
// !!!!! 不要用.,這裡使用的是主控端器的ip
//這裡的目的是使用redis官方自帶的ruby工具建構起叢集間的通訊
./redis-trib.rb create --replicas .: .: \
.: .: .: .: