使用Dockerfile 部署 Lnmp+Redis 環(huán)境

Docker 簡(jiǎn)介

Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎耸序,讓開(kāi)發(fā)者可以打包他們的應(yīng)用以及依賴(lài)包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制磺樱,相互之間不會(huì)有任何接口纳猫。推薦內(nèi)核版本3.8及以上

為什么使用Docker

  1. 加速本地的開(kāi)發(fā)和構(gòu)建流程,容器可以在開(kāi)發(fā)環(huán)境構(gòu)建竹捉,然后輕松地提交到測(cè)試環(huán)境芜辕,并最終進(jìn)入生產(chǎn)環(huán)境
  2. 能夠在讓獨(dú)立的服務(wù)或應(yīng)用程序在不同的環(huán)境中得到相同的運(yùn)行結(jié)果
  3. 創(chuàng)建隔離的環(huán)境來(lái)進(jìn)行測(cè)試
  4. 高性能、超大規(guī)劃的宿主機(jī)部署
  5. 從頭編譯或者擴(kuò)展現(xiàn)有的OpenShift或Cloud Foundry平臺(tái)來(lái)搭建自己的PaaS環(huán)境

各環(huán)境安裝Docker

windows 安裝

參考

mac

docker toolbox參考

linux

sudo yum update
sudo yum -y install docker(下載的版本過(guò)低块差,在Ubuntu下可能會(huì)出現(xiàn)問(wèn)題侵续,不推薦)
或者 curl -sSL https://get.docker.com/ | sh  通過(guò)官方腳本獲取安裝最新版本(推薦)
#安裝程序?qū)ocker程序安裝到/usr/bin??目錄下,配置?文件安裝在/etc/sysconfig/docker憨闰。安裝好docker之后状蜗,可以 將docker加?入到啟動(dòng)服務(wù)組中 
sudo systemctl enable docker.service
#手動(dòng)啟動(dòng)docker服務(wù)器,使?用命令 sudo systemctl start docker.service

curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
#安裝docker-compose

目錄結(jié)構(gòu)

docker_lnmp
├── mysql
│   └── Dockerfile
│   └── my.cnf
├── nginx
│   ├── Dockerfile
│   ├── nginx.conf
│   ├── log
│   │   └── error.log
│   └── www
│       ├── index.html
│       ├── index.php
│       ├── db.php
│       └── redis.php
├── php
│   ├── Dockerfile
│   ├── www.conf
│   ├── php-fpm.conf
│   ├── php.ini
│   └── log
│       └── php-fpm.log
└── redis
    └── Dockerfile
    └── redis.conf

創(chuàng)建鏡像與安裝

方法一鹉动、 直接使用docker-compose一鍵制作鏡像并運(yùn)行容器(推薦)

```
git clone https://github.com/voocel/docker-lnmp.git
cd docker-lnmp
docker-compose up -d
```
然后就可以通過(guò)訪(fǎng)問(wèn)127.0.0.1轧坎、127.0.0.1/index.php、127.0.0.1/db.php训裆、127.0.0.1/redis.php 測(cè)試了
(若想使用https則請(qǐng)修改nginx下的dockerfile眶根,和nginx.conf按提示去掉注釋即可,靈需要在ssl文件夾中加入自己的證書(shū)文件边琉,本項(xiàng)目自帶的是空的,需要自己替換记劝,保持文件名一致)

方法二变姨、 逐步build并run

```
# build
docker build -t centos/nginx:v1.11.5 -v /www:/www -v /data:/data  ./nginx
docker build -t centos/mysql:v5.7 -v /data/mysql:/var/lib/mysql -v /data/logs/mysql:/var/log/mysql  ./mysql
docker build -t centos/php:v7.0.12 -v /www:/www -v /data:/data  ./php
docker build -t centos/redis:v3.2.6 -v /data:/data  ./redis

#備注:這里選取了172.172.0.0網(wǎng)段,也可以指定其他任意空閑的網(wǎng)段
docker network create --subnet=172.171.0.0/16 docker-at

# run
docker run --name mysql57 --net docker-at --ip 172.171.0.9 -d -p 3306:3306 -v /data/mysql:/var/lib/mysql -v /data/logs/mysql:/var/log/mysql -v /data/run/mysqlmysqld:/var/run/mysqld  -e MYSQL_ROOT_PASSWORD=123456 -it centos/mysql:v5.7
docker run --name redis326 --net docker-at --ip 172.171.0.10 -d -p 6379:6379  -v /data:/data -it centos/redis:v3.2.6
docker run --name php7 --net docker-at --ip 172.171.0.8 -d -p 9000:9000 -v /www:/www -v /data:/data --link mysql57:mysql57 --link redis326:redis326 -it centos/php:v7.0.12 
docker run --name nginx11 --net docker-at --ip 172.171.0.7 -p 80:80 -d -v /www:/www -v /data:/data --link php7:php7 -it centos/nginx:v1.11.5 
```

常用命令

  • docker start 容器名(容器ID也可以)
  • docker stop 容器名(容器ID也可以)
  • docker run 命令加 -d 參數(shù)厌丑,docker 會(huì)將容器放到后臺(tái)運(yùn)行
  • docker ps 正在運(yùn)行的容器
  • docker logs --tail 10 -tf 容器名 查看容器的日志文件,加-t是加上時(shí)間戳定欧,f是跟蹤某個(gè)容器的最新日志而不必讀整個(gè)日志文件
  • docker top 容器名 查看容器內(nèi)部運(yùn)行的進(jìn)程
  • docker exec -d 容器名 touch /etc/new_config_file 通過(guò)后臺(tái)命令創(chuàng)建一個(gè)空文件
  • docker run --restart=always --name 容器名 -d ubuntu /bin/sh -c "while true;do echo hello world; sleep 1; done" 無(wú)論退出代碼是什么,docker都會(huì)自動(dòng)重啟容器怒竿,可以設(shè)置 --restart=on-failure:5 自動(dòng)重啟的次數(shù)
  • docker inspect 容器名 對(duì)容器進(jìn)行詳細(xì)的檢查砍鸠,可以加 --format='{(.State.Running)}' 來(lái)獲取指定的信息
  • docker rm 容器ID 刪除容器,注耕驰,運(yùn)行中的容器無(wú)法刪除
  • docker rm docker ps -a -q 這樣可以刪除所有的容器
  • docker images 列出鏡像
  • docker pull 鏡像名:標(biāo)簽 拉鏡像
  • docker search 查找docker Hub 上公共的可用鏡像
  • docker build -t='AT/web_server:v1' 命令后面可以直接加上github倉(cāng)庫(kù)的要目錄下存在的Dockerfile文件爷辱。 命令是編寫(xiě)Dockerfile 之后使用的。-t選項(xiàng)為新鏡像設(shè)置了倉(cāng)庫(kù)和名稱(chēng):標(biāo)簽
  • docker login 登陸到Docker Hub朦肘,個(gè)人認(rèn)證信息將會(huì)保存到$HOME/.dockercfg,
  • docker commit -m="comment " --author="AT" 容器ID 鏡像的用戶(hù)名/倉(cāng)庫(kù)名:標(biāo)簽 不推薦這種方法饭弓,推薦dockerfile
  • docker history 鏡像ID 深入探求鏡像是如何構(gòu)建出來(lái)的
  • docker port 鏡像ID 端口 查看映射情況的容器的ID和容器的端口號(hào),假設(shè)查詢(xún)80端口對(duì)應(yīng)的映射的端口
  • run 運(yùn)行一個(gè)容器媒抠, -p 8080:80 將容器內(nèi)的80端口映射到docker宿主機(jī)的某一特定端口弟断,將容器的80端口綁定到宿主機(jī)的8080端口,另 127.0.0.1:80:80 是將容器的80端口綁定到宿主機(jī)這個(gè)IP的80端口上趴生,-P 是將容器內(nèi)的80端口對(duì)本地的宿主機(jī)公開(kāi)
  • http://docs.docker.com/reference/builder/ 查看更多的命令
  • docker push 鏡像名 將鏡像推送到 Docker Hub
  • docker rmi 鏡像名 刪除鏡像
  • docker attach 容器ID 進(jìn)入容器
  • ############################################################
  • docker network create --subnet=172.171.0.0/16 docker-at 選取172.172.0.0網(wǎng)段
  • docker build 就可以加 -ip指定容器ip 172.171.0.10 了
    刪除所有容器和鏡像的命令
docker rm `docker ps -a |awk '{print $1}' | grep [0-9a-z]` 刪除停止的容器
docker rmi $(docker images | awk '/^<none>/ { print $3 }')

進(jìn)入容器的命令

  1. nsenter 命令需要安裝
# cd /tmp; curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-; cd util-linux-2.24;
# ./configure --without-ncurses
# make nsenter && sudo cp nsenter /usr/local/bin

為了連接到容器阀趴,你還需要找到容器的第一個(gè)進(jìn)程的 PID昏翰,可以通過(guò)下面的命令獲取再執(zhí)行。

PID=$(docker inspect --format "{{ .State.Pid }}" container_id)
# nsenter --target $PID --mount --uts --ipc --net --pid

dockerfile 語(yǔ)法

  • MAINTAINER 標(biāo)識(shí)鏡像的作者和聯(lián)系方式
  • EXPOSE 可以指定多個(gè)EXPOSE向外部公開(kāi)多個(gè)端口刘急,可以幫助多個(gè)容器鏈接
  • FROM 指令指定一個(gè)已經(jīng)存在的鏡像
  • #號(hào)代表注釋
  • RUN 運(yùn)行命令,會(huì)在shell 里使用命令包裝器 /bin/sh -c 來(lái)執(zhí)行矩父。如果是在一個(gè)不支持shell 的平臺(tái)上運(yùn)行或者不希望在shell 中運(yùn)行,也可以 使用exec 格式 的RUN指令
  • ENV REFRESHED_AT 環(huán)境變量 這個(gè)環(huán)境亦是用來(lái)表明鏡像模板最后的更新時(shí)間
  • VOLUME 容器添加卷排霉。一個(gè)卷是可以 存在于一個(gè)或多個(gè)容器內(nèi)的特定的目錄窍株,對(duì)卷的修改是立刻生效的,對(duì)卷的修改不會(huì)對(duì)更新鏡像產(chǎn)品影響攻柠,例:VOLUME["/opt/project","/data"]
  • ADD 將構(gòu)建環(huán)境 下的文件 和目錄復(fù)制到鏡像 中球订。例 ADD nginx.conf /conf/nginx.conf 也可以是取url 的地址文件,如果是壓縮包瑰钮,ADD命令會(huì)自動(dòng)解壓冒滩、
  • USER 指定鏡像用那個(gè)USER 去運(yùn)行
  • COPY 是復(fù)制本地文件,而不會(huì)去做文件提壤饲础(解壓包不會(huì)自動(dòng)解壓) 例:COPY conf.d/ /etc/apache2/ 將本地conf.d目錄中的文件復(fù)制到/etc/apache2/目錄中

docker-compose.yml 語(yǔ)法說(shuō)明

  • image 指定為鏡像名稱(chēng)或鏡像ID开睡。如果鏡像不存在,Compose將嘗試從互聯(lián)網(wǎng)拉取這個(gè)鏡像
  • build 指定Dockerfile所在文件夾的路徑苟耻。Compose將會(huì)利用他自動(dòng)構(gòu)建這個(gè)鏡像篇恒,然后使用這個(gè)鏡像
  • command 覆蓋容器啟動(dòng)后默認(rèn)執(zhí)行的命令
  • links 鏈接到其他服務(wù)容器,使用服務(wù)名稱(chēng)(同時(shí)作為別名)或服務(wù)別名(SERVICE:ALIAS)都可以
  • external_links 鏈接到docker-compose.yml外部的容器凶杖,甚至并非是Compose管理的容器胁艰。參數(shù)格式和links類(lèi)似
  • ports 暴露端口信息。宿主機(jī)器端口:容器端口(HOST:CONTAINER)格式或者僅僅指定容器的端口(宿主機(jī)器將會(huì)隨機(jī)分配端口)都可以(注意:當(dāng)使用 HOST:CONTAINER 格式來(lái)映射端口時(shí)智蝠,如果你使用的容器端口小于 60 你可能會(huì)得到錯(cuò)誤得結(jié)果腾么,因?yàn)?YAML 將會(huì)解析 xx:yy 這種數(shù)字格式為 60 進(jìn)制。所以建議采用字符串格式杈湾。)
  • expose 暴露端口解虱,與posts不同的是expose只可以暴露端口而不能映射到主機(jī),只供外部服務(wù)連接使用漆撞;僅可以指定內(nèi)部端口為參數(shù)
  • volumes 設(shè)置卷掛載的路徑殴泰。可以設(shè)置宿主機(jī)路徑:容器路徑(host:container)或加上訪(fǎng)問(wèn)模式(host:container:ro)ro就是readonly的意思叫挟,只讀模式
  • volunes_from 掛載另一個(gè)服務(wù)或容器的所有數(shù)據(jù)卷
  • environment 設(shè)置環(huán)境變量艰匙。可以屬于數(shù)組或字典兩種格式抹恳。如果只給定變量的名稱(chēng)則會(huì)自動(dòng)加載它在Compose主機(jī)上的值员凝,可以用來(lái)防止泄露不必要的數(shù)據(jù)
  • env_file 從文件中獲取環(huán)境變量,可以為單獨(dú)的文件路徑或列表奋献。如果通過(guò)docker-compose -f FILE指定了模板文件健霹,則env_file中路徑會(huì)基于模板文件路徑旺上。如果有變量名稱(chēng)與environment指令沖突,則以后者為準(zhǔn)(環(huán)境變量文件中每一行都必須有注釋?zhuān)С?開(kāi)頭的注釋行)
  • extends 基于已有的服務(wù)進(jìn)行服務(wù)擴(kuò)展糖埋。例如我們已經(jīng)有了一個(gè)webapp服務(wù)宣吱,模板文件為common.yml。編寫(xiě)一個(gè)新的 development.yml 文件瞳别,使用 common.yml 中的 webapp 服務(wù)進(jìn)行擴(kuò)展征候。后者會(huì)自動(dòng)繼承common.yml中的webapp服務(wù)及相關(guān)的環(huán)境變量
  • net 設(shè)置網(wǎng)絡(luò)模式。使用和docker client 的 --net 參數(shù)一樣的值
  • pid 和宿主機(jī)系統(tǒng)共享進(jìn)程命名空間祟敛,打開(kāi)該選項(xiàng)的容器可以相互通過(guò)進(jìn)程id來(lái)訪(fǎng)問(wèn)和操作
  • dns 配置DNS服務(wù)器疤坝。可以是一個(gè)值馆铁,也可以是一個(gè)列表
  • cap_add跑揉,cap_drop 添加或放棄容器的Linux能力(Capability)
  • dns_search 配置DNS搜索域〔壕蓿可以是一個(gè)值也可以是一個(gè)列表
  • 注意:使用compose對(duì)Docker容器進(jìn)行編排管理時(shí)历谍,需要編寫(xiě)docker-compose.yml文件,初次編寫(xiě)時(shí)辣垒,容易遇到一些比較低級(jí)的問(wèn)題望侈,導(dǎo)致執(zhí)行docker-compose up時(shí)先解析yml文件的錯(cuò)誤。比較常見(jiàn)的是yml對(duì)縮進(jìn)的嚴(yán)格要求乍构。yml文件還行后的縮進(jìn)甜无,不允許使用tab鍵字符,只能使用空格哥遮,而空格的數(shù)量也有要求,一般兩個(gè)空格陵究。

常見(jiàn)問(wèn)題處理

  • 注意掛載目錄的權(quán)限問(wèn)題眠饮,不然容器成功啟動(dòng)幾秒后立刻關(guān)閉,例:以下/data/run/mysql 目錄沒(méi)權(quán)限的情況下就會(huì)出現(xiàn)剛才那種情況
    docker run --name mysql57 -d -p 3306:3306 -v /data/mysql:/var/lib/mysql -v /data/logs/mysql:/var/log/mysql -v /data/run/mysql:/var/run/mysqld -e MYSQL_ROOT_PASSWORD=123456 -it centos/mysql:v5.7

  • 需要注意php.ini 中的目錄對(duì)應(yīng) mysql 的配置的目錄需要掛載才能獲取文件內(nèi)容铜邮,不然php連接mysql失敗

      ```
      # php.ini
      mysql.default_socket = /data/run/mysql/mysqld.sock
      mysqli.default_socket = /data/run/mysql/mysqld.sock
      pdo_mysql.default_socket = /data/run/mysql/mysqld.sock
      
      # mysqld.cnf
      pid-file       = /var/run/mysqld/mysqld.pid
      socket         = /var/run/mysqld/mysqld.sock
      
      ```
    
  • 使用php連接不上redis

    # 錯(cuò)誤的
    $redis = new Redis;
    $rs = $redis->connect('127.0.0.1', 6379);
    
    

    php連接不上仪召,查看錯(cuò)誤日志

    PHP Fatal error:  Uncaught RedisException: Redis server went away in /www/index.php:7
    

    考慮到docker 之間的通信應(yīng)該不可以用127.0.0.1 應(yīng)該使用容器里面的ip,所以查看redis 容器的ip

    [root@localhost docker]# docker ps
    CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS              PORTS                                      NAMES
    b5f7dcecff4c        docker_nginx                         "/usr/sbin/nginx -..."   4 seconds ago       Up 3 seconds        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   nginx
    60fd2df36d0e        docker_php                           "/usr/local/php/sb..."   7 seconds ago       Up 5 seconds        9000/tcp                                   php
    7c7df6f8eb91        hub.c.163.com/library/mysql:latest   "docker-entrypoint..."   12 seconds ago      Up 11 seconds       3306/tcp                                   mysql
    a0ebd39f0f64        docker_redis                         "usr/local/redis/s..."   13 seconds ago      Up 12 seconds       6379/tcp                                   redis
    

    注意測(cè)試的時(shí)候連接地址需要容器的ip或者容器名names松蒜,比如redis扔茅、mysql.
    例如nginx配置php文件解析 fastcgi_pass php:9000;
    例如php連接 redis $redis = new Redis;$res = $redis->connect('redis', 6379);

    因?yàn)槿萜鱥p是動(dòng)態(tài)的,重啟之后就會(huì)變化秸苗,所以可以創(chuàng)建靜態(tài)ip

    第一步:創(chuàng)建自定義網(wǎng)絡(luò)

    #備注:這里選取了172.172.0.0網(wǎng)段召娜,也可以指定其他任意空閑的網(wǎng)段
    docker network create --subnet=172.171.0.0/16 docker-at
    docker run --name redis326 --net docker-at --ip 172.171.0.20 -d -p 6379:6379  -v /data:/data -it centos/redis:v3.2.6
    

    連接redis 就可以配置對(duì)應(yīng)的ip地址了,連接成功

    $redis = new Redis;
    $rs = $redis->connect('172.171.0.20', 6379);
    

    另外還有種可能phpredis連接不上redis惊楼,需要把redis.conf配置略作修改玖瘸。

    bind 127.0.0.1
    改為:
    bind 0.0.0.0
    
  • 啟動(dòng)docker web服務(wù)時(shí) 虛擬機(jī)端口轉(zhuǎn)發(fā) 外部無(wú)法訪(fǎng)問(wèn) 一般出現(xiàn)在yum update的時(shí)候(WARNING: IPv4 forwarding is disabled. Networking will not work.)或者宿主機(jī)可以訪(fǎng)問(wèn)秸讹,但外部無(wú)法訪(fǎng)問(wèn)

vi /etc/sysctl.conf
或者
vi /usr/lib/sysctl.d/00-system.conf
添加如下代碼:
    net.ipv4.ip_forward=1

重啟network服務(wù)
systemctl restart network

查看是否修改成功
sysctl net.ipv4.ip_forward

如果返回為"net.ipv4.ip_forward = 1"則表示成功了
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市雅倒,隨后出現(xiàn)的幾起案子璃诀,更是在濱河造成了極大的恐慌,老刑警劉巖蔑匣,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劣欢,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡裁良,警方通過(guò)查閱死者的電腦和手機(jī)凿将,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)趴久,“玉大人丸相,你說(shuō)我怎么就攤上這事”斯鳎” “怎么了灭忠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)座硕。 經(jīng)常有香客問(wèn)我弛作,道長(zhǎng),這世上最難降的妖魔是什么华匾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任映琳,我火速辦了婚禮,結(jié)果婚禮上蜘拉,老公的妹妹穿的比我還像新娘萨西。我一直安慰自己,他們只是感情好旭旭,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布谎脯。 她就那樣靜靜地躺著,像睡著了一般持寄。 火紅的嫁衣襯著肌膚如雪源梭。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,772評(píng)論 1 290
  • 那天稍味,我揣著相機(jī)與錄音废麻,去河邊找鬼。 笑死模庐,一個(gè)胖子當(dāng)著我的面吹牛烛愧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼屑彻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼验庙!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起社牲,我...
    開(kāi)封第一講書(shū)人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤粪薛,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后搏恤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體违寿,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年熟空,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了藤巢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡息罗,死狀恐怖掂咒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情迈喉,我是刑警寧澤绍刮,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站挨摸,受9級(jí)特大地震影響孩革,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜得运,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一膝蜈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧熔掺,春花似錦饱搏、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至诽偷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疯坤,已是汗流浹背报慕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留压怠,地道東北人眠冈。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蜗顽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子布卡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容