02-Docker

一、Docker架构

Docker架构.png

Docker服务中各个角色

  • Client:客户端,操作Docker服务器的客户端(命令行 或 界面)
  • DOCKER_HOST:Docker主机,安装Docker服务的主机
  • Docker_Daemon:后台进程,运行在Docker服务器的后台进程
  • Containers:容器,在Docker服务器中容器(一个容器一般是一个应用实例,容器间相互隔离)
  • Images:镜像、映射、程序包,Image是只读模板,其中包含创建Docker容器的说明。容器是由Image运行而来,Image固定不变
  • Registries:仓库,存储Docker Image的地方。官方远程仓库

二、Docker隔离原理

namespace 6项隔离(资源隔离)
image.png

cgroups资源限制(资源限制)

  • 资源限制:限制任务使用的资源总额,并在超过这个 配额 时发出提示
  • 优先级分配:分配 CPU 时间片数量及磁盘IO贷款大小、控制任务运行的优先级
  • 资源统计:统计系统资源使用量,如 CPU 使用时长、内存用量
  • 任务控制:对任务执行挂起、恢复等操作


    image.png

三、Docker安装

1、移除旧版本

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2、设置 docker yum源

sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3、安装最新docker engine

sudo yum install docker-ce docker-ce-cli containerd.io

4、查看docker版本

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

5、安装指定版本docker

sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

eg:
sudo yum install docker-ce-3:19.03.9-3.el7.x86_64 docker-ce-cli-3:19.03.9-3.el7.x86_64 containerd.io

6、启动docker

sudo systemctl start docker

7、设置开机启动

sudo systemctl enable docker

8、设置镜像加速(阿里云)

  • 登录阿里云,搜索 镜像服务
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://knk5i905.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

四、docker命令

命令 作用
attach 绑定到运行中容器的标准输入、输出,以及错误流(这样似乎也能进入容器内容,但是一定小心,他们操作的就是控制台,控制台的退出命令会生效,比如:redis,Nginx)
build 从一个 Dockerfile 文件构建镜像
commit 把容器的改变提交创建一个新的镜像
cp 容器和宿主机文件系统 复制文件 / 文件夹
create 创建新容器,但并不启动(与docker run 的区别)需要手动启动。start / stop
diff 检测容器里文件系统结构的更改。(A:添加文件或目录;D:删除文件或者目录;C:更改文件或者目录)
events 获取服务器的实时事件
exec 进入正在运行的容器内部命令
export 导出容器的文件系统为一个 tar 文件。commit是直接提交成为一个镜像,export是导出成文件方便传输
history 显示镜像的历史
images 列出所有镜像
import 导入 tar 的内容创建一个镜像,再导入进来的镜像直接启动不了容器。需要使用 /docker-entrypoint.sh nginx -g 'daemon ow;' 启动。docker ps --no-trunc 看下之前的完整启动命令再用他
info 显示系统信息
inspect 获取 docker 对象的底层信息
kill 杀死一个或者多个容器
load 从 tar 文件加载镜像
login 登录 Docker Registry
logout 退出 Docker Registry
logs 获取容器日志;容器以前在前台控制台能输出的所有内容,都可以看到
pause 暂停一个或者多个容器
port 列出容器的端口映射
ps 列出容器的端口映射
pull 从 Registry 下载一个 Image 或者 Repository
push 给 Registry 推送一个 Image 或者 Repository
rename 重命名一个容器
restart 重启一个或者多个容器
rm 移除一个或者多个容器
rmi 移除一个或者多个镜像
run 创建并启动容器
save 把一个或者多个镜像保存为 tar 文件
search 去 Docker Hub 寻找镜像
start 启动一个或者多个容器
stats 显示容器资源的实时使用状态
stop 停止一个或者多个容器
tag 给源镜像创建一个新的标签,变成新的镜像
top 显示正在运行容器的进程
unpause pause的反操作
update 更新一个或者多个 docker 容器配置
version 显示 docker 版本信息
container 管理容器
image 管理镜像
network 管理网络
volume 管理券
  • 删除全部容器
docker rm -f $(docker ps -aq)

五、Docker 实操

Docker Hub

image.png

镜像是什么?

  • 镜像就是基础环境 + 软件
  • Nginx镜像:linux系统 + Nginx软件
  • alpine:超级经典版linux,特别小,推荐下载带有alpine的镜像

5-1、镜像相关操作命令

1、查看当前镜像

docker images
docker images.png

2、搜索镜像,或从 DockerHub搜索

docker search nginx
image.png

3、拉取镜像

docker pull nginx
image.png
  • 再次查询当前镜像,Nginx 镜像已经拉取下来
    image.png

4、查看镜像历史-history

image.png

5.1、删除镜像-rmi

image.png

5.2、删除全部镜像

docker rmi -f $(docker images -aq) #删除全部镜像

6、重新命名镜像-tag

docker tag 原镜像:标签 新镜像名:标签 #重命名
docker tag nginx:latest nginx:v1
image.png

5-2、容器相关操作命令

1.1、创建前台容器

docker run --name mynginx -p 80:80 nginx
  • 前台启动容器会造成界面“卡死”,退出界面时,容器也会销毁,所以不推荐使用前台方式创建容器
  • 创建容器时一定要暴露端口,否则无法访问
  • 暴露端口时,: 前的端口时宿主机的端口,:后的端口时容器的端口


    image.png

1.2、创建后台容器

docker create --name mynginx -p 80:80 nginx:latest
docker run -d --name mynginx -p 80:80 nginx:latest
  • 主要
docker run -d = docker create + docker start
image.png
  • 此时容器已经创建,但是并没有启动,所以需要手动启动
docker start 19f9872bd2f862bfeb7c202913616d2b081f47cff37ff375a2b4922d116b5184
  • 访问容器
    image.png

2、查看当前容器

docker ps  # 查看存活的容器
docker ps -a  #查看所有容器
image.png

3.1、停止容器-优雅停机

docker stop 容器名称/容器ID

3.2、停止容器-强制停机

docker kill 容器名称/容器ID

4.1、进入容器

  • docker attach 绑定的是控制台,可能导致容器停止。不推荐使用
docker attach 容器名称/容器ID

4.2、进入容器

  • u:指定用户
  • privileged:root用户权限
docker exec -it -u 0:0 --privileged 8f /bin/bash

5-3、其他操作

1、查看指定容器信息

docker container inspect 容器名称/容器ID
[
    {
        "Id": "8f748061c8633a4cab4b88e93e784386d6340f154842946489708d6e690cae3a",
        "Created": "2021-10-11T05:42:14.366993454Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 14034,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-10-11T05:46:59.65645698Z",
            "FinishedAt": "2021-10-11T05:45:30.906537809Z"
        },
        "Image": "sha256:f8f4ffc8092c956ddd6a3a64814f36882798065799b8aedeebedf2855af3395b",
        "ResolvConfPath": "/var/lib/docker/containers/8f748061c8633a4cab4b88e93e784386d6340f154842946489708d6e690cae3a/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/8f748061c8633a4cab4b88e93e784386d6340f154842946489708d6e690cae3a/hostname",
        "HostsPath": "/var/lib/docker/containers/8f748061c8633a4cab4b88e93e784386d6340f154842946489708d6e690cae3a/hosts",
        "LogPath": "/var/lib/docker/containers/8f748061c8633a4cab4b88e93e784386d6340f154842946489708d6e690cae3a/8f748061c8633a4cab4b88e93e784386d6340f154842946489708d6e690cae3a-json.log",
        "Name": "/mynginx",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {
                "80/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "80"
                    }
                ]
            },
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Capabilities": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/53b355159525f0416f9ecbd26be9805a1ec3669e1cb8d6a808a1b29e7f31aafa-init/diff:/var/lib/docker/overlay2/a42a845eb3a8c4ebd267fdc2fbabd8715f7ccb79421a749209ee941800d3b476/diff:/var/lib/docker/overlay2/2639f8f3420a4be991cbeec99a7469878a7e2b4800e7e0c63c07c640b46cbe96/diff:/var/lib/docker/overlay2/987ba75856862bd5fd1475ba04d4392ee1f1f2de2db4aa5f1bbf2b846ea4522c/diff:/var/lib/docker/overlay2/80814a5662b4893ef088766cb184621638635ec3be0b443cc77ec01ad5d9957d/diff:/var/lib/docker/overlay2/d8bf757fa7d333a578c0df3f857593246b4d1207388deab1680ea21b5daf3a69/diff:/var/lib/docker/overlay2/d3db0eb5df44cae935c00e0e8e2b56e3bdd45aac6e0274474c45fda7775a8fe5/diff",
                "MergedDir": "/var/lib/docker/overlay2/53b355159525f0416f9ecbd26be9805a1ec3669e1cb8d6a808a1b29e7f31aafa/merged",
                "UpperDir": "/var/lib/docker/overlay2/53b355159525f0416f9ecbd26be9805a1ec3669e1cb8d6a808a1b29e7f31aafa/diff",
                "WorkDir": "/var/lib/docker/overlay2/53b355159525f0416f9ecbd26be9805a1ec3669e1cb8d6a808a1b29e7f31aafa/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "8f748061c863",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.21.3",
                "NJS_VERSION=0.6.2",
                "PKG_RELEASE=1~buster"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "nginx:latest",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGQUIT"
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "f595a73dbfadf0b60039a281e44e80b02a7036f83b658d7c92bc942ba0628d5a",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "80/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "80"
                    }
                ]
            },
            "SandboxKey": "/var/run/docker/netns/f595a73dbfad",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "703c83a6d08f6cd2b931ae6d6e2c4e060d77d56bc36bd96db51a7670c8bce3d7",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "438e2a0e3e17fbe139fbe50c1b9641aaa6bc5aad85029898aa938e3d349cf8c4",
                    "EndpointID": "703c83a6d08f6cd2b931ae6d6e2c4e060d77d56bc36bd96db51a7670c8bce3d7",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

2、查看指定镜像信息

docker inspect 镜像名称 / 镜像ID
[
    {
        "Id": "sha256:f8f4ffc8092c956ddd6a3a64814f36882798065799b8aedeebedf2855af3395b",
        "RepoTags": [
            "nginx:latest",
            "nginx:v1"
        ],
        "RepoDigests": [
            "nginx@sha256:06e4235e95299b1d6d595c5ef4c41a9b12641f6683136c18394b858967cd1506"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2021-09-28T08:26:07.57996119Z",
        "Container": "449a8a48a9f56c3616a0b58ce3fea705fa34293def3c95bc32b50b9bc52f3ff7",
        "ContainerConfig": {
            "Hostname": "449a8a48a9f5",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.21.3",
                "NJS_VERSION=0.6.2",
                "PKG_RELEASE=1~buster"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"nginx\" \"-g\" \"daemon off;\"]"
            ],
            "Image": "sha256:dce61176f89cfe1ba4ca3eb3c39097b455d90108498072a77ebaac245c5732cc",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGQUIT"
        },
        "DockerVersion": "20.10.7",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "NGINX_VERSION=1.21.3",
                "NJS_VERSION=0.6.2",
                "PKG_RELEASE=1~buster"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "Image": "sha256:dce61176f89cfe1ba4ca3eb3c39097b455d90108498072a77ebaac245c5732cc",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
            },
            "StopSignal": "SIGQUIT"
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 133283279,
        "VirtualSize": 133283279,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/2639f8f3420a4be991cbeec99a7469878a7e2b4800e7e0c63c07c640b46cbe96/diff:/var/lib/docker/overlay2/987ba75856862bd5fd1475ba04d4392ee1f1f2de2db4aa5f1bbf2b846ea4522c/diff:/var/lib/docker/overlay2/80814a5662b4893ef088766cb184621638635ec3be0b443cc77ec01ad5d9957d/diff:/var/lib/docker/overlay2/d8bf757fa7d333a578c0df3f857593246b4d1207388deab1680ea21b5daf3a69/diff:/var/lib/docker/overlay2/d3db0eb5df44cae935c00e0e8e2b56e3bdd45aac6e0274474c45fda7775a8fe5/diff",
                "MergedDir": "/var/lib/docker/overlay2/a42a845eb3a8c4ebd267fdc2fbabd8715f7ccb79421a749209ee941800d3b476/merged",
                "UpperDir": "/var/lib/docker/overlay2/a42a845eb3a8c4ebd267fdc2fbabd8715f7ccb79421a749209ee941800d3b476/diff",
                "WorkDir": "/var/lib/docker/overlay2/a42a845eb3a8c4ebd267fdc2fbabd8715f7ccb79421a749209ee941800d3b476/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:476baebdfbf7a68c50e979971fcd47d799d1b194bcf1f03c1c979e9262bcd364",
                "sha256:5259501115588b1be0b1bb6eee115422d2939f402137979603cea9d9f1e649ec",
                "sha256:0772cb25d5cae1b4e6e47ff15af95fa1d2640c3b7c74cb4c008d61e2c8c28559",
                "sha256:6e109f6c2f99fdfa436dd66299d2ed87a18fee00b5f22fbd761dbacac27b76a6",
                "sha256:88891187bdd7d71eeaa5f468577eb253eca29f57e3577ea0a954f6991313fd71",
                "sha256:65e1ea1dc98ccb565bf8dd0f7664fc767796d3a6eecaf29b79ce7e9932517ae5"
            ]
        },
        "Metadata": {
            "LastTagTime": "2021-10-11T11:27:29.418812951+08:00"
        }
    }
]

3、使用当前容器制作镜像

8f748061c863:容器ID
docker commit -a Raven -m "测试 commit 命令" 8f748061c863 mynginx:v2
image.png

4、推送镜像到阿里云镜像仓库(没有账号需要提前注册号)

遇到Get https://registry.cn-hangzhou.aliyuncs.com/v2/: unauthorized: authentication required

解决方案:把--username=re****中*****用户名补全

操作指南-一定要将需要推送的镜像重命名后推送到指定仓库

阿里云镜像仓库.png

5、export 操作容器 / import

  • docker export 导出的文件被 import 导入以后变成镜像,并不能直接启动容器,需要知道之前的启动命令(docker ps --no-trunc),然后再用下面启动。或者 docker image inspect 看之前的镜像,把之前镜像的 Entrypoint 的所有和 Cmd 的连接起来就能得到启动命令
docker run -d -P mynginx:v6 /docker-entrypoint.sh nginx -g 'daemon off;'

6、save / load -- 操作镜像

docker save -o busybox.tar busybox:latest 把busybox镜像保存成tar文件 
docker load -i busybox.tar 把压缩包里面的内容直接导成镜像

六、docker run 参数说明

  • -d:后台运行容器,并返回容器ID
  • -i:以交换模式运行容器,通常与 -t 同时使用
  • -P:随机端口映射,容器内部端口随机映射到主机的端口
  • -p:指定端口映射,格式为主机(宿主机)端口:容器端口
  • -t:为容器重新分配一个伪输入终端,通常与-i同时使用
  • --name="nginx-lb":为容器指定一个名称
  • --dns 8.8.8.8:指定容器使用的 DNS 服务器,默认和宿主一致
  • --dns-search example.com:指定容器 DNS 搜索域名,默认和宿主一致
  • -h "mars":指定容器的 hostname
  • -e username="ritchie":设置环境变量
  • --env-file=[]:从指定文件读入环境变量
  • --cpuset="0.2" or --cpuset="0, 1, 2":绑定容器到指定 CPU 运行
  • -m:设置容器使用内存最大值
  • --net="bridge":指定容器的网络连接类型,支持 bridge / host / none / container 四种类型
  • --link=[]:开放一个端口或一组端口
  • --expose=[]:开放一个端口或一组端口
  • --restart:指定重启策略
  • --restart=awlays:总是故障重启
  • --volume,-v:绑定一个券。一般格式 宿主机文件或文件夹:虚拟机文件或文件夹
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容