CentOS上Docker部署Django項(xiàng)目記錄

概念

Docker 使用 Google 公司推出的 Go 語言進(jìn)行開發(fā)實(shí)現(xiàn)(k8s也是Go語言)力喷,基于 Linux 內(nèi)核的cgroup恩急,namespace企孩,以及 AUFS 類的 Union FS 等技術(shù)绘面,對(duì)進(jìn)程進(jìn)行封裝隔離腻惠,屬于操作系統(tǒng)層面的虛擬化技術(shù)环肘。由于隔離的進(jìn)程獨(dú)立于宿主和其它的隔離的進(jìn)程,因此也稱其為容器集灌。最初實(shí)現(xiàn)是基于 LXC悔雹,從 0.7 版本以后開始去除 LXC,轉(zhuǎn)而使用自行開發(fā)的 libcontainer欣喧,從 1.11 開始腌零,則進(jìn)一步演進(jìn)為使用 runC 和 containerd

docker應(yīng)該是目前最流行的容器解決方案,它的思想來源于集裝箱唆阿,集裝箱的作用是什么益涧?封存、隔離貨物驯鳖。我們把海鮮和水果分別裝在不同的集裝箱里饰躲,由同一艘大船去運(yùn)輸。這是不是要比分兩艘船來的方便臼隔、快捷、高效呢妄壶。舉例:公司的開發(fā)環(huán)境和生產(chǎn)環(huán)境不一致摔握,開發(fā)出來的程序在開發(fā)人員本地能運(yùn)行,上了生產(chǎn)卻運(yùn)行不了丁寄。你懂得氨淌,這個(gè)時(shí)候就要開始甩鍋了泊愧。這中情況如果用docker就不一樣了,我們直接把開發(fā)環(huán)境build成一個(gè)鏡像盛正,然后由運(yùn)維去把這個(gè)docker鏡像部署上就OK了删咱。環(huán)境一毛一樣

如下圖所示,運(yùn)行一個(gè)容器的過程:

  • 去registry中拉取鏡像豪筝,如果本地已經(jīng)存在痰滋,則直接使用本地鏡像
  • 根據(jù)鏡像創(chuàng)建容器
  • 給容器分配文件系統(tǒng),并在最上層掛載一個(gè)可讀寫層续崖。
  • 分配網(wǎng)絡(luò)接口敲街,創(chuàng)建一個(gè)允許容器和宿主機(jī)訪問得網(wǎng)絡(luò)接口
  • 運(yùn)行指定的程序
  • 收集容器的運(yùn)行狀態(tài)
image

docker,最核心的是理解三個(gè)概念严望,分別是:倉庫(Registry)多艇、鏡像(image)和容器(Container)

<p id="div-border-left-blue">docker-io, docker-engin</p>
是以前早期的版本,版本號(hào)是 1.x像吻,默認(rèn)centos7 安裝的是docker-io峻黍,最新版是 1.13

<p id="div-border-left-blue">docker-ce</p>
是社區(qū)版本,適用于剛剛開始docker 和開發(fā)基于docker研發(fā)的應(yīng)用開發(fā)者或者小型團(tuán)隊(duì)拨匆。Ubuntu默認(rèn)安裝的是docker-ce

<p id="div-border-left-blue">docker-ee</p>
是docker的企業(yè)版姆涩,適用于企業(yè)級(jí)開發(fā),同樣也適用于開發(fā)涮雷、分發(fā)和運(yùn)行商務(wù)級(jí)別的應(yīng)用的IT 團(tuán)隊(duì)

安裝

Docker手冊(cè)

Docker 要求 CentOS 系統(tǒng)的內(nèi)核版本高于 3.10 阵面,驗(yàn)證你的CentOS 版本是否支持 Docker

uname -a
[root@VM_0_14_centos ~]# uname -a
Linux VM_0_14_centos 3.10.0-1062.9.1.el7.x86_64 #1 SMP Fri Dec 6 15:49:49 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

CentOS 7,正好可以支持

安裝命令

yum install docker-ce -y
[root@VM_0_14_centos ~]# yum install docker-ce -y
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
...   
No package docker-ce available.
Error: Nothing to do

需要先安裝yum源

# 安裝需要的軟件包洪鸭, yum-util 提供yum-config-manager功能样刷,另外兩個(gè)是devicemapper驅(qū)動(dòng)依賴的

yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置Docker的yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

[root@VM_0_14_centos ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, langpacks
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

可以查看所有倉庫中所有docker版本,并選擇特定版本安裝

yum list docker-ce --showduplicates | sort -r

選擇下載最新版本

yum install docker-ce-19.03.5 -y

安裝成功

常用命令

啟動(dòng)Docker

systemctl start docker

加入開機(jī)啟動(dòng)

systemctl enable docker

查看版本览爵,驗(yàn)證是否安裝成功(有client和service兩部分表示docker安裝啟動(dòng)都成功了)

docker version
[root@VM_0_14_centos ~]# docker version 
Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
...

Server: Docker Engine - Community
 Engine:
  Version:          19.03.5
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.12
...

查看Docker的使用信息

docker info

搜索鏡像

docker search images_name

# NAME列:沒有斜線分隔的名字稱為頂級(jí)倉庫置鼻,一般屬于docker hub官方所有;有斜線分隔符的稱為用戶倉庫或者是項(xiàng)目倉庫蜓竹,docker hub官方允許用戶個(gè)人注冊(cè)賬戶建立自己的倉庫箕母。
# DESCRIPTION列:倉庫描述
# STARS列:用戶表示“贊”的個(gè)數(shù) 

下載鏡像

docker pull images_name

查看當(dāng)前鏡像列表

docker images 

更多命令,參考:這里

docker ps                       : 查看當(dāng)前正在運(yùn)行的容器
docker ps -a                    : 查看所有容器的狀態(tài)
docker start/stop id/name       : 啟動(dòng)/停止某個(gè)容器
docker attach id                : 進(jìn)入某個(gè)容器(使用exit退出后容器也跟著停止運(yùn)行)
docker exec -ti id              : 啟動(dòng)一個(gè)偽終端以交互式的方式進(jìn)入某個(gè)容器(使用exit退出后容器不停止運(yùn)行)
docker rm id/name               : 刪除某個(gè)容器
docker rmi id/name              : 刪除某個(gè)鏡像

# 復(fù)制ubuntu容器并且重命名為test且運(yùn)行俱济,然后以偽終端交互式方式進(jìn)入容器嘶是,運(yùn)行bash
docker run --name test -ti ubuntu /bin/bash  

# 通過當(dāng)前目錄下的Dockerfile創(chuàng)建一個(gè)名為soar/centos:7.1的鏡像
docker build -t soar/centos:7.1 .  

# 以鏡像soar/centos:7.1創(chuàng)建名為test的容器
# 并以后臺(tái)模式運(yùn)行,并做端口映射到宿主機(jī)2222端口蛛碌,P參數(shù)重啟容器宿主機(jī)端口會(huì)發(fā)生改變
docker run -d -p 2222:22 --name test soar/centos:7.1  

容器管理

命令幫助

docker run --help

-d                   # 后臺(tái)運(yùn)行容器.
-i                   # 使用交互式訪問容器.
-t                   # 分配一個(gè)終端聂喇,需要與-i結(jié)合使用.
--name               # 給容器分配個(gè)名字.
--network string     # 使容器加入到一個(gè)網(wǎng)絡(luò),如不指定,默認(rèn)就是加到bridge網(wǎng)絡(luò)(可以使用docker network ls查看)希太,使用docker0的虛擬網(wǎng)卡.
--rm                 # 容器一停克饶,就自動(dòng)刪除.

直接創(chuàng)建、啟動(dòng)并登入容器(啟動(dòng)容器的鏡像可以不用提前下載誊辉,執(zhí)行run命令的時(shí)候會(huì)自動(dòng)下載)

docker run --name bbox -it busybox:latest

啟動(dòng)一個(gè)容器:

# 如果容器是一個(gè)后臺(tái)守護(hù)進(jìn)程矾湃,那直接start就可以了,如果需要直接進(jìn)入交互式接口堕澄,需要加-ai的參數(shù)
docker start -ai bbox 

停止一個(gè)容器:

# stop和kill區(qū)別就是:stop是發(fā)送15的信號(hào)邀跃,kill是發(fā)送9的信號(hào)。kill是強(qiáng)制殺死奈偏,有丟失數(shù)據(jù)的可能坞嘀,所以一般不建議使用。
docker stop bbox

刪除一個(gè)容器:

docker rm bbox 

啟動(dòng)一個(gè)后臺(tái)運(yùn)行的容器:

docker run --name web01 -d nginx:1.14-alpine 

docker ps -a

docker inspect web01 | grep IPAddress

登入后臺(tái)運(yùn)行的容器:

docker exec -it web01 /bin/bash

查看容器訪問日志:

# 一般情況下容器只會(huì)運(yùn)行程序這一個(gè)進(jìn)程惊来,日志都是保存在于宿主機(jī)上的丽涩,可以用下面命令查看。
docker logs web01 

Django鏡像

所謂倉庫裁蚁,其實(shí)是個(gè)鏡像倉庫矢渊,里面有很多別人已經(jīng)打包好的鏡像,可以直接使用docker枉证,pull命令將倉庫中的鏡像拉到本地矮男,默認(rèn)的倉庫Docker的官方倉庫Docker Hub Registry

因?yàn)閴Φ木壒剩俜絺}庫的速度會(huì)比較慢室谚,可以配一個(gè)官方的中國加速鏡像毡鉴,方法是:修改/etc/docker/daemon.json,加上如下的鍵值:

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

之后重啟docker服務(wù)即可生效

基于Python3容器制作新的Django鏡像

Python鏡像

在這里找到想要下載的鏡像

# 下載
docker pull python:3.6.10-alpine

# 后臺(tái)運(yùn)行
docker run --name django_v1 -itd python:3.6.10-alpine

# 登錄容器
docker exec -it django_v1 sh

# 退出
exit

這里如果用/bin/bash會(huì)報(bào)錯(cuò):

[root@VM_0_14_centos ~]# docker exec -it django_v1 /bin/bash
OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown

因?yàn)椋?/p>

我們一般可能會(huì)在容器啟動(dòng)后進(jìn)入容器秒赤,常用的是docker attach 鏡像id猪瞬,但是啟動(dòng)鏡像的時(shí)候如果沒有帶 參數(shù) -it的話,attach進(jìn)去后可能是日志界面入篮,并不能執(zhí)行命令陈瘦。所以我們會(huì)用docker exec -it 鏡像id /bin/bash/

平常的容器一般都可以執(zhí)行/bin/bash,但是alpine沒有潮售,改成docker exec -it 鏡像id sh就好了

進(jìn)入容器后安裝其他依賴

cd ~

mkdir .pip

vi .pip/pip.conf

# 添加
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
# 添加為信任的host
[install]
trusted-host = mirrors.aliyun.com

# 保存
# 安裝yum
wget http://yum.baseurl.org/download/3.2/yum-3.2.28.tar.gz
tar xvf yum-3.2.28.tar.gz

...

pip3 install django==2.2.7
pip3 install uwsgi

# 通過yum安裝nginx
yum install nginx -y

# 創(chuàng)建軟連接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
ln -s /usr/local/python3/bin/django-admin.py /usr/bin/django-admin

這就有點(diǎn)麻煩痊项,這個(gè)容器中很多Linux命令都沒有,需要你自己手動(dòng)安裝很多東西酥诽,所以暫時(shí)不考慮這種方式

基于Dockerfile制作Django鏡像

在需要部署的Django項(xiàng)目的根目錄下鞍泉,添加三個(gè)文件Dockerfilerequirements.txt肮帐,pip conf

FROM python:3.6 這里指定 Python 版本為目前穩(wěn)定的 python3.6

FROM python:3.6
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY pip.conf /root/.pip/pip.conf
COPY requirements.txt /usr/src/app/
RUN pip install -r /usr/src/app/requirements.txt
RUN rm -rf /usr/src/app
COPY . /usr/src/app
CMD [ "python3", "./manage.py", "runserver", "0.0.0.0:8089"]

使用鏡像 pip install 相關(guān)依賴

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
extra-index-url= https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=
    mirrors.aliyun.com
    pypi.tuna.tsinghua.edu.cn

通過這個(gè)命令即可生成requirements.txt

pip3 freeze > requirements.txt
...

同樣在Django根目錄下咖驮,也就是Dockerfile文件所在的目錄

docker build -t my_django:v1.0 .

其中-t my_django:v1.0表示打包的鏡像名為my_django,tag為v1.0,前面說過游沿,tag是可以任意命名的,不一定要是這種格式肮砾,注意命令的最后有一個(gè).诀黍,這個(gè)表示打包的上下文(其實(shí)就是Dockerfile所在目錄)是在當(dāng)前目錄,然后目錄下的Dockerfile就會(huì)被編譯執(zhí)行

執(zhí)行完畢后運(yùn)行docker images就會(huì)發(fā)現(xiàn)多了一個(gè)my_django鏡像

若build過慢仗处,我的是騰訊云下使用的centos7服務(wù)器眯勾,可以

# 使用騰訊云dockerhub加速器
# 創(chuàng)建或修改 /etc/docker/daemon.json 文件,并添加如下:

{
   "registry-mirrors": [
       "https://mirror.ccs.tencentyun.com"
  ]
}

依次執(zhí)行以下命令婆誓,重新啟動(dòng) Docker 服務(wù)

systemctl daemon-reload
systemctl restart docker

執(zhí)行docker info命令囤官,返回結(jié)果中包含以下內(nèi)容呻纹,則說明配置加速成功

Registry Mirrors:
 https://mirror.ccs.tencentyun.com

生成鏡像成功

...

 ---> ec6c706a5f6e
Step 7/9 : RUN rm -rf /usr/src/app
 ---> Running in 318cc576230f
Removing intermediate container 318cc576230f
 ---> 21b97e82ebf7
Step 8/9 : COPY . /usr/src/app
 ---> 793452ffa1d7
Step 9/9 : CMD [ "python3", "./manage.py", "runserver", "0.0.0.0:8089"]
 ---> Running in a3448d5b9541
Removing intermediate container a3448d5b9541
 ---> f5bb78cebbc8
Successfully built f5bb78cebbc8
Successfully tagged my_django:v1.0

開啟容器

這里的8089由上面的Dockerfile決定
這里的 xxx.xxx.xxx.xxx 為自己服務(wù)器公網(wǎng)IP地址

# http://xxx.xxx.xxx.xxx:8089
docker run -it --rm -p 8089:8089 --name django_v1 my_django:v1.0
# 或者 http://xxx.xxx.xxx.xxx:8000(端口號(hào)隨意映射,但要注意開啟對(duì)應(yīng)安全組)
docker run -it --rm -p 8000:8089 --name django_v1 my_django:v1.0

結(jié)果報(bào)mysqlclient的錯(cuò):

...mysqlclient 1.3.13 or newer is required; you have 0.7.11.None

因?yàn)槭侨萜髦械奈募栴},所以只好到容器中修改

# 后臺(tái)運(yùn)行
docker run --name django_v1 -d my_django:v1.0
# 登錄容器
docker exec -it django_v1 sh

find / -name base.py

# 因?yàn)闆]有vim以及vi狼讨,所以得安裝,時(shí)間有點(diǎn)久
apt-get update
apt-get install vim

vim /usr/local/lib/python3.6/site-packages/django/db/backends/mysql/base.py

修改如下题禀,這兩行注釋掉:

# if version < (1, 3, 3):
#     raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)

然后exit

為了區(qū)別馍资,并重新運(yùn)行添加端口,commit一個(gè)新的my_django鏡像

# docker commit containerID/name images
docker commit -a 'joel' django_v1 my_django:v2.0

現(xiàn)在又多了一個(gè)鏡像

[root@VM_0_14_centos LVideo]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
my_django           v2.0                82eb6e8ad0cc        3 minutes ago       1.08GB
my_django           v1.0                f5bb78cebbc8        About an hour ago   1.03GB
python              3.6                 62f74e9ce5f1        6 days ago          914MB

我們可以將鏡像提交到docker hub

注冊(cè)hub.docker.com的賬號(hào)燥翅,點(diǎn)擊"Repositories"菜單骑篙,然后點(diǎn)擊"Create Repository +"來創(chuàng)建一個(gè)倉庫,創(chuàng)建完成后瀏覽器的窗口不要關(guān)閉

docker login -u joelying
Password: 
Login Succeeded
# 驗(yàn)證成功森书,開始進(jìn)行push操作靶端,此處加了tag,如果不加tag凛膏,就是將此鏡像的所有版本都push上去
docker push joelying/my_django:v2.0

若出現(xiàn)

denied: requested access to the resource is denied

實(shí)際上是因?yàn)樵趯㈢R像push到自己新建的賬戶之前杨名,要用docker tag重命名一下,將鏡像命名你的用戶名/鏡像名這種形式译柏,不然會(huì)push認(rèn)證不通過镣煮,如:

[root@VM_0_14_centos LVideo]# docker tag my_django:v2.0 joelying/my_django:v2.0 

[root@VM_0_14_centos LVideo]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
joelying/my_django   v2.0                82eb6e8ad0cc        15 minutes ago      1.08GB
my_django            v2.0                82eb6e8ad0cc        15 minutes ago      1.08GB
...

# 注意時(shí)間很久
[root@VM_0_14_centos LVideo]# docker push joelying/my_django:v2.0

這下就push成功

image

參考

* Centos7下安裝Docker(詳細(xì)的新手裝逼教程)
Centos6.5下安裝docker+升級(jí)內(nèi)核+禁用selinux
* Docker與Dockerfile極簡入門文檔(一目了然)
* docker(三):docker鏡像管理
* 編寫Dockerfile與項(xiàng)目實(shí)踐+各類項(xiàng)目dockerfile編寫
* docker版Django
* Python3.6 使用 Docker 快速部署 Django2.0 項(xiàng)目到阿里云服務(wù)器上
包含鏡像分享至docker hub
Docker:發(fā)布自己鏡像問題denied: requested access to the resource is denied解決方法
linux python3換pip 源
linux下yum安裝的最簡方法
linux如何安裝yum

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鄙麦,隨后出現(xiàn)的幾起案子典唇,更是在濱河造成了極大的恐慌,老刑警劉巖胯府,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件介衔,死亡現(xiàn)場離奇詭異,居然都是意外死亡骂因,警方通過查閱死者的電腦和手機(jī)炎咖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乘盼,你說我怎么就攤上這事升熊。” “怎么了绸栅?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵级野,是天一觀的道長。 經(jīng)常有香客問我粹胯,道長蓖柔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任风纠,我火速辦了婚禮况鸣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘竹观。我一直安慰自己镐捧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布栈幸。 她就那樣靜靜地躺著愤估,像睡著了一般。 火紅的嫁衣襯著肌膚如雪速址。 梳的紋絲不亂的頭發(fā)上玩焰,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音芍锚,去河邊找鬼昔园。 笑死,一個(gè)胖子當(dāng)著我的面吹牛并炮,可吹牛的內(nèi)容都是我干的默刚。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼逃魄,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼荤西!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起伍俘,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤邪锌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后癌瘾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體觅丰,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年妨退,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了妇萄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜕企。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖冠句,靈堂內(nèi)的尸體忽然破棺而出轻掩,到底是詐尸還是另有隱情,我是刑警寧澤懦底,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布放典,位于F島的核電站,受9級(jí)特大地震影響基茵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜壳影,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一拱层、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宴咧,春花似錦根灯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至氧卧,卻和暖如春桃笙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沙绝。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國打工搏明, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人闪檬。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓星著,卻偏偏與公主長得像,于是被迫代替她去往敵國和親粗悯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虚循,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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