001.Docker入門基礎(chǔ)篇

1. Docker安裝

1.1 安裝并啟動Docker

# 1.準(zhǔn)備yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
yum clean all
yum makecache

# 2.安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2

# 列出yum源存儲庫中可用的版本凳枝,按版本號降序排序
[admin@bdc01 yum.repos.d]$ yum list docker-ce.x86_64 --showduplicates | sort -r
Loading mirror speeds from cached hostfile
Loaded plugins: fastestmirror
docker-ce.x86_64            18.03.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            18.03.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.12.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.12.0.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.09.1.ce-1.el7.centos             docker-ce-stable
docker-ce.x86_64            17.09.0.ce-1.el7.centos             docker-ce-stable
...
# 說明,如果需要安裝指定版本的docker望艺,則需要根據(jù)以上信息拼接具體版本
# 第一列:docker-ce.x86_64睬捶,"."之前的字符串勃教,str1 = "docker-ce"
# 第一列:docker-ce.x86_64宾符,"."之后的字符串藻烤,str2 = "x86_64"
# 第二列:18.03.1.ce-1.el7.centos武鲁,str3 = "18.03.1.ce-1.el7.centos"
# docker的版本完整版本號為:str1 + "-" + str3 + "." + str2
# 上述第一行數(shù)據(jù)爽雄,docker的完整版本號為:docker-ce-18.03.1.ce-1.el7.centos.x86_64

# 3.安裝docker-ce
# 安裝最新版
yum install docker-ce docker-ce-cli containerd.io
# 安裝指定版本示例
yum install -y --setopt=obsoletes=0 docker-ce-17.03.2.ce-1.el7.centos.x86_64 docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
yum install -y --setopt=obsoletes=0 docker-ce-18.03.1.ce-1.el7.centos.x86_64 docker-ce-selinux-18.03.1.ce-1.el7.centos.noarch

# 4.啟動docker
[admin@bdc01 ~]$ sudo systemctl daemon-reload
[admin@bdc01 ~]$ sudo systemctl restart docker
[admin@bdc01 ~]$ sudo docker version
Client:
 Version:      17.03.2-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   f5ec1e2
 Built:        Tue Jun 27 02:21:36 2017
 OS/Arch:      linux/amd64
...
[admin@bdc01 yum.repos.d]$ sudo docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 17.03.2-ce
Storage Driver: overlay
...

1.2 配置鏡像加速

開通成功之后,會為你的賬戶分配一個鏡像加速的地址:

# 配置鏡像加速
# 將鏡像加速地址改成自己的地址
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

2. Docker體系結(jié)構(gòu)

  • Docker包括三個基本概念

    • 鏡像(Image):相當(dāng)于是一個root文件系統(tǒng)沐鼠,比如官方鏡像ubuntu:16.04就包含了完整的一套Ubuntu16.04最小系統(tǒng)的root文件系統(tǒng)

    • 容器(Container):鏡像和容器的關(guān)系挚瘟,就像是面向?qū)ο蟪绦蛟O(shè)計中的類和實(shí)例一樣,鏡像是靜態(tài)的定義饲梭,容器是鏡像運(yùn)行時的實(shí)體乘盖,容器可以被創(chuàng)建、啟動憔涉、停止订框、刪除、暫停等兜叨,Docker容器通過Docker鏡像來創(chuàng)建

    • 倉庫(Repository):倉庫可看成一個代碼控制中心穿扳,用來保存鏡像

  • Docker使用客戶端-服務(wù)器(C/S)架構(gòu)模式,使用遠(yuǎn)程API來管理和創(chuàng)建Docker容器

  • 客戶端執(zhí)行build国旷、pull矛物、run命令發(fā)送到DOCKER_HOST(服務(wù)端)

  • DOCKER_HOST的守護(hù)進(jìn)程(Docker daemon)創(chuàng)建容器

  • 拉取鏡像先從本地(Images)拉取,如果本地沒有會去鏡像倉庫(Registry)拉取鏡像

3. Docker鏡像管理基礎(chǔ)

# 1.在遠(yuǎn)程倉庫中查詢鏡像
[root@bdc01 ~]# docker search centos
NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                             The official build of CentOS.                   6245      [OK]       
ansible/centos7-ansible            Ansible on Centos7                              132                  [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC sessi...   123                  [OK]
...
# NAME: 鏡像倉庫源的名稱
# DESCRIPTION: 鏡像的描述
# STARS: 類似Github里面的star跪但,star越多履羞,表達(dá)喜歡此鏡像或者使用此鏡像的人越多
# OFFICIAL: 是否docker官方發(fā)布
# AUTOMATED: 是否自動構(gòu)建

# 2.獲取鏡像 docker pull 鏡像名稱[:版本]
# 下載最新版centos鏡像
[root@bdc01 ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
3c72a8ed6814: Pull complete 
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Status: Downloaded newer image for centos:latest
# 下載指定版本的centos鏡像
[root@bdc01 ~]# docker pull centos:7.5.1804

# 3.查看本地鏡像
# 兩個命令的效果相同
[root@bdc01 ~]# docker images
[root@bdc01 ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              0d120b6ccaa8        2 months ago        215 MB
# REPOSITORY: 鏡像的倉庫源
# TAG: 鏡像的標(biāo)簽
# IMAGE ID: 鏡像ID
# CREATED: 創(chuàng)建時間
# SIZE: 鏡像大小
# 如何確定一個唯一的鏡像:REPOSITORY:TAG或者IMAGE ID
# 這里查看到的鏡像ID是全部ID的前12位字符,如果想查看完整ID,使用以下命令
docker images --no-trunc
docker image ls --no-trunc
# 只累出鏡像ID
docker images -q
docker image ls -q
# 查看某一個本地鏡像的詳細(xì)信息 docker image inspect [REPOSITORY:TAG]或者docker image inspect [IMAGE ID]
[root@bdc01 ~]# docker image inspect centos:latest
[root@bdc01 ~]# docker image inspect 0d120b6ccaa8

# 4.鏡像的導(dǎo)入導(dǎo)出
# 鏡像導(dǎo)出
docker image save nginx >/opt/nginx.tar.gz
docker image save nginx:latest >/opt/nginx.tar.gz
docker image save 0d120b6ccaa8 >/opt/nginx.tar.gz
# 鏡像導(dǎo)入
docker image load -i /opt/nginx.tar.gz

# 5.刪除本地鏡像
docker image rm 0d120b6ccaa8
docker rmi centos:7.5.1804
docker rmi 0d120b6ccaa8
# 刪除全部本地鏡像 
docker rmi `docker images -q`
docker rmi $(docker images -q)

# 設(shè)置鏡像的標(biāo)簽
docker tag centos:latest centos:myLatest
docker tag 0d120b6ccaa8 centos:latest

4. Docker容器管理基礎(chǔ)

# 1.交互式地啟動容器
[root@bdc01 ~]# docker container run -it --name="centos.latest.container" 0d120b6ccaa8 /bin/bash
[root@bdc01 ~]# docker run -it --name centos.latest.container 0d120b6ccaa8 /bin/bash
# -i: 以交互式方式啟動
# -t: 打開一個新終端
# --name: 給容器命名
# 0d120b6ccaa8:鏡像ID或者是NAME:TAG
# /bin/bash:放在鏡像名后的是命令吧雹,這里我們希望有個交互式Shell骨杂,因此用的是/bin/bash

# 2.退出容器終端涂身,容器也會停止運(yùn)行
[root@f1ebf6eee2c8 /]# exit

# 3.啟動后臺運(yùn)行的容器
[root@bdc01 ~]# docker run -d --name nginx.latest.container nginx:latest
8eb3a153580b64242ac4fd7141809219cdd21fffae511d6e299f030e8dc91332
# 端口映射雄卷,容器的80端口映射到宿主機(jī)的8080端口,訪問宿主機(jī)的8080端口就可以訪問容器的80端口
docker run -d -p 8080:80 --name nginx.latest.container nginx:latest
# run后面沒有任何參數(shù)的話蛤售,啟動的容器會一直阻塞在前臺
docker run --name nginx.latest.container2 f35646e83998

# 4.列出所有容器
# 列出所有正在運(yùn)行的容器
[root@bdc01 ~]# docker container ls 
# 列出所有容器
[root@bdc01 ~]# docker container ls -a
# 列出所有正在運(yùn)行的容器
[root@bdc01 ~]# docker ps 
# 列出所有容器
[root@bdc01 ~]# docker ps -a
CONTAINER ID  IMAGE         COMMAND      CREATED        STATUS                       PORTS  NAMES
f1ebf6eee2c8  0d120b6ccaa8  "/bin/bash"  5 minutes ago  Exited (127) 4 minutes ago          centos.latest.container
# CONTAINER ID:容器ID丁鹉,自動生成,唯一標(biāo)識
# IMAGE:使用的鏡像
# COMMAND:啟動容器后執(zhí)行的第一個命令
# CREATED:創(chuàng)建時間
# STATUS:運(yùn)行狀態(tài)悴能,Up(運(yùn)行狀態(tài))揣钦、Exit(退出狀態(tài),未運(yùn)行)
# NAMES:容器名稱漠酿,手工指定冯凹,不能重復(fù)

# 5.查看指定容器的詳細(xì)信息
docker container inspect 8eb3a153580b 

# 6.停止一個正在運(yùn)行的容器
docker container stop f1ebf6eee2c8
docker stop f1ebf6eee2c8

# 7.啟動一個未運(yùn)行的容器
docker container start f1ebf6eee2c8
docker start f1ebf6eee2c8
# 啟動并進(jìn)入容器
docker container start -i f1ebf6eee2c8

# 8.重新啟動容器
docker container restart f1ebf6eee2c8
docker restart f1ebf6eee2c8

# 9.進(jìn)入容器內(nèi)部,使用attach進(jìn)入容器內(nèi)部炒嘲,然后exit退出容器后宇姚,容器會停止運(yùn)行
docker container attach f1ebf6eee2c8
docker attach f1ebf6eee2c8
# 兩個客戶端使用attach進(jìn)入同一個容器,那么執(zhí)行的命令會同步

# 10.在容器中執(zhí)行命令
docker container exec f1ebf6eee2c8 ls
docker exec f1ebf6eee2c8 echo "hello"
# 進(jìn)入容器內(nèi)部夫凸,使用此方式進(jìn)入容器內(nèi)部浑劳,然后exit退出容器后,容器不會停止運(yùn)行
docker container exec -it f1ebf6eee2c8 /bin/bash

# 11.刪除容器
# 刪除停止運(yùn)行的容器
docker rm 8eb3a153580b
# -f可以刪除運(yùn)行
docker rm -f 8eb3a153580b
docker container rm 8eb3a153580b
docker container rm -f 8eb3a153580b
# 清理掉所有處于終止?fàn)顟B(tài)的容器
docker container prune
docker container prune -f # 不再需要輸入-y進(jìn)行確認(rèn)
# --rm會在退出容器后刪除容器
[root@bdc01 ~]# docker container run -it --name="centos.latest.container" --rm 0d120b6ccaa8 /bin/bash

5. Docker網(wǎng)絡(luò)映射

# docker自動生成了一塊網(wǎng)卡夭拌,用于宿主機(jī)和容器的訪問魔熏,網(wǎng)段為172.17.0.0
[root@bdc01 ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 0.0.0.0
        inet6 fe80::42:b9ff:fef5:c742  prefixlen 64  scopeid 0x20<link>
        ether 02:42:b9:f5:c7:42  txqueuelen 0  (Ethernet)
        RX packets 168  bytes 12638 (12.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 38  bytes 3146 (3.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 容器啟動后,其IP就在172.17.0網(wǎng)段
# 宿主機(jī)的IP為172.17.0.1
# 第一個啟動的容器的IP為172.17.0.2
# 第二個啟動的容器的IP為172.17.0.3鸽扁,以此類推
# 容器之間網(wǎng)絡(luò)互通

# 使用docker run命令啟動容器的時候蒜绽,可以使用-p選項來配置宿主機(jī)和容器內(nèi)部網(wǎng)絡(luò)的映射
# docker會自動添加一條iptables規(guī)則來實(shí)現(xiàn)端口映射
# 具體的使用方式如下:

# containerPort映射到宿主機(jī)的hostPort,例如8080:80桶现,代表容器的80端口映射到宿主機(jī)的8080端口
-p hostPort:containerPort
 
# containerPort映射到宿主機(jī)的hostPort躲雅,例如10.0.0.11:8080:80,代表容器的80端口映射到10.0.0.11:8080地址
# 10.0.0.11是宿主機(jī)的IP地址巩那,默認(rèn)是0.0.0.0:8080
# 這種情況適用于宿主機(jī)有多個IP地址的情況
-p ip:hostPort:containerPort
 
# containerPort映射到宿主機(jī)的隨機(jī)空閑端口吏夯,例如10.0.0.11::80,代表容器的80端口映射到宿主機(jī)的指定IP的隨機(jī)空閑端口[32769-60999]
-p ip::containerPort

# 然后使用docker ps -a命令可以查看映射到哪個端口了
[root@bdc01 ~]# docker ps -a
CONTAINER ID  IMAGE         COMMAND                  CREATED         STATUS         PORTS                     NAMES
4852dfc9a4e3  f35646e83998  "/docker-entrypoin..."   27 seconds ago  Up 26 seconds  10.0.0.11:32768->80/tcp   nginx4

# 默認(rèn)是映射到TCP協(xié)議端口即横,可以指定映射到UDP端口
-p hostPort:containerPort/udp

# 多個端口的映射可以使用多個-p參數(shù)來實(shí)現(xiàn)
-p 81:80 -p 443:443

# 使用-P(大寫)噪生,也可以做到隨機(jī)映射端口
# -P自動綁定所有對外提供服務(wù)的容器端口,映射的端口將會從宿主機(jī)沒有使用的端口池[32769-60999]中自動選擇
-P
# 示例
docker run -d -P --name="nginx1" f35646e83998

6. 其他基礎(chǔ)管理命令

# 1.查看容器內(nèi)進(jìn)程的運(yùn)行狀況
[root@bdc01 ~]# docker container top 7ca560f1f38f
UID     PID     PPID    C    STIME    TTY  TIME       CMD
root    1814    1798    0    17:14    ?    00:00:00   nginx: master process nginx -g daemon off;
101     1854    1814    0    17:14    ?    00:00:00   nginx: worker process

# 2.查詢?nèi)罩?[root@bdc01 ~]# docker container logs 7ca560f1f38f
10.0.0.1 - - [26/Oct/2020:09:19:40 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36" "-"
10.0.0.1 - - [26/Oct/2020:09:19:41 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://bdc01/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36" "-"
2020/10/26 09:19:41 [error] 27#27: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 10.0.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "bdc01", referrer: "http://bdc01/"

# 相當(dāng)于tail -f的功能东囚,打開日志后在前臺阻塞
docker container logs -f 7ca560f1f38f
# 展示更詳細(xì)的日志
docker container logs -t 7ca560f1f38f
# 執(zhí)定查看最后的幾行
docker container logs --tail 10 7ca560f1f38f
# 這些參數(shù)都可以一起使用
docker container logs -tf --tail 10 7ca560f1f38f

7. Docker Volume卷管理

# 宿主機(jī)的文件拷貝到容器的指定目錄下
docker container cp /root/index.html 7ca560f1f38f:/usr/share/nginx/html/
# 容器的文件拷貝到宿主機(jī)的指定目錄下
docker container cp 7ca560f1f38f:/usr/share/nginx/html/index.html /root/index2.html

# 啟動容器的時候跺嗽,將宿主機(jī)的目錄與容器的目錄做映射
# 這樣無論是在宿主機(jī)修改/root/html目錄下的文件還是在容器中修改/usr/share/nginx/html目錄下的文件
# 其實(shí)都是修改的同一個文件
docker container run -d -p 80:80 -v /root/html:/usr/share/nginx/html --name "n1" f35646e83998
# 容器銷毀后,基本原鏡像所做的修改都會不復(fù)存在,但是宿主機(jī)的文件是不會被刪除的
# 可以使用多個-v桨嫁,例如 -v /root/html:/usr/share/nginx/html -v /root/html2:/usr/share/nginx/html2來做多個映射

# 查看容器的數(shù)據(jù)卷掛載目錄
docker container inspect 8897dfee0712
# 其中會有這樣的信息
"Mounts": [
    {
        "Type": "bind",
        "Source": "/root/html",
        "Destination": "/usr/share/nginx/html",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
],...

# 使用數(shù)據(jù)卷容器
# 首先啟動一個容器植兰,此容器專門用于做數(shù)據(jù)卷的映射
docker run -it --name volume-container -v /root/html:/usr/share/nginx/html -v /root/html2:/usr/share/nginx/html2 0d120b6ccaa8 /bin/bash
# 進(jìn)去容器后,使用Ctrl+p+q退出璃吧,這樣容器不會停止運(yùn)行

# 啟動其他容器楣导,使用上面的數(shù)據(jù)卷容器進(jìn)行數(shù)據(jù)卷的掛載
docker run -d -p 8080:80 --volumes-from volume-container --name nginx8080 f35646e83998
docker run -d -p 8081:80 --volumes-from volume-container --name nginx8081 f35646e83998
# 這兩個容器啟動后,都與volume-container的數(shù)據(jù)卷映射方式一樣
# 在集中管理集群中畜挨,大批量的容器都需要掛載相同的多個數(shù)據(jù)卷時筒繁,可以采用數(shù)據(jù)卷容器進(jìn)行統(tǒng)一管理
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市巴元,隨后出現(xiàn)的幾起案子毡咏,更是在濱河造成了極大的恐慌,老刑警劉巖逮刨,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呕缭,死亡現(xiàn)場離奇詭異,居然都是意外死亡修己,警方通過查閱死者的電腦和手機(jī)恢总,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來箩退,“玉大人离熏,你說我怎么就攤上這事〈骼裕” “怎么了滋戳?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長啥刻。 經(jīng)常有香客問我奸鸯,道長,這世上最難降的妖魔是什么可帽? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任娄涩,我火速辦了婚禮,結(jié)果婚禮上映跟,老公的妹妹穿的比我還像新娘蓄拣。我一直安慰自己,他們只是感情好努隙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布球恤。 她就那樣靜靜地躺著,像睡著了一般荸镊。 火紅的嫁衣襯著肌膚如雪咽斧。 梳的紋絲不亂的頭發(fā)上堪置,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機(jī)與錄音张惹,去河邊找鬼舀锨。 笑死,一個胖子當(dāng)著我的面吹牛宛逗,可吹牛的內(nèi)容都是我干的坎匿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼拧额,長吁一口氣:“原來是場噩夢啊……” “哼碑诉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起侥锦,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎德挣,沒想到半個月后恭垦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡格嗅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年番挺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屯掖。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡玄柏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贴铜,到底是詐尸還是另有隱情粪摘,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布绍坝,位于F島的核電站徘意,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏轩褐。R本人自食惡果不足惜椎咧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望把介。 院中可真熱鬧勤讽,春花似錦、人聲如沸拗踢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秒拔。三九已至莫矗,卻和暖如春飒硅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背作谚。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工三娩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妹懒。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓雀监,卻偏偏與公主長得像,于是被迫代替她去往敵國和親眨唬。 傳聞我的和親對象是個殘疾皇子会前,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355