Docker使用筆記

Docker 屬于 Linux 容器的一種封裝贴铜,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案瀑晒。

Docker 將應(yīng)用程序與該程序的依賴绍坝,打包在一個文件里面。運(yùn)行這個文件苔悦,就會生成一個虛擬容器轩褐。程序在這個虛擬容器里運(yùn)行,就好像在真實的物理機(jī)上運(yùn)行一樣玖详。有了 Docker把介,就不用擔(dān)心環(huán)境問題勤讽。

總體來說,Docker 的接口相當(dāng)簡單拗踢,用戶可以方便地創(chuàng)建和使用容器脚牍,把自己的應(yīng)用放入容器。容器還可以進(jìn)行版本管理巢墅、復(fù)制诸狭、分享、修改君纫,就像管理普通的代碼一樣驯遇。

一、安裝

詳細(xì)安裝過程可參照官網(wǎng)蓄髓。

1.1 若以前有安裝過舊版本叉庐,先移除舊版本:
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
1.2 安裝依賴
$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum-config-manager --enable docker-ce-edge
$ sudo yum-config-manager --enable docker-ce-test
1.3 安裝免費(fèi)版docker

默認(rèn)安裝最新版docker

$ sudo yum install docker-ce
1.4 啟動docker
$ sudo systemctl start docker
1.5 查看docker是否安裝成功
$ sudo docker run hello-world
1.6 加入docker用戶組

Docker 需要用戶具有 sudo 權(quán)限,為了避免每次命令都輸入sudo双吆,可以把用戶加入 Docker 用戶組(官方文檔)眨唬。

$ sudo groupadd docker
$ sudo usermod -aG docker $USER

檢查一下会前,不使用sudo來運(yùn)行docker:

[09:40 sxuan@hulab ~]$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/
1.7 使用Docker 中國官方鏡像加速

通過 Docker 官方鏡像加速好乐,中國區(qū)用戶能夠快速訪問最流行的 Docker 鏡像。該鏡像托管于中國大陸瓦宜,本地用戶現(xiàn)在將會享受到更快的下載速度和更強(qiáng)的穩(wěn)定性蔚万,從而能夠更敏捷地開發(fā)和交付 Docker 化應(yīng)用。
Docker 中國官方鏡像加速可通過 registry.docker-cn.com 訪問临庇。該鏡像庫只包含流行的公有鏡像反璃。私有鏡像仍需要從美國鏡像庫中拉取。

您可以使用以下命令直接從該鏡像加速地址進(jìn)行拉燃俣帷:

$ docker pull registry.docker-cn.com/myname/myrepo:mytag
# 如下例子:
$ docker pull registry.docker-cn.com/library/ubuntu:16.04

當(dāng)然淮蜈,更簡單的方法是更改配置文件,一勞永逸已卷。修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 鍵值:

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
1.8 設(shè)置docker開機(jī)啟動
# systemd
$ sudo systemctl enable docker
# upstart
$ echo manual | sudo tee /etc/init/docker.override
#chkconfig
$ sudo chkconfig docker on

二梧田、使用Docker

2.1 簡單使用

下面,我們通過最簡單的 image 文件"hello world"侧蘸,感受一下 Docker裁眯。

$ docker image pull library/hello-world

上面代碼中,docker image pull是抓取 image 文件的命令讳癌。library/hello-world是 image 文件在倉庫里面的位置穿稳,其中library是 image 文件所在的組,hello-world是 image 文件的名字晌坤。

由于 Docker 官方提供的 image 文件逢艘,都放在library組里面旦袋,所以它的是默認(rèn)組,可以省略埋虹。因此猜憎,上面的命令可以寫成下面這樣。

$ docker image pull hello-world

抓取成功以后搔课,就可以在本機(jī)看到這個 image 文件了胰柑。

docker image ls

現(xiàn)在,運(yùn)行這個 image 文件爬泥。

$ docker container run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

輸出這段提示以后,hello world就會停止運(yùn)行踩官,容器自動終止境输。
值得注意的是docker container run命令是新建容器蔗牡,每運(yùn)行一次,就會新建一個容器辩越。同樣的命令運(yùn)行兩次信粮,就會生成兩個一模一樣的容器文件黔攒。如果希望重復(fù)使用容器,就要使用docker container start命令强缘,它用來啟動已經(jīng)生成、已經(jīng)停止運(yùn)行的容器文件旅掂。

$ docker container start [containerID]

有些容器不會自動終止商虐,因為提供的是服務(wù)。比如称龙,安裝運(yùn)行 Ubuntu 的 image,就可以在命令行體驗 Ubuntu 系統(tǒng)痴柔。

$ docker container run -it ubuntu bash

對于那些不會自動終止的容器疫向,必須使用docker container kill 命令手動終止。

$ docker container kill [containID]

docker container kill命令終止容器運(yùn)行谈火,相當(dāng)于向容器里面的主進(jìn)程發(fā)出 SIGKILL 信號糯耍。而docker container stop命令也是用來終止容器運(yùn)行,相當(dāng)于向容器里面的主進(jìn)程發(fā)出 SIGTERM 信號革为,然后過一段時間再發(fā)出 SIGKILL 信號舵鳞。
這兩個信號的差別是,應(yīng)用程序收到 SIGTERM 信號以后抛虏,可以自行進(jìn)行收尾清理工作套才,但也可以不理會這個信號。如果收到 SIGKILL 信號错忱,就會強(qiáng)行立即終止挂据,那些正在進(jìn)行中的操作會全部丟失。

2.2 容器文件

image 文件生成的容器實例儿普,本身也是一個文件,稱為容器文件个绍。也就是說浪汪,一旦容器生成,就會同時存在兩個文件: image 文件和容器文件广恢。而且關(guān)閉容器并不會刪除容器文件钉迷,只是容器停止運(yùn)行而已。
簡單的理解就是image就是沒有運(yùn)行的container荒椭,container就是運(yùn)行image運(yùn)行生成的容器舰蟆,只有運(yùn)行時才能進(jìn)行一些操作。

# 列出正在運(yùn)行的容器
$ docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUSPORTS               NAMES
# 列出本機(jī)所有容器信卡,包括終止運(yùn)行的容器
$ docker container ls --all
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS           PORTS               NAMES
0e3d2c90f5a4        hello-world         "/hello"            About an hour ago   Exited (0) About anhour ago                       gracious_hermann
a5c267eb9afc        hello-world         "/hello"            2 hours ago         Exited (0) 2 hours ago                             boring_stonebraker

# 查看本機(jī)已有的鏡像
$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              2cb0d9787c4d        7 weeks ago         1.85kB
pkrusche/hap.py     latest              f69ea1624f20        15 months ago       2.16GB

# 刪除鏡像
$ docker rmi [image ID]
# 若出現(xiàn)Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container a5c267eb9afc is using its referenced image 2cb0d9787c4d 類似的報錯傍菇,可加-f參數(shù)強(qiáng)制刪除
$ docker rmi -f [image ID]
2.3 一個簡單的實戰(zhàn)

現(xiàn)在利用一個docker打包好的軟件來分析本地數(shù)據(jù)丢习。這里較為重要的一部就是將數(shù)據(jù)映射到容器中的某個目錄下以方便分析淮悼。

2.3.1 拉取所用到的docker鏡像

利用docker pull命令可以方便的從遠(yuǎn)程倉庫中拉取所需要的軟件鏡像袜腥,這個命令跟git clone有些許相似。

$ docker pull pkrusche/hap.py
2.3.2 運(yùn)行鏡像生成容器

直接使用docker run命令來運(yùn)行鏡像:

$ docker run -it --rm -v `pwd`:/data -v /DataBase/Human/GATK_bundle/b37:/data/b37 f69ea1624f20 /bin/bash
  • -it 容器的 Shell 映射到當(dāng)前的 Shell鲤屡,然后你在本機(jī)窗口輸入的命令福侈,就會傳入容器肪凛。
  • --rm 默認(rèn)情況下,每個容器在退出時翘鸭,它的文件系統(tǒng)也會保存下來戳葵,這樣一方面調(diào)試會方便些,因為你可以通過查看日志等方式來確定最終狀態(tài)档址。另外一方面守伸,你也可以保存容器所產(chǎn)生的數(shù)據(jù)。但是當(dāng)你僅僅需要短暫的運(yùn)行一個容器见芹,并且這些數(shù)據(jù)不需要保存蠢涝,你可能就希望Docker能在容器結(jié)束時自動清理其所產(chǎn)生的數(shù)據(jù)。
  • -v 從主機(jī)掛載單個文件或目錄到容器中
  • /bin/bash為運(yùn)行的容器執(zhí)行的第一個命令
2.3.3 運(yùn)行程序

在使用hap.py程序之前我們需要先配置程序運(yùn)行所需文件:

$ export HGREF=/data/b37/human_g1k_v37_decoy.fasta

接下來就可以進(jìn)行運(yùn)行程序了:

$ /opt/hap.py/bin/hap.py \
     /data/highconf_variation/HG001.highconf_SNP.vcf.gz \
     /data/init_fq/gatk_call/variation_b37/raw_snp/HG001.raw_SNP.vcf.gz \
     -f /data/rawdata/HG001.Hiseq.b37.bed -o HG001
[I] Total VCF records:         3258078
[I] Non-reference VCF records: 3258078
[I] Total VCF records:         50167
[I] Non-reference VCF records: 50167
Benchmarking Summary:
Type Filter  TRUTH.TOTAL  TRUTH.TP  TRUTH.FN  QUERY.TOTAL  QUERY.FP  QUERY.UNK  FP.gt  METRIC.Recall  METRIC.Precision  METRIC.Frac_NA  METRIC.F1_Score  TRUTH.TOTAL.TiTv_ratio  QUERY.TOTAL.TiTv_ratio  TRUTH.TOTAL.het_hom_ratio  QUERY.TOTAL.het_hom_ratio
 SNP    ALL        42825     40024      2801        50140     10116          0    212       0.934594          0.798245               0         0.861055                2.543807                2.391331                   1.567034                   1.646584
 SNP   PASS        42825     40024      2801        50140     10116          0    212       0.934594          0.798245               0         0.861055                2.543807                2.391331                   1.567034                   1.646584

為了更方便以后運(yùn)行程序而不必每次運(yùn)行程序都要再次導(dǎo)入設(shè)置環(huán)境變量,有兩種方法可以保存現(xiàn)有容器的狀態(tài):其一為運(yùn)行鏡像時候不使用--rm命令惕它,下次使用時繼續(xù)使用此容器废登,使用docker start命令;其二是使用commit提交生成新的鏡像堡距,以后每次運(yùn)行新的鏡像生成容器即可。

方法1:

# 第一次使用
$ docker run -it -v `pwd`:/data -v /DataBase/Human/GATK_bundle/b37:/data/b37 f69ea1624f20 /bin/bash
# 配置環(huán)境變量
root@f08af3e1ac90:/# echo "export HGREF=/data/b37/human_g1k_v37_decoy.fasta" >> ~/.bashrc && source ~/.bashrc
# 退出
root@2deb07b46456:/# exit

# 查看container ID
$ docker container ls --all
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS  PORTS               NAMES
f08af3e1ac90        f69ea1624f20        "/bin/bash"         About a minute ago   Exited (0) 28 seconds ago                      focused_kare
# 繼續(xù)使用剛剛的容器
$ docker start -ai f08af3e1ac90
# 進(jìn)入容器后直接運(yùn)行
root@f08af3e1ac90:/# /opt/hap.py/bin/hap.py \
      /data/highconf_variation/HG001.highconf_SNP.vcf.gz \
      /data/init_fq/gatk_call/variation_b37/raw_snp/HG001.raw_SNP.vcf.gz \
      -f /data/rawdata/HG001.Hiseq.b37.bed -o HG001

方法2:

# 第一次使用容器
$ docker run -it -v `pwd`:/data -v /DataBase/Human/GATK_bundle/b37:/data/b37 f69ea1624f20 /bin/bash
# 配置環(huán)境變量
root@f08af3e1ac90:/# echo "export HGREF=/data/b37/human_g1k_v37_decoy.fasta" >> ~/.bashrc && source ~/.bashrc
# 退出
root@f08af3e1ac90:/# exit

# 將容器進(jìn)行commit生成新的鏡像
$ docker commit -m="built env hap.py" --author="shexuan" f08af3e1ac90 hap.py/built_env
# 查看鏡像
[12:08 sxuan@hulab ~/WES]$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hap.py/built_env    latest              fb593adbe750        About an hour ago   2.19GB
pkrusche/hap.py     latest              f69ea1624f20        15 months ago       2.16GB
# 使用新的鏡像生成容器
$ docker run -it --rm -v `pwd`:/data -v /DataBase/Human/GATK_bundle/b37:/data/b37 fb593adbe750 /bin/bash
root@52d0e50f8f0c:/# /opt/hap.py/bin/hap.py \
>      /data/highconf_variation/HG001.highconf_SNP.vcf.gz \
>      /data/init_fq/gatk_call/variation_b37/raw_snp/HG001.raw_SNP.vcf.gz \
>      -f /data/rawdata/HG001.Hiseq.b37.bed -o HG001

可以看到兩種方法是都可以正常運(yùn)行的。
docker commit為使用一個配置發(fā)生改變的的容器生成新的鏡像疚俱,用法如下:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

  • -a, --author= 添加作者信息
  • -c, --change=[] 使用Dockerfile指令來創(chuàng)建鏡像
  • -m, --message= 提交時的說明文字
  • -p, --pause=true 在commit時缩多,將容器暫停

一般來說是不推薦直接使用commit來生成新的鏡像的衬吆,更推薦使用更改dockerfile來生成新的鏡像绳泉。

三、 一些其他的常用命令

docker ps [OPTIONS] 列出容器冒嫡。

  • -a :顯示所有的容器,包括未運(yùn)行的
  • -f:根據(jù)條件過濾顯示的內(nèi)容
  • --format :指定返回值的模板文件
  • -l :顯示最近創(chuàng)建的容器
  • -n :列出最近創(chuàng)建的n個容器
  • --no-trunc :不截斷輸出
  • -q :靜默模式方咆,只顯示容器編號
  • -s :顯示總的文件大小

docker top [OPTIONS] CONTAINER [ps OPTIONS] 查看容器中運(yùn)行的進(jìn)程信息瓣赂,支持 ps 命令參數(shù)片拍。
容器運(yùn)行時不一定有/bin/bash終端來交互執(zhí)行top命令,而且容器還不一定有top命令苫纤,可以使用docker top來實現(xiàn)查看container中正在運(yùn)行的進(jìn)程方面。

docker logs [OPTIONS] CONTAINER 獲取容器的日志色徘。

  • -f : 跟蹤日志輸出
  • --since :顯示某個開始時間的所有日志
  • -t : 顯示時間戳
  • --tail :僅列出最新N條容器日志
# 例子
$ docker logs 52d0e50f8f0c
root@52d0e50f8f0c:/# /opt/hap.py/bin/hap.py \
>      /data/highconf_variation/HG001.highconf_SNP.vcf.gz \
>      /data/init_fq/gatk_call/variation_b37/raw_snp/HG001.raw_SNP.vcf.gz \
>      -f /data/rawdata/HG001.Hiseq.b37.bed -o HG001
[I] Total VCF records:         3258078
[I] Non-reference VCF records: 3258078ll/variation_b37/raw_snp/HG001.raw_SNP.vcf.gz
[I] Total VCF records:         50167
[I] Non-reference VCF records: 50167
Benchmarking Summary:
Type Filter  TRUTH.TOTAL  TRUTH.TP  TRUTH.FN  QUERY.TOTAL  QUERY.FP  QUERY.UNK  FP.gt  METRIC.Recall  METRIC.Precision  METRIC.Frac_NA  METRIC.F1_Score  TRUTH.TOTAL.TiTv_ratio  QUERY.TOTAL.TiTv_ratio  TRUTH.TOTAL.het_hom_ratio  QUERY.TOTAL.het_hom_ratio
 SNP    ALL        42825     40024      2801        50140     10116          0    212       0.934594          0.798245               0         0.861055                2.543807                2.391331                   1.567034                   1.646584
 SNP   PASS        42825     40024      2801        50140     10116          0    212       0.934594          0.798245               0         0.861055                2.543807                2.391331                   1.567034                   1.646584

docker cp [OPTIONS] CONTAINER:SRC_PATH [DEST_PATH] 用于容器與主機(jī)之間的數(shù)據(jù)拷貝褂策。

  • -L :保持源目標(biāo)中的鏈接
# 將主機(jī)/www/runoob目錄拷貝到容器96f7f14e99ab的/www目錄下
$ docker cp /www/runoob 96f7f14e99ab:/www/
#將主機(jī)/www/runoob目錄拷貝到容器96f7f14e99ab中斤寂,目錄重命名為www
$ docker cp /www/runoob 96f7f14e99ab:/www
# 將容器96f7f14e99ab的/www目錄拷貝到主機(jī)的/tmp目錄中
docker cp  96f7f14e99ab:/www /tmp/

docker history [OPTIONS] IMAGE 查看指定鏡像的創(chuàng)建歷史。

  • -H :以可讀的格式打印鏡像大小和日期罗侯,默認(rèn)為true
  • --no-trunc :顯示完整的提交記錄
  • -q :僅列出提交記錄ID
$ docker history -H hap.py/built_env
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
fb593adbe750        2 hours ago         /bin/bash                                       36.4MB              built env hap.py
f69ea1624f20        15 months ago       /bin/sh -c rm -rf /opt/hap.py-source            0B
<missing>           15 months ago       /bin/sh -c #(nop) WORKDIR /                     0B
<missing>           15 months ago       /bin/sh -c bin/test_haplotypes                  0B
<missing>           15 months ago       /bin/sh -c #(nop) WORKDIR /opt/hap.py           0B
<missing>           15 months ago       /bin/sh -c python install.py /opt/hap.py --w…   370MB
<missing>           15 months ago       /bin/sh -c #(nop) WORKDIR /opt/hap.py-source    0B
<missing>           15 months ago       /bin/sh -c #(nop) ENV PATH=/usr/local/sbin:/…   0B
<missing>           15 months ago       /bin/sh -c wget http://archive.apache.org/di…   36.6MB
<missing>           15 months ago       /bin/sh -c #(nop) WORKDIR /opt                  0B
<missing>           15 months ago       /bin/sh -c #(nop) WORKDIR /opt/hap.py-data      0B
<missing>           15 months ago       /bin/sh -c mkdir -p /opt/hap.py-data            0B
<missing>           15 months ago       /bin/sh -c #(nop) COPY dir:9d3c8f8028e03cbcc…   453MB
<missing>           15 months ago       /bin/sh -c mkdir -p /opt/hap.py-source          0B
<missing>           15 months ago       /bin/sh -c echo oracle-java8-installer share…   387MB
<missing>           15 months ago       /bin/sh -c pip install bx-python                11.1MB
<missing>           15 months ago       /bin/sh -c apt-get clean -y                     0B
<missing>           15 months ago       /bin/sh -c apt-get install software-properti…   51.7MB
<missing>           15 months ago       /bin/sh -c apt-get install python2.7 python2…   312MB
<missing>           15 months ago       /bin/sh -c apt-get install git bzip2 wget -y    32.6MB
<missing>           15 months ago       /bin/sh -c apt-get install build-essential z…   266MB
<missing>           15 months ago       /bin/sh -c apt-get update && apt-get upgrade…   111MB
<missing>           23 months ago       /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>           23 months ago       /bin/sh -c mkdir -p /run/systemd && echo 'do…   7B
<missing>           23 months ago       /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$…   1.9kB
<missing>           23 months ago       /bin/sh -c rm -rf /var/lib/apt/lists/*          0B
<missing>           23 months ago       /bin/sh -c set -xe   && echo '#!/bin/sh' > /…   745B
<missing>           23 months ago       /bin/sh -c #(nop) ADD file:cd937b840fff16e04…   127MB

參考:
Docker 命令大全
Docker 入門教程
官方文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诊县,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子避除,更是在濱河造成了極大的恐慌,老刑警劉巖凉逛,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件群井,死亡現(xiàn)場離奇詭異蝌借,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)自晰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門稍坯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞧哟,“玉大人,你說我怎么就攤上這事咧党≡赏觯” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵蛙埂,是天一觀的道長绣的。 經(jīng)常有香客問我欲账,道長,這世上最難降的妖魔是什么盼理? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上臊诊,老公的妹妹穿的比我還像新娘斜脂。我一直安慰自己帚戳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布偏友。 她就那樣靜靜地躺著对供,像睡著了一般产场。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窿冯,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天确徙,我揣著相機(jī)與錄音米愿,去河邊找鬼。 笑死较鼓,一個胖子當(dāng)著我的面吹牛违柏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播禽篱,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼躺率,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了慎框?” 一聲冷哼從身側(cè)響起后添,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤遇西,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后洲敢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梧税,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡第队,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了凳谦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡家凯,死狀恐怖如失,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掂之,我是刑警寧澤脆丁,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布槽卫,位于F島的核電站,受9級特大地震影響震蒋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翔横,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望效览。 院中可真熱鬧,春花似錦哆键、人聲如沸瘦锹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颂碘。三九已至椅挣,卻和暖如春鼠证,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背量九。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工娩鹉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人戚宦。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓受楼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親猴贰。 傳聞我的和親對象是個殘疾皇子河狐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

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