docker 容器资昧,鏡像居夹,compose相關

鏡像

獲取鏡像

docker pull 拉取鏡像

格式: docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標簽]

  1. Docker Registry 地址:<域名/IP>[:端口號], 默認地址為Docker Hub
  2. 倉庫名:用戶名/軟件名,在Docker Hub上管行,如果不寫用戶名厨埋,則默認為library(官方鏡像)

docker run 以鏡像啟動并運行一個容器

格式:docker run [選項] 鏡像標識 [啟動后要執(zhí)行命令] [參數...]

eg: docker run -it --rm -p 4000:80 ubuntu:18.04 bash
eg: docker run -it --rm -p 4000:80 ubuntu:18.04 ls
eg: docker run -d --rm -p 4000:80 ubuntu:18.04 ls

  1. 選項:

    • -it:這是兩個參數,-t 選項讓Docker分配一個偽終端(pseudo-tty)并綁定到容器的標準輸入上捐顷, -i 則讓容器的標準輸入保持打開荡陷。我們這里打算進入 bash 執(zhí)行一些命令并查看返回結果雨效,因此我們需要交互式終端。最后通過exit退出废赞,如果沒有這個參數徽龟,則CRTL+C退出
    • --rm:容器退出后隨之將其刪除。
    • -d:后臺守護運行
    • -p:將容器內的端口與主機綁定唉地,將容器的80端口綁定到主機4000上
    • 鏡像標識:可以是鏡像的名字+版本號据悔,也可以是鏡像的ID,如果沒有版本號耘沼,則默認是:latest版本
  2. 如果是鏡像的名字屠尊,并且本地沒有,則會默認先執(zhí)行docker pull將鏡像下載再啟動耕拷。

鏡像查詢

列出鏡像

docker images或者docker image ls

列表中只會顯示頂層鏡像讼昆,一般來說這些信息就夠了

$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
python              2.7-slim            99079b24ed51        12 days ago         120MB
node                10.15.1             8fc2110c6978        2 weeks ago         897MB
<none>              <none>              7b25fb2216b1        2 days ago          1.08GB
nginx               latest              f09fe80eb0e7        2 weeks ago         109MB

倉庫名標簽骚烧、鏡像ID浸赫、創(chuàng)建時間鏡像體積

列表上鏡像體積總和并非所有鏡像實際硬盤消耗空間。因為docker鏡像是多層存儲赃绊,可以繼承和復用既峡,所以不同鏡像可能使用相同的基礎鏡像,也就是共同層碧查。

查看鏡像占用空間

docker system df

$ docker system df

TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              9                   2                   1.895GB             1.663GB (87%)
Containers          2                   0                   2B                  2B (100%)
Local Volumes       0                   0                   0B                  0B
Build Cache         0                   0                   0B                  0B

虛懸鏡像(dangling image)

一個特殊的鏡像运敢,這個鏡像既沒有倉庫名,也沒有標簽忠售,均為 <none>传惠。

上面列表中的:

<none>              <none>              7b25fb2216b1        2 days ago          1.08GB

這個鏡像原本是有鏡像名和標簽,出現這種情況的原因:

  1. 隨鏡像維護稻扬,發(fā)布新版本后卦方,重新docker pull時,這個鏡像名被轉移到新下載的鏡像上泰佳,舊的鏡像名稱則被取消
  2. docker build時盼砍,由于新舊鏡像同名,舊鏡像的名稱則被取消了

專門過濾查詢

docker images -f dangling=true

$ docker images -f dangling=true

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              7b25fb2216b1        2 days ago          1.08GB

一般來說逝她,虛懸鏡像已經失去了存在的價值浇坐,是可以隨意刪除的,可以用docker image prune刪除黔宛。

中間層鏡像

默認的docker image ls或者docker images列表中只會顯示頂層鏡像近刘,如果希望顯示包括中間層鏡像在內的所有鏡像的話,需要加 -a 參數。

$ docker images -a

這樣會看到很多無標簽的鏡像跌宛,與之前的虛懸鏡像不同酗宋,這些無標簽的鏡像很多都是中間層鏡像,是其它鏡像所依賴的鏡像疆拘。這些無標簽鏡像不應該刪除蜕猫,否則會導致上層鏡像因為依賴丟失而出錯

過濾查詢鏡像

docker images [參數或者條件]

  1. 根據倉庫名列出鏡像
$ docker images ubuntu
  1. 列出特定的某個鏡像,也就是說指定倉庫名和標簽
$ docker image ls ubuntu:18.04
  1. 過濾器參數 --filter或者-f
    • 查詢虛懸鏡像: -f dangling=true
    • 查詢在某個鏡像建立之后的鏡像: -f since=ubuntu:18.04
    • 之前: -f before=ubuntu:18.04
    • 如果鏡像構建時哎迄,定義了LABEL回右,還可以通過LABEL來過濾: label=com.example.version=0.1

輸出格式

  1. 只輸出鏡像ID
$ docker images -q

5f515359c7f8
05a60462f8ba
fe9198c04d62
  1. 自定義輸出
# 包含鏡像ID和倉庫名
$ docker image ls --format "{{.ID}}: {{.Repository}}"

05a60462f8ba: nginx
00285df0df87: <none>
f753707788c5: ubuntu
f753707788c5: ubuntu
1e0c3dd64ccd: ubuntu

# 以表格等距顯示,并且有標題行漱挚,和默認一樣翔烁,不過自己定義列:
$ docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

IMAGE ID            REPOSITORY          TAG
05a60462f8ba        nginx               latest
00285df0df87        <none>              <none>
f753707788c5        ubuntu              18.04
f753707788c5        ubuntu              latest

刪除本地鏡像

docker image rm或者docker rmi

格式:docker image rm [選項] <鏡像標識1> [<鏡像標識2> ...]

鏡像標識: 鏡像ID,倉庫名:標簽旨涝,鏡像摘要(太麻煩了蹬屹,這個不常用)

刪除行為

  1. Untagged 刪除當前指向的標簽,因為同一個鏡像有多個標簽白华,當刪除所指定的標簽后慨默,可能別的標簽指向了這個鏡像,這是不會刪除
  2. Deleted 真正刪除

組合批量刪除

# 刪除倉庫名為node的所有標簽鏡像
$ docker image rm $(docker image ls -q node)

# 刪除創(chuàng)建ubuntu:18.04之前的所有
$ docker image rm $(docker image ls -q -f before=ubuntu:18.04)

鏡像保存

類似于git commit弧腥,不過一般不會使用厦取,而是用寫Dockerfile的形式生成。因為通過commit生成的管搪,會把每一層的操作都記錄下來虾攻,包括一些不必要的操作,最后可能會導致鏡像臃腫更鲁。

格式:docker commit [選項] <容器ID或者容器名> [倉庫名[:標簽]]

eg: docker commit --auhtor "XXX@xxx.com" --message "修改了什么" server nginx:test

用Dockerfile定制鏡像

Dockerfile 是一個文本文件霎箍,其內包含了一條條的指令(Instruction),每一條指令構建一層岁经,因此每一條指令的內容朋沮,就是描述該層應當如何構建。

  1. 在一個空白目錄中缀壤,建立一個文本文件,命名為Dockerfile
  2. Dockerfile內容為:
FROM nginx
RUN echo '<h1>hello world!</h1>' > /usr/share/nginx/html/index.html
  1. 構建鏡像

格式:docker build [選項] <上下文路徑或者URL或者tar壓縮包>

eg: docker build -t nginx:test1 .

以當前目錄為上下文構建名為nginx:test1的鏡像

eg: docker build https://github.com/twang2218/gitlab-ce-zh.git#:11.1

這行命令指定了構建所需的 Git repo纠亚,并且指定默認的 master 分支塘慕,構建目錄為 /11.1/,然后 Docker 就會自己去 git clone 這個項目蒂胞、切換到指定分支图呢、并進入到指定目錄后開始構建。

eg: docker build http://server/context.tar.gz

如果所給出的 URL 不是個 Git repo,而是個 tar 壓縮包蛤织,那么 Docker 引擎會下載這個包赴叹,并自動解壓縮,以其作為上下文指蚜,開始構建乞巧。

  • 上下文: 構建鏡像時的基礎目錄,所有的構建所需文件都不能在這個上下文目錄之外摊鸡,在構建時會將上下文中的所有文件打包(除了.dockerignore中忽略的)绽媒,同時在Dockerfile中的命令的默認相對路徑會以這個上下文路徑為基礎,當然也不能超出這個目錄

  • 默認讀取的是當前執(zhí)行命令的路徑下名為Dockerfile的文件免猾,也可以手動指定-f ../node.Dockerfile

容器

容器是獨立運行的一個或一組應用是辕,以及它們的運行態(tài)環(huán)境。

容器啟動

新建并啟動

docker run命令猎提,在獲取鏡像里面有获三,就不單說了

啟動時的流程:

  1. 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
  2. 利用鏡像創(chuàng)建并啟動一個容器
  3. 分配一個文件系統(tǒng)锨苏,并在只讀的鏡像層外面掛載一層可讀寫層
  4. 從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去
  5. 從地址池配置一個 ip 地址給容器
  6. 執(zhí)行用戶指定的應用程序
  7. 執(zhí)行完畢后容器被終止

啟動已經終止的容器

格式:docker container start [選項] 容器標識1 [容器標識2...]

守護態(tài)運行

后臺運行

增加參數-d

eg: docker run -d nginx

使用了-d命令后疙教,容器會在后臺運行并不會把輸出的結果 (STDOUT) 打印到宿主機上面(輸出結果可以用docker logs查看)。

docker container logs [容器ID或者容器名]

查看容器信息

docker container ls

守護態(tài)運行

容器是否會一直運行蚓炬,與docker run指定的命令有關松逊,和-d無關

eg:

# 不會一直運行的
$ docker run -d ubuntu:18.04 ls

b64f8e71882d26cffa34453284b40f73cbdc66054cd8a0ba79cb73092dc76726

$ docker logs b64f8e71882d26cffa34453284b40f73cbdc66054cd8a0ba79cb73092dc76726

bin
boot
dev
etc
...

# node index.js 是啟一個服務,所以會保持運行在后臺肯夏,如果沒有-d就是保持運行在前臺
$ docker run -d node node index.js

終止容器

除了在容器中關閉運行的應用來關閉容器外经宏,也可以使用docker container stop來終止,用戶通過 exit 命令或 Ctrl+d 來退出終端時驯击,所創(chuàng)建的容器立刻終止烁兰。

格式:docker container stop 容器標識

終止狀態(tài)的容器可以用 docker container ls -a 命令看到

重新啟動終止態(tài)容器

docker container start

啟動處于終止狀態(tài)的容器

重啟容器

docker container restart

會將一個運行態(tài)的容器終止,然后再重新啟動它徊都。

進入容器

在使用 -d 參數時沪斟,容器啟動后會進入后臺。

某些時候需要進入容器進行操作暇矫,包括使用docker attach命令或docker exec命令主之,推薦使用 docker exec 命令

因為在attach中,使用exit會導致容器停止李根,而exec不會

$ docker run -dit ubuntu

39ee1ddf67b9819fca8bbe71e15a131a6f4df18efabd229d199dabc744ce5be5

$ docker container ls

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
39ee1ddf67b9        ubuntu:18.04        "/bin/bash"         36 seconds ago      Up 35 seconds                           elegant_lumiere      

# 沒有-t時槽奕,沒有分配偽終端,但是命令執(zhí)行結果任然可以返回
$ docker exec -i 39ee1ddf67b9 bash

$ ls

bin
boot
dev
...

# 分配了偽終端
$ docker exec -it 39ee1ddf67b9 bash

root@39ee1ddf67b9:/#

容器的導入和導出

導出容器

導出容器快照

docker export

eg:

$ docker container ls -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES
7691a814370e        ubuntu:18.04        "/bin/bash"         36 hours ago        Exited (0) 21 hours ago                       test

$ docker export 7691a814370e > ubuntu.tar

導入容器

從容器快照中導入為鏡像

docker import

eg:

$ cat ubuntu.tar | docker import - test/ubuntu:test1
$ docker image ls

REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
test/ubuntu         test1               9d37a6082e97        About a minute ago   171.3 MB

此外房轿,也可以通過指定 URL 或者某個目錄來導入

docker import http://example.com/exampleimage.tgz example/imagerepo

用戶既可以使用docker load來導入鏡像存儲文件到本地鏡像庫粤攒,也可以使用docker import來導入一個容器快照到本地鏡像庫所森。這兩者的區(qū)別在于容器快照文件將丟棄所有的歷史記錄和元數據信息(即僅保存容器當時的快照狀態(tài)),而鏡像存儲文件將保存完整記錄夯接,體積也要大焕济。此外,從容器快照文件導入時可以重新指定標簽等元數據信息盔几。

刪除容器

刪除終止狀態(tài)的容器

docker container rm

$ docker container rm test
test

如果需要刪除運行中的容器晴弃,需要加一個-f的參數

清理所有處于終止狀態(tài)的容器

docker container prune

容器間通信

新建網絡

$ docker network create -d bridge web

a0ff52c9783cf21da40c2c62ed81765d165658e591b04f7e1c139fe689f4fe9e

$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
a0ff52c9783c        web                 bridge              local

創(chuàng)建一個名為web的網絡

-d指定網絡類型,有bridgeoverlay问欠。其中overlay用于Swarm mode

將容器連接到網絡上

運行一個容器并連接到新建的網絡上

$ docker run -it --rm --name node1 --network web node sh

再開一個新終端

$ docker run -it --rm --name node2 --network web node sh

再開一個終端

$ docker container ls

CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
f2b50d6261a7        node                "node"              26 seconds ago       Up 25 seconds                           node2
da2b12415ff8        node                "node"              About a minute ago   Up About a minute                       node1

連接測試

在node1中

$ ping node2

PING node2 (172.25.0.3) 56(84) bytes of data.
64 bytes from node2.web (172.25.0.3): icmp_seq=1 ttl=64 time=0.148 ms
64 bytes from node2.web (172.25.0.3): icmp_seq=2 ttl=64 time=0.168 ms

在node2中

$ ping node1

PING node1 (172.25.0.2) 56(84) bytes of data.
64 bytes from node1.web (172.25.0.2): icmp_seq=1 ttl=64 time=0.199 ms
64 bytes from node1.web (172.25.0.2): icmp_seq=2 ttl=64 time=0.174 ms

Docker Compose

通過一個單獨的 docker-compose.yml 模板文件(YAML 格式)來定義一組相關聯的應用容器為一個項目(project)

Compose 中有兩個重要的概念:

  1. 服務 (service):一個應用的容器肝匆,實際上可以包括若干運行相同鏡像的容器實例。

  2. 項目 (project):由一組關聯的應用容器組成的一個完整業(yè)務單元顺献,在 docker-compose.yml 文件中定義旗国。

Compose 的默認管理對象是項目,通過子命令對項目中的一組容器進行便捷地生命周期管理注整。

基礎使用

web應用

新建文件夾能曾,在其中創(chuàng)建server.js

const http = require('http')

const app = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/html;charset=utf-8' })
    console.log(`<h1>【${req.method}】: ${req.url}</h1>`)
    const resText = `<h1>【${req.method}】: ${req.url}</h1>`
    res.end(resText)
})
app.listen(4000)

Dockerfile

FROM node

ADD . /web

WORKDIR /web

RUN npm config set registry http://registry.npm.taobao.org/ \
    && npm install

CMD ["node", "./server.js"]

docker-compose.yml

version: "3"

services:
    web:
        container_name: web
        build:
            context: ./
            dockerfile: Dockerfile
        port:
            - "4001:4000"

運行compose

$ docker-compose up

Compose 命令

命令格式

$ docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]

命令選項

  1. -f, --file指定使用的Compose模板文件,默認為當前目錄的docker-compose.yml肿轨,可以多次指定

  2. -p, --project-name指定項目別名寿冕,默認將使用所在目錄名稱作為項目名

  3. --x-networking使用Docker的可拔插網絡后端特性

  4. --x-network-driver指定網絡后端的驅動,默認為bridge

  5. --verbose輸出更多調試信息

  6. -v, --version打印版本并退出

相關命令使用

build

格式:docker-compose build [options] [SERVICE...]

構建(重新構建)項目中的服務容器椒袍。

服務容器一旦構建后驼唱,將會帶上一個標記名

可以隨時在項目目錄下運行 docker-compose build 來重新構建服務。

選項:

  1. --force-rm 刪除構建過程中的臨時容器

  2. --no-cache 構建鏡像過程中不使用cache(會使構建過程時間變長)

  3. --pull 始終嘗試通過pull來獲取更新版本的鏡像

config

驗證 Compose 文件格式是否正確驹暑,若正確則顯示配置玫恳,若格式錯誤顯示錯誤原因。

down

此命令將會停止 up 命令所啟動的容器优俘,并移除網絡

exec

進入指定的容器京办。

images

列出 Compose 文件中包含的鏡像。

kill

格式:docker-compose kill [options] [SERVICE...]

logs

格式:docker-compose logs [options] [SERVICE...]

查看服務容器的輸出帆焕。默認情況下惭婿,docker-compose 將對不同的服務輸出使用不同的顏色來區(qū)分∫侗ⅲ可以通過--no-color來關閉顏色财饥。

pause

格式:docker-compose pause [SERVICE...]

暫停一個服務容器。

ps

格式:docker-compose ps [options] [SERVICE...]

列出項目中目前的所有容器折晦。

選項:

  1. -q只打印容器的 ID 信息佑力。

pull

格式:docker-compose pull [options] [SERVICE...]

拉取服務依賴的鏡像

選項:

  1. --ignore-pull-failures忽略拉取鏡像過程中的錯誤。

push

推送服務依賴的鏡像到 Docker 鏡像倉庫筋遭。

restart

格式:docker-compose restart [options] [SERVICE...]

重啟項目中的服務

選項:

  1. -t, --timeout指定重啟前停止容器的超時(默認為10秒)

rm

格式:docker-compose rm [options] [SERVICE...]

刪除所有(停止狀態(tài)的)服務容器。推薦先執(zhí)行 docker-compose stop 命令來停止容器。

選項:

  1. -f, --force強制直接刪除漓滔,包括非停止狀態(tài)的容器编饺。一般盡量不要使用該選項。
  2. -v刪除容器所掛載的數據卷

run

格式:docker-compose run [options] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]

在指定服務上執(zhí)行一個命令响驴。

eg:

$ docker-compose run ubuntu ping www.baidu.com

默認情況下透且,如果存在關聯,則所有關聯的服務將會自動被啟動豁鲤,除非這些服務已經在運行中秽誊。

如果不希望自動啟動關聯的容器,可以使用 --no-deps 選項,將不會啟動 web 容器所關聯的其它容器琳骡。

$ docker-compose run --no-deps web python manage.py shell

該命令類似啟動容器后運行指定的命令锅论,相關卷、鏈接等等都將會按照配置自動創(chuàng)建楣号。

與啟動容器后運行指定的命令不同點:

  1. 給定命令將會覆蓋原有的自動運行命令最易;

  2. 不會自動創(chuàng)建端口,以避免沖突蜈七。

選項:

  1. -d后臺運行容器

  2. --name為容器起一個別名

  3. --entrypoint覆蓋默認的容器啟動指令(CMD)

  4. -e KEY=VAL設置環(huán)境變量值般堆,可多次使用選項設置多個環(huán)境

  5. -u, --user="" 指定運行容器的用戶名或者uid

  6. --no-deps不自動啟動關聯的服務容器

  7. --rm運行命令后自動刪除容器镀琉,-d模式下忽略

  8. -p, --publish=[]映射容器端口到本地主機

  9. --service-ports配置服務端口并映射到本地主機

scale

格式:docker-compose scale [options] [SERVICE=NUM...]

設置指定服務運行的容器個數。

通過 service=num 的參數來設置數量嬉荆。

eg:

$ docker-compose scale web=3 db=2

將啟動 3 個容器運行 web 服務,2 個容器運行 db 服務酷含。

一般的鄙早,當指定數目多于該服務當前實際運行容器,將新創(chuàng)建并啟動容器第美;反之蝶锋,將停止容器。

選項:

  1. -t, --timeout 停止容器時候的超時(默認10秒)

start

格式:docker-compose start [SERVICE...]

啟動已經存在的服務容器什往。

stop

格式:docker-compose stop [options] [SERVICE...]

停止已經處于運行狀態(tài)的容器扳缕,但不刪除它。通過 docker-compose start 可以再次啟動這些容器别威。

選項:

  1. -t同上

top

查看各個服務容器內運行的進程

unpause

格式:docker-compose unpause [SERVICE...]

恢復處于暫停狀態(tài)中的服務躯舔。

up

格式:docker-compose up [options] [SERVICE...]

該命令十分強大,它將嘗試自動完成包括構建鏡像省古,(重新)創(chuàng)建服務粥庄,啟動服務,并關聯服務相關容器的一系列操作豺妓。

鏈接的服務都將會被自動啟動惜互,除非已經處于運行狀態(tài)。

可以說训堆,大部分時候都可以直接通過該命令來啟動一個項目。

默認情況膘流,docker-compose up啟動的容器都在前臺,控制臺將會同時打印所有容器的輸出信息鲁沥,可以很方便進行調試呼股。

當通過Ctrl-C停止命令時,所有容器將會停止彭谁。

如果使用docker-compose up -d,將會在后臺啟動并運行所有的容器马靠。一般推薦生產環(huán)境下使用該選項。

默認情況蔼两,如果服務容器已經存在甩鳄,docker-compose up將會嘗試停止容器额划,然后重新創(chuàng)建(保持使用volumes-from掛載的卷)妙啃,以保證新啟動的服務匹配docker-compose.yml文件的最新內容俊戳。如果用戶不希望容器被停止并重新創(chuàng)建,可以使用docker-compose up --no-recreate抑胎。這樣將只會啟動處于停止狀態(tài)的容器,而忽略已經運行的服務铭拧。如果用戶只想重新部署某個服務,可以使用docker-compose up --no-deps -d <SERVICE_NAME>來重新創(chuàng)建服務并后臺停止舊服務搀菩,啟動新服務破托,并不會影響到其所依賴的服務肪跋。

選項:

  1. -d在后臺運行服務容器

  2. --no-color不使用顏色來區(qū)分不同的服務的控制臺輸出

  3. --no-deps不啟動服務所鏈接的容器

  4. --force-recreate強制重新創(chuàng)建容器土砂,不能與--no-recreate同時使用

  5. --no-recreate如果容器已經存在谜洽,則不重新創(chuàng)建易桃,不能與--force-recreate同時使用

  6. --no-build不自動構建缺失的服務鏡像

  7. -t, --timeout 同上

version

格式:docker-compose version

打印版本信息

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子贸宏,更是在濱河造成了極大的恐慌,老刑警劉巖吭练,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異签赃,居然都是意外死亡,警方通過查閱死者的電腦和手機分尸,發(fā)現死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門锦聊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人箩绍,你說我怎么就攤上這事孔庭。” “怎么了材蛛?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵圆到,是天一觀的道長卑吭。 經常有香客問我,道長豆赏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任己单,我火速辦了婚禮耙饰,結果婚禮上,老公的妹妹穿的比我還像新娘苟跪。我一直安慰自己蔓涧,他們只是感情好笋额,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布兄猩。 她就那樣靜靜地躺著,像睡著了一般枢冤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上讶迁,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天核蘸,我揣著相機與錄音,去河邊找鬼祟峦。 笑死,一個胖子當著我的面吹牛搀愧,可吹牛的內容都是我干的疆偿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼迅箩,長吁一口氣:“原來是場噩夢啊……” “哼处铛!你這毒婦竟也來了撤蟆?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤龄砰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后换棚,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡娘汞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衷蜓。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡无虚,死狀恐怖友题,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情度宦,我是刑警寧澤告匠,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站划鸽,受9級特大地震影響行贪,放射性物質發(fā)生泄漏漾稀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一尸折、第九天 我趴在偏房一處隱蔽的房頂上張望殷蛇。 院中可真熱鬧,春花似錦亮航、人聲如沸匀们。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至祖灰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恨统,已是汗流浹背三妈。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工沈跨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饿凛。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像涧窒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子硬鞍,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內容