震驚 | 只需3分鐘瘩例!極速部署個(gè)人Docker云平臺(tái)

1 Docker Swarm極速部署(5分鐘極速部署)

一矢劲、介紹系統(tǒng)環(huán)境

1)服務(wù)器環(huán)境
節(jié)點(diǎn)名稱(chēng) IP 操作系統(tǒng) 內(nèi)核版本
master 172.16.60.95 CentOs7 4.16.1-1.el7.elrepo.x86_64
node01 172.16.60.96 CentOs7 4.16.1-1.el7.elrepo.x86_64
node0x x.x.x.x CentOs7 4.16.1-1.el7.elrepo.x86_64
node0x x.x.x.x CentOs7 4.16.1-1.el7.elrepo.x86_64
node0x x.x.x.x CentOs7 4.16.1-1.el7.elrepo.x86_64

注意:部署這些編排工具的時(shí)候服務(wù)器數(shù)量不定颁虐,1臺(tái)服務(wù)器也行,所以讀者可以自由增減服務(wù)器卧须。

2)前提條件
  • Docker版本1.18+
  • 集群節(jié)點(diǎn)之間保證TCP 2377另绩、TCP/UDP 7946UDP 4789端口通信

注意Docker版本最好大于1.12儒陨,因?yàn)?code>1.12版本之后Docker Swarm才正式歸入Docker內(nèi)置命令內(nèi),另外笋籽,需要保證各個(gè)節(jié)點(diǎn)之間的可連通性蹦漠,如果是外網(wǎng)集群的話,注意要設(shè)置iptable來(lái)限定某些IP對(duì)于某些端口的可訪問(wèn)性车海。

二笛园、集群部署

1)master節(jié)點(diǎn)創(chuàng)建Swarm集群(要保存初始化后token,因?yàn)樵诠?jié)點(diǎn)加入時(shí)要使用token作為通訊的密鑰)
[root@master ~]# docker swarm init --advertise-addr 172.16.60.95
Swarm initialized: current node (kfi2r4dw6895z5yvhlbyzfck6) is now a manager.
 
To add a worker to this swarm, run the following command:
 
    docker swarm join --token SWMTKN-1-3fzyAz5knfbhw9iqlzxhb6dmzdtr0izno9nr7iqc5wid09uglh8-0mocmawzvm3xge6s37n5a48fw 172.16.60.95:2377
 
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. 

注意:真的是一鍵部署集群J讨ァQ忻!州叠,上面命令執(zhí)行后棵红,該機(jī)器自動(dòng)加入到swarm集群。這個(gè)會(huì)創(chuàng)建一個(gè)集群token咧栗,獲取全球唯一的 token逆甜,作為集群唯一標(biāo)識(shí)。后續(xù)將其他節(jié)點(diǎn)加入集群都會(huì)用到這個(gè)token值致板。 其中交煞,--advertise-addr參數(shù)表示其它swarm中的worker節(jié)點(diǎn)使用此ip地址manager聯(lián)系。命令的輸出包含了其它節(jié)點(diǎn)如何加入集群的命令斟或。

使用docker info或者 docker node ls查看集群中的相關(guān)信息

docker info
 
.......
Swarm: active
 NodeID: kfi2r4dw6895z5yvhlbyzfck6
 Is Manager: true
 ClusterID: y2zgs373cg0y6559t675yexcj
 Managers: 1
 Nodes: 1
 Orchestration:
  Task History Retention Limit: 5
.......
2)添加節(jié)點(diǎn)到swarm集群中

需要在所有節(jié)點(diǎn)執(zhí)行素征,worker節(jié)點(diǎn)只需一條命令就可以加入集群

docker swarm join --token SWMTKN-1-3fzyz5knfbhw9iqlzxhb6dmzdtr0izno9nr7iqc5wid09uglh8-0mocmawzvm3xge6s37n5a48fw 172.16.60.95:2377

master上查看集群節(jié)點(diǎn)的狀態(tài)


到此Swarm集群就創(chuàng)建好了,我們現(xiàn)在有一個(gè)多節(jié)點(diǎn)的Swarm集群萝挤,我們來(lái)測(cè)試一下常用的命令吧~~~

3)docker node 命令
[root@master ~]# docker node --help

Usage:    docker node COMMAND

Manage Swarm nodes

Options:


Commands:
  demote      Demote one or more nodes from manager in the swarm
  inspect     Display detailed information on one or more nodes
  ls          List nodes in the swarm
  promote     Promote one or more nodes to manager in the swarm
  ps          List tasks running on one or more nodes, defaults to current node
  rm          Remove one or more nodes from the swarm
  update      Update a node


# demote
   將管理節(jié)點(diǎn)降級(jí)為普通節(jié)點(diǎn)
# inspect
    查看節(jié)點(diǎn)的詳細(xì)信息
# ls
   列出節(jié)點(diǎn)
# promote
   將普通節(jié)點(diǎn)升級(jí)為管理節(jié)點(diǎn)
# ps
   查看運(yùn)行的任務(wù)
# rm
   從swarm集群中刪除節(jié)點(diǎn)
# update
   改變集群節(jié)點(diǎn)狀態(tài)
[root@master ~]# docker node update --help

Usage:    docker node update [OPTIONS] NODE

Update a node

Options:
      --availability string   Availability of the node ("active"|"pause"|"drain")
      --label-add list        Add or update a node label (key=value)
      --label-rm list         Remove a node label if exists
      --role string           Role of the node ("worker"|"manager")


# 主要使用availability string

# active
    節(jié)點(diǎn)狀態(tài)正常
# pause
    節(jié)點(diǎn)掛起御毅、暫停
# drain
    排除節(jié)點(diǎn),比如將master節(jié)點(diǎn)排除平斩,不分配任務(wù)亚享,只作為管理節(jié)點(diǎn)
    

node update命令

三咽块、在Swarm中部署服務(wù)

集群部署好了绘面,我們接下來(lái)該測(cè)試一下我們的集群基本使用是否正常,下面我們開(kāi)始我們的測(cè)試侈沪。

1)創(chuàng)建Hello服務(wù)揭璃,查看服務(wù)信息
[root@master ~]# docker service create --replicas 1 --name hello busybox
[root@master ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
kosznwn4ombx        hello               replicated          0/1                 busybox:latest

REPLICAS中能看出這個(gè) hello服務(wù)并沒(méi)有啟動(dòng)起來(lái),0/1表示 1計(jì)劃啟動(dòng)的副本數(shù)亭罪,0實(shí)際啟動(dòng)的數(shù)量瘦馍。所以啟動(dòng)失敗 

2)添加參數(shù)

hello服務(wù)busybox只是一個(gè)基礎(chǔ)鏡像,并沒(méi)有一個(gè)持續(xù)運(yùn)行的任務(wù)应役,所以manager會(huì)不斷重啟hello這個(gè)服務(wù)情组,所以有好多shutdown的記錄燥筷。但是我們可以為其添加一個(gè)任務(wù)使其持續(xù)運(yùn)行。
注意:為什么沒(méi)有任務(wù)Docker容器就會(huì)終止呢院崇?這個(gè)問(wèn)題我們之后再回答

[root@master ~]# docker service update --args "ping www.baidu.com" hello
hello
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service converged
 
 
# update:更新?tīng)顟B(tài)
 
# --args:增加參數(shù)

再次查看hello服務(wù)狀態(tài):


過(guò)濾不正常的hello服務(wù)狀態(tài):

[root@master ~]# docker service ps -f "desired-state=running" hello
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
yxyivio4mzlg        hello.1             busybox:latest      master              Running             Running 4 minutes ago 
 
 
# -f "desired-state=running" : 狀態(tài)為runngin的服務(wù)
3)為服務(wù)擴(kuò)容(縮融)scale

剛才設(shè)置的replicas=1肆氓,可以增加副本數(shù)量

[root@master ~]# docker service scale hello=4
 
hello scaled to 4
overall progress: 4 out of 4 tasks
1/4: running  
2/4: running  
3/4: running  
4/4: running  
verify: Service converged
 
 
# scale : 指定服務(wù)的數(shù)量
image
4)工作節(jié)點(diǎn)排除managermanager只作為管理節(jié)點(diǎn)

上圖中manager也運(yùn)行了一個(gè)服務(wù)底瓣,將manager排除在外谢揪,在正式的生產(chǎn)環(huán)境中我們都建議這么做,因?yàn)樵谌萜骶幣女?dāng)中捐凭,區(qū)分WorkerMaster節(jié)點(diǎn)的主要原因是因?yàn)?code>Worker 只負(fù)責(zé)完成任務(wù)拨扶,啟動(dòng)服務(wù),而Master則負(fù)責(zé)任務(wù)的調(diào)配茁肠,一旦Master節(jié)點(diǎn)也運(yùn)行服務(wù)患民,導(dǎo)致Master節(jié)點(diǎn)負(fù)載過(guò)重,則會(huì)使集群發(fā)生崩潰官套,所以工作節(jié)點(diǎn)排除manager是很有必要的酒奶。

[root@manager ~]# docker node update --availability drain manager
 
# node update : 更改節(jié)點(diǎn)狀態(tài)
 
# --availability : 三種狀態(tài)
     
   active: 正常
   pause:掛起
   drain:排除

排除manager后,其上面運(yùn)行的服務(wù)會(huì)轉(zhuǎn)移到其他節(jié)點(diǎn)

image

四奶赔、滾動(dòng)更新服務(wù)

例如升級(jí)服務(wù)的鏡像版本

[root@manager ~]# docker service create \
> --replicas 3 \
> --name redis \
> --update-delay 10s \
> redis:3.0.6
 
 
# 啟動(dòng)3個(gè)副本集的redis
 
# update-delay 10s :每個(gè)容器依次更新惋嚎,間隔10s

滾動(dòng)更新:

docker service update --image redis:3.0.7 redis

更新完成后新版本和歷史記錄都能查看


image

查看配置信息:


image

五、服務(wù)更新和回滾策略

1)設(shè)置策略
[root@manager ~]# docker service create \
--name my-web \
--replicas 10 \
--update-delay 10s \
--update-parallelism 2 \
--update-failure-action continue \
--rollback-parallelism 2 \
--rollback-monitor 20s \
--rollback-max-failure-ratio 0.2 \
nginx:1.12.1
 
 
# --update-parallelism 2  : 每次允許兩個(gè)服務(wù)一起更新
 
#--update-failure-action continue : 更新失敗后的動(dòng)作是繼續(xù)
 
# --rollback-parallelism 2  :  回滾時(shí)允許兩個(gè)一起
 
# --rollback-monitor 20s  :回滾監(jiān)控時(shí)間20s
 
# --rollback-max-failure-ratio 0.2 : 回滾失敗率20%

如果執(zhí)行后查看狀態(tài)不是設(shè)置的站刑,可以在update一下另伍,將服務(wù)狀態(tài)設(shè)置為自己想要的

docker service update --rollback-monitor 20s  my-web
 
docker service update --rollback-max-failure-ratio 0.2 my-web
 
# 有兩個(gè)地方設(shè)置數(shù)值沒(méi)有成功,手動(dòng)設(shè)置

查看狀態(tài):


image
2)服務(wù)更新
[root@manager ~]# docker service update --image nginx:1.13.5 my-web

和上述策略一致绞旅,兩兩更新



更新完成:


3)手動(dòng)回滾(策略是失敗會(huì)回滾摆尝,現(xiàn)在沒(méi)有失敗)

剛才nginx版本已經(jīng)是1.13.5了因悲,現(xiàn)在將其還原到1.12.1

[root@manager ~]# docker service update --rollback my-web

手動(dòng)回滾成功

2 docker swarm集群可視化管理

一堕汞、工具介紹

我們既然搭建好了我們的容器編排集群,那我們總不能日常的時(shí)候也在命令行進(jìn)行操作晃琳,所以我們需要使用到一些可視化的工具讯检,Docker圖形化管理提供了很多工具,有Portainer卫旱、Docker UI人灼、Shipyard等等,本文主要介紹Portainer顾翼。

Portainer是一個(gè)開(kāi)源投放、輕量級(jí)Docker管理用戶界面,基于Docker API适贸,提供狀態(tài)顯示面板灸芳、應(yīng)用模板快速部署涝桅、容器鏡像網(wǎng)絡(luò)數(shù)據(jù)卷的基本操作(包括上傳下載鏡像,創(chuàng)建容器等操作)烙样、事件日志顯示苹支、容器控制臺(tái)操作、Swarm集群和服務(wù)等集中管理和操作误阻、登錄用戶管理和控制等功能债蜜。功能十分全面,基本能滿足中小型單位對(duì)容器管理的全部需求究反。

二寻定、創(chuàng)建容器

1)下載官方鏡像
[root@ linuxidc /]# docker pull portainer/portainer
Using default tag: latest
latest: Pulling from portainer/portainer
d1e017099d17: Pull complete
ba5495c717cb: Pull complete
Digest: sha256:8146a5aae1135a0ccee424488c6867b438be21d1e915903a858d12e8382b817b
Status: Downloaded newer image for portainer/portainer:latest
2)單機(jī)運(yùn)行

如果僅有一個(gè)docker宿主機(jī),則可使用單機(jī)版運(yùn)行精耐,Portainer單機(jī)版運(yùn)行十分簡(jiǎn)單狼速,只需要一條語(yǔ)句即可啟動(dòng)容器,來(lái)管理該機(jī)器上的docker鏡像卦停、容器等數(shù)據(jù)向胡。

創(chuàng)建數(shù)據(jù)卷:

[root@linuxidc ~]# docker volume create portainer_data
portainer_data

注意:很多人會(huì)有疑問(wèn),為什么要?jiǎng)?chuàng)建數(shù)據(jù)卷惊完?這個(gè)我們也在之后進(jìn)行回答僵芹,這里埋下一坑。

運(yùn)行容器:

[root@linuxidc ~]# docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
439cc8a6d44a84f5967534c50d3accc43fbeb578258a52c2683afeb230dd6e04

參數(shù)說(shuō)明:
-d:容器在后臺(tái)運(yùn)行小槐;
-p 9000:9000 :宿主機(jī)9000端口映射容器中的9000端口
-v /var/run/docker.sock:/var/run/docker.sock :把宿主機(jī)的Docker守護(hù)進(jìn)程(Docker daemon)默認(rèn)監(jiān)聽(tīng)的Unix域套接字掛載到容器中拇派;
-v portainer_data:/data :把宿主機(jī)portainer_data數(shù)據(jù)卷掛載到容器/data目錄;

查看容器進(jìn)程:

[root@linuxidc ~]# docker ps -l
CONTAINER ID        IMAGE                COMMAND            CREATED            STATUS              PORTS                    NAMES
439cc8a6d44a        portainer/portainer  "/portainer"        13 seconds ago      Up 13 seconds      0.0.0.0:9000->9000/tcp  amazing_clarke

訪問(wèn)服務(wù):
訪問(wèn)方式:http://IP:9000 凿跳,首次登錄需要注冊(cè)用戶件豌,給用戶admin設(shè)置密碼,如下圖:


單機(jī)版本選擇“Local"控嗜,點(diǎn)擊Connect即可連接到本地docker茧彤,如下圖:

注意:從上圖可以看出,有提示需要掛載本地/var/run/docker.socker與容器內(nèi)的/var/run/docker.socker連接疆栏。因此曾掂,在啟動(dòng)時(shí)必須指定該掛載文件。

3)集群運(yùn)行

更多的情況下承边,我們會(huì)有一個(gè)docker集群遭殉,可能有幾臺(tái)機(jī)器石挂,也可能有幾十臺(tái)機(jī)器博助,因此,進(jìn)行集群管理就十分重要了痹愚,Portainer也支持集群管理富岳,Portainer可以和Swarm一起來(lái)進(jìn)行集群管理操作蛔糯。首先要搭建了一個(gè)Swarm,本文不著重介紹Swarm集群的安裝窖式。

啟動(dòng)集群參考官方文檔:https://portainer.io/install.html

$ docker service create \
--name portainer \
--publish 9000:9000 \
--replicas=1 \
--constraint 'node.role == manager' \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=bind,src=//opt/portainer,dst=/data \
portainer/portainer \
-H unix:///var/run/docker.sock

啟動(dòng)Portainer之后蚁飒,首頁(yè)還是給admin用戶設(shè)置密碼(這里和單機(jī)啟動(dòng)一樣)。


我們進(jìn)入之后可以看到這個(gè)一個(gè)界面萝喘。
image


我們可以看到我們現(xiàn)在的集群的節(jié)點(diǎn)配置情況
image
我們可以看到我們集群中各節(jié)點(diǎn)的容器分布情況

3 Docker Swarm+阿里云鏡像倉(cāng)庫(kù)實(shí)戰(zhàn)

我們現(xiàn)在已經(jīng)做好了集群以及集群的可視化管理淮逻,我們可以將自己的服務(wù)打包到DockerHub倉(cāng)庫(kù)進(jìn)行發(fā)布,但有時(shí)候我們希望有個(gè)自己的私人倉(cāng)庫(kù)阁簸,能夠不對(duì)外暴露的話爬早,怎么辦呢?我們這里介紹一種方式启妹,基于Docker Swarm+阿里云鏡像倉(cāng)庫(kù)的服務(wù)部署方式筛严。

一、自建阿里云鏡像倉(cāng)庫(kù)

根據(jù)鏈接進(jìn)入到鏡像倉(cāng)庫(kù)



新建鏡像倉(cāng)庫(kù)


image

我們選擇從命令行推鏡像

新建好“test”鏡像倉(cāng)庫(kù)饶米,看看具體的倉(cāng)庫(kù)情況


二桨啃、自建鏡像推到遠(yuǎn)程倉(cāng)庫(kù)

我們拉下來(lái)一個(gè)鏡像,記住鏡像的 ID


我們先在本地登錄倉(cāng)庫(kù)檬输,便于之后的操作
image

將本地的鏡像打上TAG照瘾,推到遠(yuǎn)程倉(cāng)庫(kù)

我們切換到遠(yuǎn)程倉(cāng)庫(kù),test鏡像倉(cāng)庫(kù)已經(jīng)有了該鏡像丧慈,說(shuō)明我們推送成功了网杆。

三、Docker Swarm拉取鏡像啟動(dòng)服務(wù)

1)Portainer添加私有庫(kù)
image
2)Portainer拉取遠(yuǎn)程倉(cāng)庫(kù)啟動(dòng)一個(gè)容器

啟動(dòng)容器


測(cè)試容器是否正常運(yùn)行
image
根據(jù)Postman的信息伊滋,服務(wù)正常運(yùn)行碳却,說(shuō)明我們這個(gè)思路是正確的~

4 總結(jié)

單就目前的云市場(chǎng)來(lái)說(shuō),Kubernates已經(jīng)占據(jù)80%的市場(chǎng)份額笑旺,Docker Swarm已逐漸被淘汰昼浦,像阿里云將會(huì)在不久之后終止對(duì)Swarm的云編排的支持。雖然是這樣的請(qǐng)況筒主,但是對(duì)于我們個(gè)人開(kāi)發(fā)者來(lái)說(shuō)关噪,也許我們的服務(wù)器配置很低,但我們又想用云平臺(tái)來(lái)部署自己的服務(wù)乌妙,那我們大可以選擇Docker Swarm使兔,簡(jiǎn)單又不需要極高的配置,還能讓我們嘗試云服務(wù)帶給我們的便捷性藤韵,何樂(lè)而不為呢虐沥?


號(hào)主介紹

前兩年在二線大廠工作,目前在創(chuàng)業(yè)公司搬磚。

接觸方向是爬蟲(chóng)云原生架構(gòu)方面欲险,

豐富的反爬攻克經(jīng)驗(yàn)以及云原生二次開(kāi)發(fā)經(jīng)驗(yàn)镐依。

其他諸如數(shù)據(jù)分析黑客增長(zhǎng)也有所涉獵天试。

做過(guò)百余人的商業(yè)分享以及多次開(kāi)辦培訓(xùn)課程槐壳。

目前也是**CSDN博客專(zhuān)家 **

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市喜每,隨后出現(xiàn)的幾起案子务唐,更是在濱河造成了極大的恐慌,老刑警劉巖带兜,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绍哎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡鞋真,警方通過(guò)查閱死者的電腦和手機(jī)崇堰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)涩咖,“玉大人海诲,你說(shuō)我怎么就攤上這事¢莼ィ” “怎么了特幔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)闸昨。 經(jīng)常有香客問(wèn)我蚯斯,道長(zhǎng),這世上最難降的妖魔是什么饵较? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任拍嵌,我火速辦了婚禮,結(jié)果婚禮上循诉,老公的妹妹穿的比我還像新娘横辆。我一直安慰自己,他們只是感情好茄猫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布狈蚤。 她就那樣靜靜地躺著,像睡著了一般划纽。 火紅的嫁衣襯著肌膚如雪脆侮。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天勇劣,我揣著相機(jī)與錄音靖避,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛筋蓖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播退敦,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼粘咖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了侈百?” 一聲冷哼從身側(cè)響起瓮下,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钝域,沒(méi)想到半個(gè)月后讽坏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡例证,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年路呜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片织咧。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胀葱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笙蒙,到底是詐尸還是另有隱情抵屿,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布捅位,位于F島的核電站轧葛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏艇搀。R本人自食惡果不足惜尿扯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望焰雕。 院中可真熱鬧姜胖,春花似錦、人聲如沸淀散。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)档插。三九已至慢蜓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間郭膛,已是汗流浹背晨抡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耘柱。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓如捅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親调煎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子镜遣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354