docker pull hello-world #不能推送,要把名字改一下php
私有倉庫搭建:node
剛開始 : 報錯: server gave http response to https client #只支持https的格式,不支持http的,要改一下http的 python
改一下 :mysql
vim /etc/docker/daemon.json 2.寫入以下信息,地址改爲你本身的ip {"registry-mirrors": ["http://f1361db2.m.daocloud.io"], "insecure-registries":["192.168.16.142:5000"] }
正確:linux
[root@liu ~]# docker push 192.168.230.132:5000/s20-hello-world
The push refers to a repository [192.168.230.132:5000/s20-hello-world]
af0b15c8625b: Pushed
latest: digest: sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a size: 524git
linux第八天筆記
學習python的第86天github
1 併發問題 2 數據另太大 新浪微博 這麼大的數據 ,去哪買內存條, 思想: 數據分片存儲在多個redis中 集羣: twitter 開源 codis 豌豆莢 開發c 和 go開發 很差的: 一臺機器,超載了 正確的是 分佈式,加機器,分攤集中式壓力,一堆機器作一件事(計算機是跟生活中的東西很是類似的),分了馬鞍,馬背上 按key分片,實例化多個馬 節點取餘分類 虛擬槽分區(官方)
redis-cluster集羣搭建
1.環境準備,6個redis數據庫節點web
也就是準備6個配置文件,6匹馬
redis-7000.conf
redis-7001.conf
redis-7002.conf
redis-7003.conf
redis-7004.conf
redis-7005.conf
#每一個配置文件的內容,僅僅是端口的不一樣7000~7005
#內容以下面試
port 7000
daemonize yes
dir "/opt/redis/data/7000"
logfile "7000.log"
dbfilename "dump-7000.rdb"
cluster-enabled yes #開啓集羣模式
cluster-config-file nodes-7000.conf #集羣內部的配置文件
cluster-require-full-coverage no
#redis cluster須要16384個slot都正常的時候才能對外提供服務,換句話說,只要任何一個slot異常那麼整個cluster不對外提供服務。 所以生產環境通常爲noredis
2.快速生成6個節點的配置文件
mkdir -p /opt/redis/data/{7000,7001,7002,7003,7004,7005}
sed "s/7000/7001/g" redis-7000.conf > redis-7001.conf
.....
3.啓動6個redis節點(準備好了6匹馬)
redis-server redis-7000.conf
.....
4.馬兒準備好了,分配槽位,開始放入數據,查看數據流向
開啓redis-cluster的集羣功能,以及分配redis的slot槽位,基於ruby語言的腳本工具自動分配
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
2.解壓縮ruby的源碼包
tar -zxvf ruby-2.3.1.tar.gz
3.進入ruby的源碼包目錄,編譯三部曲
cd ruby-2.3.1
./configure --prefix=/opt/ruby231
make && make install
3.配置ruby的環境變量
vim /etc/profile
寫入PATH=""
4.讀取這個/etc/profile
source /etc/profile
5.下載ruby操做redis的模塊
wget http://rubygems.org/downloads/redis-3.3.0.gem
#安裝ruby操做redis的模塊
gem install -l redis-3.3.0.gem (ruby 解釋器 gem 相似於pip 包管理工具)
6.一鍵分配redis集羣的槽位
#查找一下這個命令的絕對路徑
find / -name redis-trib.rb
#這個數字 1 表明,每一個redis主庫,只有一個redis從庫
/opt/redis-4.0.10/src/redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 #(若是懼怕主從都掛了的話就把那個1 設置爲多個從)
7.開啓了集羣狀態功能後,登陸數據庫,查看數據寫入流向
/opt/redis-4.0.10/src/redis-trib.rb add-node --slave 127.0.0.1:7003 127.0.0.1:7000
8.防止redis-cluster主節點故障,能夠搭配 redis-cluster + redis-sentinel ,用哨兵檢測主節點狀態,當主節點宕機,自動切換從節點爲新的主庫
1.redis-sentinel配置方式以下,檢測三個主節點7000 7001 7002 port 27379 dir "/var/redis/data" logfile "26379.log" sentinel monitor master1 127.0.0.1 7000 2 sentinel monitor master2 127.0.0.1 7001 2 sentinel monitor master3 127.0.0.1 7002 2 sentinel down-after-milliseconds master1 30000 sentinel down-after-milliseconds master2 30000 sentinel down-after-milliseconds master3 30000 sentinel parallel-syncs master1 1 sentinel parallel-syncs master2 1 sentinel parallel-syncs master3 1 sentinel failover-timeout master1 180000 sentinel failover-timeout master2 180000 sentinel failover-timeout master3 180000 2.啓動哨兵,檢測cluster的主節點 redis-sentinel redis-26379.conf 3.殺死redis-cluster的主節點,查看從節點狀態(是否自動重啓),能夠運行多個從節點,保證數據安全
redis-cli -p 7000 cluster info
redis-cli -p 7000 cluster nodes #等同於查看nodes-7000.conf文件節點信息 (主僕關係 查看一組的全部的狀態)
在進入redis-cli
輸入:ping
回覆:pong --->鏈接成功(不是在外面(是ping baidu.com))
CLUSTERDOWN Hash slot not served
未提供clusterdown哈希槽
當給redis-cli -c -p 7005 get name時,出現的錯誤,發現當redis-cli -p 7005 cluster nodes 時,只有一個 7005master的信息(0 connected),沒有別的,並且,查看別的服務器信息時,發現有一個salve fail(未鏈接)
當沒給他寫值卻讀取值是就顯示這個錯誤
/opt/redis-4.0.10/src/redis-trib.rb fix 127.0.0.1:7005 執行這條命令以後即可以get 數據,說明給了哈希槽了,可是仍是沒有鏈接 到大部隊
error
操做不知哪兒出錯了 master.fail (not connected) 把dphp.rdb 存放數據的刪除了,可是仍是不行
老師讓: 從新定義了端口,把六個端口都改了才能夠的
cat /etc/os-release #查看當前版本
docker rmi fce
Error response from daemon: conflict: unable to delete fce289e99eb9 (must be forced) - image is being used by stopped container 812abef0cef8 有依賴關係 : docker rm 812
(一層層刪除)
建立容器的時候報錯WARNING: IPv4 forwarding is disabled. Networking will not work. # docker run -it -p 30001:22 --name=centos-ssh centos /bin/bash WARNING: IPv4 forwarding is disabled. Networking will not work. 解決辦法: # vim /usr/lib/sysctl.d/00-system.conf 添加以下代碼: net.ipv4.ip_forward=1 重啓network服務 # systemctl restart network 查看是否開啓了 [root@liu ~]# sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1 ## 完成之後,刪除錯誤的容器,再次建立新容器,就再也不報錯了。 # 做者:Locutus 來源:CSDN 原文:https://blog.csdn.net/yjk13703623757/article/details/68939183 版權聲明:本文爲博主原創文章,轉載請附上博文連接!
/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:235: starting container process caused "exec: "python.app.py": executable file not found in $PATH".
docker run -d -P training/webapp python.app.py
docker run -d -P training/webapp python app.py
多寫了個一個點
會變得啊 [root@liu ~]# docker port 85f 5000/tcp -> 0.0.0.0:32769 [root@liu ~]# docker stop 85f 85f [root@liu ~]# docker start 85f 85f [root@liu ~]# docker port 85f 5000/tcp -> 0.0.0.0:32770
執行 flask的程序 時,有文件的
root@85f2e9063034:/opt/webapp# ls Procfile app.py requirements.txt tests.py
vmare虛擬化內存倆個g, 數值是技術手段實現的假的
docker :也是經過虛擬化搭建的假的,輕量級的虛擬化
docker 和虛擬機對比
ali 多少萬 不少 jidong 15萬個docker業務所有實例化
:開源 由go寫的 ,因此 go爲何火 還有區塊鏈
python 以前16 shi openstack 如今ai tensflow
: 對linux的封裝 ,
: 簡單開發
以前部署 :
app <---> os <---> 物理 虛擬化 hypervisor appliaca(centos) : 虛擬機是完整的操做系統 ,要分配系統資源,卡 一棟樓一戶人家 一個樓房一戶人家 膠囊房 物理機 虛擬機 容器
容器是吧這個進程命令,文件放到一個docker鏡像中取運行至關於在python3 manage.py runserver 這個鏡像上,批了一個馬甲
每臺計算機的環境不一樣,如何換一臺機器能運行起來呢?
把配置完整的複製過去 到另外一個
管理 - 克隆
笑話 : 開發和測試 開發和運維(環境問題)
自從用上docker容器後,能夠實現開發、測試和生產環境的統一化和標準化
iso 刻錄 ,用此安裝好,全部的是同樣的
鏡像image # 至關於類,老闆的光盤
容器container
倉庫repository #存放鏡像文件的,公共的倉庫 dockerhub.com github.com
docker整個生命週期就是這三個概念
基於老闆賣的dvd光盤,安裝操做系統
基於鏡像,運行容器實例
鏡像 理解爲python的class
容器 理解爲python的類的實例化
容器也是能夠自定義更改,在生成新的 鏡像文件的
class foo():
def __init__(self): self.name ='他大舅。。。'
f1 = foo()
敲門的禮儀,技術水平,都要,合做夥伴,
技術好,人又謙虛,不太狂(也不要,相處共事由於)
阿里源 可能版本低
不走進去,出不來,出錯隨時(之前的缺點弱點),可是不要沉溺墮落。知來者只可追、
ce 社區版
ee 企業版
安裝方式
1.選擇官方的docker yum源,網速太慢
2.因爲網速問題,選擇阿里雲的docker軟件
yum install docker -y
3.啓動docker
systemctl start docker
4.檢查docker運行狀態,以及版本信息
docker version
5.配置docker加速器
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
這個命令是修改/etc/docker/daemon.json文件,寫入一個json數據以下
[root@s20 ~]# cat /etc/docker/daemon.json
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}
配置好了docker加速器,下載鏡像就快不少了
6.下載centos的docker鏡像
docker pull centos #是取dockerhub 下載cnetos鏡像的
7.學習管理容器,鏡像,倉庫的增刪改查
容器
docker run 鏡像名/鏡像id #運行處容器進程實例
docker ps #查看正在運行的容器進程
docker ps -a #顯示全部運行過的容器進程(正在運行的,以及掛掉的容器進程)
docker container ls -a #同上,舊的命令
docker容器中必須有進程在後臺運行,不然容器掛掉!!!
docker鏡像每次運行 都會生成新的容器id記錄
docker run hello-world 運行三次,出現三次容器新的記錄
docker run hello-world
docker run hello-world
docker run -it ubuntu /bin/bash #參數解釋 -i 交互式的命令操做 -t 開啓一個終端界面 /bin/bash 指定linux的解釋器 (這頁面)
docker run -it centos /bin/bash
docker rm 容器id #刪除容器id記錄,只能刪除掛掉的容器
docker rm docker ps -aq
#批量刪除掛掉的容器記錄
docker run -d centos /bin/sh -c "while true;do echo '佳增你真棒'; sleep 1;done"
-d 就是daemonize 後臺運行的意思
centos 指定哪一個鏡像
/bin/sh 指定linux的解釋器
-c 指定一段shell代碼
"while true;do echo '佳增你真棒'; sleep 1;done" 每秒打印一個
docker exec -it 運行着的容器id /bin/bash
docker logs 容器id
docker logs -f 容器id #檢測容器內的日誌
dockerfile 的學習
docker ps 查看容器id
shell默認的解釋器
/bin/bash
/bin/sh
1.獲取一個centos基礎鏡像,運行處容器後
docker run -it centos /bin/bash
2.進入容器空間內,默認沒有python3 和其餘軟件
進入以後,安裝一個vim
yum install vim -y
3.自定義軟件後,退出容器,提交這個容器,成爲一個新的鏡像 exit退出容器
docker
4.此時這個鏡像文件,能夠發送給其餘同事了
docker commit 容器id 新的鏡像的名字
docker commit 5c2 s20/centos-vim
5.查看提交的鏡像文件
docker images
6.導出這個鏡像文件,指定導出的文件名和後綴
docker save 鏡像名/id > /opt/s20-centos-vim.tar.gz
7.在本地測試導入這個鏡像
能夠測試在本地,先刪除本來的鏡像
導入命令
docker load < /opt/s20-centos-vim.tar.gz
8.給導入的鏡像,修改tag別名
docker tag 舊的鏡像名 以dockerhub倉庫id開頭的/新的鏡像名
docker tag 621 liuyang/s20-centos-vim
9.執行這個docker鏡像,運行處容器後,查看是否攜帶了vim
關鍵字 關鍵字 參數 鏡像名 你要執行的命令
docker run -it liuyang/s20-centos-vim /bin/bash
docker search centos #去docker hub 搜索有關centos的鏡像文件
docker pull centos #下載docker鏡像 centos
docker pull hello-world #獲取一個hello-world鏡像
docker images #查看本地有哪些docker鏡像
docker image ls #命令同上
docker rmi 鏡像id或者鏡像名 #刪除本地docker鏡像
docker rmi -f 鏡像id #強制刪除鏡像文件
docker pull ubuntu #獲取一個ubuntu鏡像
1.獲取一個python的flask的鏡像
#docker run的特色是,若是鏡像不存在,會自動的先去docker pull
docker run -d -P training/webapp python app.py
-d 後臺運行
-P 端口映射,隨機映射
training/webapp 鏡像名
python app.py 你要執行的命令
(沒有自動會去pull)
docker port 容器id
docker start 容器id
docker stop 容器id
這個文件就是定製docker鏡像的一個腳本而已,學習裏面的功能性的參數
1.去docker倉庫獲取的方式,一個是公網倉庫,一個是私有倉庫
docker pull
2.獲取別人發來的鏡像,也就是自定義的鏡像
3.經過dockerfile構建docker鏡像
FROM scratch #製做base image 基礎鏡像,儘可能使用官方的image做爲base image
FROM centos #使用base image
FROM ubuntu:14.04 #帶有tag的base image
LABEL version=「1.0」 #容器元信息,幫助信息,Metadata,相似於代碼註釋
LABEL maintainer=「yc_uuu@163.com"
RUN yum update && yum install -y vim Python-dev #反斜線換行
RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME」
WORKDIR /root #至關於linux的cd命令,改變目錄,儘可能使用絕對路徑!!!不要用RUN cd
WORKDIR /test #若是沒有就自動建立
WORKDIR demo #再進入demo文件夾
RUN pwd #打印結果應該是/test/demo
ADD and COPY
ADD 本地的資料 容器內的存放路徑
ADD hello.txt / #把本地文件添加到鏡像中,吧本地的hello可執行文件拷貝到鏡像的/目錄
ADD test.tar.gz / #添加到根目錄並解壓,自動的解壓test.tar.gz 解壓爲test
# 再寫RUN tar -zvcf ... 會報錯(不知道 )
WORKDIR /root
ADD hello test/ #進入/root/ 添加hello可執行命令到test目錄下,也就是/root/test/hello 一個絕對路徑
COPY hello test/ #等同於上述ADD效果
ADD與COPY
-ADD除了COPY功能還有解壓功能
添加遠程文件/目錄使用curl或wget
ENV #環境變量,儘量使用ENV增長可維護性
ENV MYSQL_VERSION 5.8 #設置一個mysql常量
RUN yum install -y mysql-server=「${MYSQL_VERSION}」
RUN yum install -y mysql-server=「${MYSQL_VERSION}」
RUN yum install -y mysql-server=「${MYSQL_VERSION}」
RUN yum install -y mysql-server=「${MYSQL_VERSION}」
RUN yum install -y mysql-server=「${MYSQL_VERSION}」
配置方法:
1.準備一個flask代碼文件
touch s20flask.py
vim s20flask.py
from flask import Flask
app=Flask(name)
@app.route('/')
def hello():
return "20期學的都很棒,很厲害"
if name=="main":
app.run(host='0.0.0.0',port=8080)
2.準備Dockerfile,寫入以下內容
FROM centos
COPY CentOS-Base.repo /etc/yum.repos.d/
COPY epel.repo /etc/yum.repos.d/
RUN yum clean all
RUN yum install python-setuptools -y
RUN easy_install -i https://pypi.tuna.tsinghua.edu.cn/simple flask
COPY s20flask.py /opt/
WORKDIR /opt
EXPOSE 8080 #暴露容器內的8080端口
CMD ["python","s20flask.py"] #讓容器執行以下命令
copy 把本地的文件copy到容器空間內
拷貝一份文件到本文件夾 [root@liu s20docker]# cp /etc/yum.repos.d/CentOS-Base.repo . [root@liu s20docker]# cp /etc/yum.repos.d/epel.repo .
有的 公司有python3 有的可能python2
3.準備好齊全的文件,開始構建docker鏡像
[root@s20 s20docker]# ls
CentOS-Base.repo Dockerfile epel.repo s20flask.py
4.構建docker鏡像的命令,這個命令得在Dockerfile的目錄下執行
docker build .
5.構建鏡像完成以後,查看鏡像文件
docker images
docker tag 6f0 s20-flask-docker
6.運行這個鏡像,
docker run -d -p 7777:8080 6f0
沒有easy_install
[root@liu s20docker]# docker run -it centos [root@668cbafcdde2 /]# easy_install bash: easy_install: command not found
配置python的包管理,安裝flask
easy_install -i https://pypi.tuna.tsinghua.edu.cn/simple flask
1.docker提供了一個相似於github的倉庫dockerhub,
網址https://hub.docker.com/須要註冊使用
2.註冊docker id後,在linux中登陸dockerhub
docker login #輸入你的帳號密碼 就能夠成功登陸
注意要保證image的tag是帳戶名,若是鏡像名字不對,須要改一下tag
docker tag 你的dockerhub帳號名/你的docker鏡像名 本地的鏡像id或名
語法是: docker tag 倉庫名 yuchao163/倉庫名
3.推送docker image到dockerhub
docker push yuchao163/centps-cmd-exec:latest
4.在dockerhub中檢查鏡像
https://hub.docker.com/
5.刪除本地鏡像,測試下載pull 鏡像文件
docker pull yuchao163/centos-entrypoint-exec
定製docker鏡像的一個腳本而已
好比說:docker 一個centos 沒有python 自定義就能夠寫進去了
配置方式
1.下載一個registry 私有倉庫鏡像
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
這個 \ 是換行符的意思 -v 是數據文件夾掛載 ,宿主機的數據文件夾:容器內的文件夾
5000 訪問什麼都沒有,可是沒有拒絕 # 不支持http方式的傳送
2.能夠查看私有倉庫的api數據地址,以下
http://192.168.230.132:5000/v2/_catalog(個人ip)
3.可是此時的私有倉庫還無法使用,它不支持http方式的推送,修改默認的配置文件便可(好像是這個錯誤:ERRO[0000] error getting events from daemon: net/http: request canceled )
1.編輯docker的配置文件
vim /etc/docker/daemon.json
2.寫入以下信息,地址改爲你本身的ip
{"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"insecure-registries":["192.168.16.142:5000"]
}
3.修改docker的配置文件
vim /lib/systemd/system/docker.service
第二步:添加以下配置,在[Service]的代碼區域塊中,添加以下參數
[Service]
EnvironmentFile=-/etc/docker/daemon.json
4.從新加載這個文件 systemctl daemon-reload 5.重啓整個docker服務 systemctl restart docker 6.從新啓動一個私有倉庫 docker run --privileged=true -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry 參數解釋: --privileged=true docker容器的安全機制:設置特權級運行的容器 7.推送本地的鏡像,到私有倉庫中去 docker push 192.168.230.132:5000/s20-hello-world
8.其餘同事就能夠經過這個私有倉庫的鏡像地址,獲取拉
docker pull 192.168.230.132:5000/s20-hello-world
4.還得修改本地鏡像的名字,以倉庫地址爲開頭
docker tag fce 192.168.230.132:5000/s20-hello-world