docker學(xué)習(xí)記錄

一.docker 是什么:

2.安裝docker

系統(tǒng):ubuntu16.04

使用腳本自動(dòng)安裝

Docker 官網(wǎng)為了簡(jiǎn)化安裝流程钟些,提供了一套安裝腳本,Ubuntu系統(tǒng)可以使用這套腳本進(jìn)行安裝

curl -sSL https://get.docker.com/ | sh

執(zhí)行這個(gè)命令后郁副,腳本就會(huì)自動(dòng)的將一切準(zhǔn)備工作做好,并把Docker install 系統(tǒng)中;不過(guò)在國(guó)內(nèi)咱們要考慮的問(wèn)題自然是 墻(翻墻安裝); 如果沒(méi)有翻墻條件的朋友建議使用阿里提供的安裝腳本

curl -sS http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

本人只用第一步就安裝成功了痹筛,所以后面的步驟就沒(méi)有記錄.
相關(guān)參考網(wǎng)站:https://zhuanlan.zhihu.com/p/26549008

更新源

sudo apt-get update

確保apt能使用https方式工作氨肌,已經(jīng)安裝ca證書(shū)

sudo apt-get install apt-transport-https ca-certificates
顯示正確為如下情況:

image.png

測(cè)試:
sudo docker run hello-world

使用hello-world進(jìn)行測(cè)試鸿秆,運(yùn)行該命令時(shí)開(kāi)始會(huì)報(bào)錯(cuò),提示image not found怎囚,因?yàn)橄螺d還沒(méi)完成卿叽。耐心等就好了。


image.png

參考網(wǎng)站:http://www.reibang.com/p/a12558da034e

3.docker常用命令詳解

根據(jù)自己的理解恳守,總的來(lái)說(shuō)分為以下幾種:

容器生命周本期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作運(yùn)維 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
容器rootfs命令 — docker [commit|cp|diff]
鏡像倉(cāng)庫(kù) — docker [login|pull|push|search]
本地鏡像管理 — docker [images|rmi|tag|build|history|save|import]
其他命令 — docker [info|version]
  1. 在docker index中搜索image(search)
Usage: docker search TERM
# docker search seanlo
NAME                DESCRIPTION           STARS     OFFICIAL   AUTOMATED
seanloook/centos6   sean's docker repos         0
搜索的范圍是官方鏡像和所有個(gè)人公共鏡像考婴。NAME列的 / 后面是倉(cāng)庫(kù)的名字。

3. 從docker registry server 中下拉image或repository(pull)

Usage: docker pull [OPTIONS] NAME[:TAG]

# docker pull centos

上面的命令需要注意催烘,在docker v1.2版本以前沥阱,會(huì)下載官方鏡像的centos倉(cāng)庫(kù)里的所有鏡像,而從v.13開(kāi)始官方文檔里的說(shuō)明變了:will pull the centos:latest image, its intermediate layers and any aliases of the same id颗圣,也就是只會(huì)下載tag為latest的鏡像(以及同一images id的其他tag)喳钟。
也可以明確指定具體的鏡像:

# docker pull centos:centos6

當(dāng)然也可以從某個(gè)人的公共倉(cāng)庫(kù)(包括自己是私人倉(cāng)庫(kù))拉取,形如docker pull username/repository<:tag_name> :

# docker pull seanlook/centos:centos6

如果你沒(méi)有網(wǎng)絡(luò)在岂,或者從其他私服獲取鏡像奔则,形如docker pull registry.domain.com:5000/repos:<tag_name>

# docker pull dl.dockerpool.com:5000/mongo:latest

4. 推送一個(gè)image或repository到registry(push)

與上面的pull對(duì)應(yīng),可以推送到Docker Hub的Public蔽午、Private以及私服易茬,但不能推送到Top Level Repository。

# docker push seanlook/mongo
# docker push registry.tp-link.net:5000/mongo:2014-10-27

registry.tp-link.net也可以寫(xiě)成IP及老,172.29.88.222抽莱。
在repository不存在的情況下,命令行下push上去的會(huì)為我們創(chuàng)建為私有庫(kù)骄恶,然而通過(guò)瀏覽器創(chuàng)建的默認(rèn)為公共庫(kù)食铐。

5.1 使用image創(chuàng)建container并執(zhí)行相應(yīng)命令,然后停止

# docker run ubuntu echo "hello world"
hello word

這是最簡(jiǎn)單的方式僧鲁,跟在本地直接執(zhí)行echo 'hello world' 幾乎感覺(jué)不出任何區(qū)別虐呻,而實(shí)際上它會(huì)從本地ubuntu:latest鏡像啟動(dòng)到一個(gè)容器象泵,并執(zhí)行打印命令后退出(docker ps -l可查看)。需要注意的是斟叼,默認(rèn)有一個(gè)--rm=true參數(shù)偶惠,即完成操作后停止容器并從文件系統(tǒng)移除。因?yàn)镈ocker的容器實(shí)在太輕量級(jí)了朗涩,很多時(shí)候用戶都是隨時(shí)刪除和新創(chuàng)建容器忽孽。
容器啟動(dòng)后會(huì)自動(dòng)隨機(jī)生成一個(gè)CONTAINER ID,這個(gè)ID在后面commit命令后可以變?yōu)?strong>IMAGE ID

使用image創(chuàng)建container并進(jìn)入交互模式, login shell是/bin/bash

# docker run -i -t --name mytest centos:centos6 /bin/bash
bash-4.1#

上面的--name參數(shù)可以指定啟動(dòng)后的容器名字谢床,如果不指定則docker會(huì)幫我們?nèi)∫粋€(gè)名字兄一。鏡像centos:centos6也可以用***IMAGE ID ***(68edf809afe7) 代替),并且會(huì)啟動(dòng)一個(gè)偽終端萤悴,但通過(guò)ps或top命令我們卻只能看到一兩個(gè)進(jìn)程瘾腰,因?yàn)槿萜鞯暮诵氖撬鶊?zhí)行的應(yīng)用程序,所需要的資源都是應(yīng)用程序運(yùn)行所必需的覆履,除此之外蹋盆,并沒(méi)有其它的資源,可見(jiàn)Docker對(duì)資源的利用率極高硝全。此時(shí)使用exit或Ctrl+D退出后栖雾,這個(gè)容器也就消失了(消失后的容器并沒(méi)有完全刪除?)
(那么多個(gè)TAG不同而IMAGE ID相同的的鏡像究竟會(huì)運(yùn)行以哪一個(gè)TAG啟動(dòng)呢

5.2 運(yùn)行出一個(gè)container放到后臺(tái)運(yùn)行

# docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 2; done"
ae60c4b642058fefcc61ada85a610914bed9f5df0e2aa147100eab85cea785dc

它將直接把啟動(dòng)的container掛起放在后臺(tái)運(yùn)行(這才叫saas)伟众,并且會(huì)輸出一個(gè)CONTAINER ID析藕,通過(guò)docker ps可以看到這個(gè)容器的信息,可在container外面查看它的輸出docker logs ae60c4b64205凳厢,也可以通過(guò)docker attach ae60c4b64205連接到這個(gè)正在運(yùn)行的終端账胧,此時(shí)在Ctrl+C退出container就消失了,按ctrl-p ctrl-q可以退出到宿主機(jī)先紫,而保持container仍然在運(yùn)行
另外治泥,如果-d啟動(dòng)但后面的命令執(zhí)行完就結(jié)束了,如/bin/bash遮精、echo test居夹,則container做完該做的時(shí)候依然會(huì)終止。而且-d不能與--rm同時(shí)使用
可以通過(guò)這種方式來(lái)運(yùn)行memcached本冲、apache等准脂。

5.3 映射host到container的端口和目錄

映射主機(jī)到容器的端口是很有用的,比如在container中運(yùn)行memcached檬洞,端口為11211狸膏,運(yùn)行容器的host可以連接container的 internel_ip:11211 訪問(wèn),如果有從其他主機(jī)訪問(wèn)memcached需求那就可以通過(guò)-p選項(xiàng)添怔,形如-p <host_port:contain_port>湾戳,存在以下幾種寫(xiě)法:

-p 11211:11211 這個(gè)即是默認(rèn)情況下闷板,綁定主機(jī)所有網(wǎng)卡(0.0.0.0)的11211端口到容器的11211端口上
-p 127.0.0.1:11211:11211 只綁定localhost這個(gè)接口的11211端口
-p 127.0.0.1::5000
-p 127.0.0.1:80:8080

目錄映射其實(shí)是“綁定掛載”host的路徑到container的目錄,這對(duì)于內(nèi)外傳送文件比較方便院塞,在搭建私服那一節(jié),為了避免私服container停止以后保存的images不被刪除性昭,就要把提交的images保存到掛載的主機(jī)目錄下拦止。使用比較簡(jiǎn)單,-v <host_path:container_path>糜颠,綁定多個(gè)目錄時(shí)再加-v汹族。

-v /tmp/docker:/tmp/docker

另外在兩個(gè)container之間建立聯(lián)系可用--link,詳見(jiàn)高級(jí)部分或官方文檔其兴。
下面是一個(gè)例子:

# docker run --name nginx_test \
> -v /tmp/docker:/usr/share/nginx/html:ro \
> -p 80:80 -d \
> nginx:1.7.6

在主機(jī)的/tmp/docker下建立index.html顶瞒,就可以通過(guò)http://localhost:80/

http://host-ip:80
訪問(wèn)了。

6. 將一個(gè)container固化為一個(gè)新的image(commit)

當(dāng)我們?cè)谥谱髯约旱溺R像的時(shí)候元旬,會(huì)在container中安裝一些工具榴徐、修改配置,如果不做commit保存起來(lái)匀归,那么container停止以后再啟動(dòng)坑资,這些更改就消失了。

docker commit <container> [repo:tag]

后面的repo:tag可選
只能提交正在運(yùn)行的container穆端,即通過(guò)docker ps可以看見(jiàn)的容器袱贮,
查看剛運(yùn)行過(guò)的容器

# docker ps -l
CONTAINER ID   IMAGE     COMMAND      CREATED       STATUS        PORTS   NAMES
c9fdf26326c9   nginx:1   nginx -g..   3 hours ago   Exited (0)..     nginx_test

啟動(dòng)一個(gè)已存在的容器(run是從image新建容器后再啟動(dòng)),以下也可以使用docker start nginx_test代替  
[root@hostname docker]# docker start c9fdf26326c9
c9fdf26326c9


docker run -i -t --sig-proxy=false 21ffe545748baf /bin/bash
nginx服務(wù)沒(méi)有啟動(dòng)


# docker commit -m "some tools installed" fcbd0a5348ca seanlook/ubuntu:14.10_tutorial
fe022762070b09866eaab47bc943ccb796e53f3f416abf3f2327481b446a9503

-a "seanlook7@gmail.com"
請(qǐng)注意体啰,當(dāng)你反復(fù)去commit一個(gè)容器的時(shí)候攒巍,每次都會(huì)得到一個(gè)新的IMAGE ID,假如后面的repository:tag 沒(méi)有變荒勇,通過(guò)docker images'可以看到柒莉,之前提交的那份鏡像的repository:tag'就會(huì)變成<none>:<none>,所以盡量避免反復(fù)提交枕屉。
另外常柄,觀察以下幾點(diǎn):

<div>

<div>e</div>
<div>e</div>
<div>e</div>
</div>

  • commit container只會(huì)pause住容器,這是為了保證容器文件系統(tǒng)的一致性搀擂,但不會(huì)stop西潘。如果你要對(duì)這個(gè)容器繼續(xù)做其他修改:

    • 你可以重新提交得到新image2,刪除次新的image1
    • 也可以關(guān)閉容器用新image1啟動(dòng)哨颂,繼續(xù)修改喷市,提交image2后刪除image1
    • 當(dāng)然這樣會(huì)很痛苦,所以一般是采用Dockerfile來(lái)build得到最終image威恼,參考[]
  • 雖然產(chǎn)生了一個(gè)新的image品姓,并且你可以看到大小有100MB寝并,但從commit過(guò)程很快就可以知道實(shí)際上它并沒(méi)有獨(dú)立占用100MB的硬盤(pán)空間,而只是在舊鏡像的基礎(chǔ)上修改腹备,它們共享大部分公共的“片”衬潦。

1. 開(kāi)啟/停止/重啟container(start/stop/restart)

容器可以通過(guò)run新建一個(gè)來(lái)運(yùn)行,也可以重新start已經(jīng)停止的container植酥,但start不能夠再指定容器啟動(dòng)時(shí)運(yùn)行的指令镀岛,因?yàn)閐ocker只能有一個(gè)前臺(tái)進(jìn)程。
容器stop(或Ctrl+D)時(shí)友驮,會(huì)在保存當(dāng)前容器的狀態(tài)之后退出漂羊,下次start時(shí)保有上次關(guān)閉時(shí)更改。而且每次進(jìn)入attach進(jìn)去的界面是一樣的卸留,與第一次run啟動(dòng)或commit提交的時(shí)刻相同走越。

CONTAINER_ID=$(docker start <containner_id>)
docker stop $CONTAINER_ID
docker restart $CONTAINER_ID

關(guān)于這幾個(gè)命令可以通過(guò)一個(gè)完整的實(shí)例使用:docker如何創(chuàng)建一個(gè)運(yùn)行后臺(tái)進(jìn)程的容器并同時(shí)提供shell終端。

2. 連接到正在運(yùn)行中的container(attach)

attach上去的容器必須正在運(yùn)行耻瑟,可以同時(shí)連接上同一個(gè)container來(lái)共享屏幕(與screen命令的attach類(lèi)似)旨指。
官方文檔中說(shuō)attach后可以通過(guò)CTRL-C來(lái)detach,但實(shí)際上經(jīng)過(guò)我的測(cè)試喳整,如果container當(dāng)前在運(yùn)行bash淤毛,CTRL-C自然是當(dāng)前行的輸入,沒(méi)有退出算柳;如果container當(dāng)前正在前臺(tái)運(yùn)行進(jìn)程低淡,如輸出nginx的access.log日志,CTRL-C不僅會(huì)導(dǎo)致退出容器瞬项,而且還stop了蔗蹋。這不是我們想要的,detach的意思按理應(yīng)該是脫離容器終端囱淋,但容器依然運(yùn)行猪杭。好在attach是可以帶上--sig-proxy=false來(lái)確保CTRL-DCTRL-C不會(huì)關(guān)閉容器。

# docker attach --sig-proxy=false $CONTAINER_ID
3. 查看image或container的底層信息(inspect)

inspect的對(duì)象可以是image妥衣、運(yùn)行中的container和停止的container皂吮。
查看容器的內(nèi)部IP

# docker inspect --format='{{.NetworkSettings.IPAddress}}' $CONTAINER_ID
172.17.42.35
4. 刪除一個(gè)或多個(gè)container、image(rm税手、rmi)

你可能在使用過(guò)程中會(huì)build或commit許多鏡像蜂筹,無(wú)用的鏡像需要?jiǎng)h除。但刪除這些鏡像是有一些條件的:
同一個(gè)IMAGE ID可能會(huì)有多個(gè)TAG(可能還在不同的倉(cāng)庫(kù))芦倒,首先你要根據(jù)這些 image names 來(lái)刪除標(biāo)簽艺挪,當(dāng)刪除最后一個(gè)tag的時(shí)候就會(huì)自動(dòng)刪除鏡像;
承上兵扬,如果要?jiǎng)h除的多個(gè)IMAGE NAME在同一個(gè)REPOSITORY麻裳,可以通過(guò)docker rmi <image_id>來(lái)同時(shí)刪除剩下的TAG口蝠;若在不同Repo則還是需要手動(dòng)逐個(gè)刪除TAG
還存在由這個(gè)鏡像啟動(dòng)的container時(shí)(即便已經(jīng)停止)津坑,也無(wú)法刪除鏡像妙蔗;
TO-DO
如何查看鏡像與容器的依存關(guān)系
刪除容器

docker rm <container_id/contaner_name>
刪除所有停止的容器
docker rm $(docker ps -a -q)

刪除鏡像

docker rmi <image_id/image_name ...>

下面是一個(gè)完整的示例:

# docker images            <==
ubuntu            13.10        195eb90b5349       4 months ago       184.6 MB
ubuntu            saucy        195eb90b5349       4 months ago       184.6 MB
seanlook/ubuntu   rm_test      195eb90b5349       4 months ago       184.6 MB

使用195eb90b5349啟動(dòng)、停止一個(gè)容器后疆瑰,刪除這個(gè)鏡像
# docker rmi 195eb90b5349
Error response from daemon: Conflict, cannot delete image 195eb90b5349 because it is 
tagged in multiple repositories, use -f to force
2014/11/04 14:19:00 Error: failed to remove one or more images

刪除seanlook倉(cāng)庫(kù)中的tag     <==
# docker rmi seanlook/ubuntu:rm_test
Untagged: seanlook/ubuntu:rm_test

現(xiàn)在刪除鏡像灭必,還會(huì)由于container的存在不能rmi
# docker rmi 195eb90b5349
Error response from daemon: Conflict, cannot delete 195eb90b5349 because the 
 container eef3648a6e77 is using it, use -f to force
2014/11/04 14:24:15 Error: failed to remove one or more images

先刪除由這個(gè)鏡像啟動(dòng)的容器    <==
# docker rm eef3648a6e77

刪除鏡像                    <==
# docker rmi 195eb90b5349
Deleted: 195eb90b534950d334188c3627f860fbdf898e224d8a0a11ec54ff453175e081
Deleted: 209ea56fda6dc2fb013e4d1e40cb678b2af91d1b54a71529f7df0bd867adc961
Deleted: 0f4aac48388f5d65a725ccf8e7caada42f136026c566528a5ee9b02467dac90a
Deleted: fae16849ebe23b48f2bedcc08aaabd45408c62b531ffd8d3088592043d5e7364
Deleted: f127542f0b6191e99bb015b672f5cf48fa79d974784ac8090b11aeac184eaaff

注意,上面的刪除過(guò)程我所舉的例子比較特殊——鏡像被tag在多個(gè)倉(cāng)庫(kù)乃摹,也有啟動(dòng)過(guò)的容器。按照<==指示的順序進(jìn)行即可跟衅。

Docker 容器鏡像刪除

1.停止所有的container孵睬,這樣才能夠刪除其中的images:

docker stop $(docker ps -a -q)

如果想要?jiǎng)h除所有container的話再加一個(gè)指令:


docker rm $(docker ps -a -q)

2.查看當(dāng)前有些什么images

docker images

3.刪除images,通過(guò)image的id來(lái)指定刪除誰(shuí)

docker rmi <image id>

想要?jiǎng)h除untagged images伶跷,也就是那些id為<None>的image的話可以用

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

要?jiǎng)h除全部image的話

docker rmi $(docker images -q)
5. docker build 使用此配置生成新的image

build命令可以從Dockerfile和上下文來(lái)創(chuàng)建鏡像:
docker build [OPTIONS] PATH | URL | -
上面的PATHURL中的文件被稱(chēng)作上下文掰读,build image的過(guò)程會(huì)先把這些文件傳送到docker的服務(wù)端來(lái)進(jìn)行的。
如果PATH直接就是一個(gè)單獨(dú)的Dockerfile文件則可以不需要上下文叭莫;如果URL是一個(gè)Git倉(cāng)庫(kù)地址蹈集,那么創(chuàng)建image的過(guò)程中會(huì)自動(dòng)git clone一份到本機(jī)的臨時(shí)目錄,它就成為了本次build的上下文雇初。無(wú)論指定的PATH是什么拢肆,Dockerfile是至關(guān)重要的,請(qǐng)參考Dockerfile Reference靖诗。
請(qǐng)看下面的例子:

# cat Dockerfile 
FROM seanlook/nginx:bash_vim
EXPOSE 80
ENTRYPOINT /usr/sbin/nginx -c /etc/nginx/nginx.conf && /bin/bash

# docker build -t seanlook/nginx:bash_vim_Df .
Sending build context to Docker daemon 73.45 MB
Sending build context to Docker daemon 
Step 0 : FROM seanlook/nginx:bash_vim
 ---> aa8516fa0bb7
Step 1 : EXPOSE 80
 ---> Using cache
 ---> fece07e2b515
Step 2 : ENTRYPOINT /usr/sbin/nginx -c /etc/nginx/nginx.conf && /bin/bash
 ---> Running in e08963fd5afb
 ---> d9bbd13f5066
Removing intermediate container e08963fd5afb
Successfully built d9bbd13f5066

上面的PATH為.郭怪,所以在當(dāng)前目錄下的所有文件(不包括.dockerignore中的)將會(huì)被tar打包并傳送到docker daemon(一般在本機(jī)),從輸出我們可以到Sending build context...刊橘,最后有個(gè)Removing intermediate container的過(guò)程鄙才,可以通過(guò)--rm=false來(lái)保留容器。
TO-DO
docker build github.com/creack/docker-firefox失敗促绵。

  1. 給鏡像打上標(biāo)簽(tag)
    tag的作用主要有兩點(diǎn):一是為鏡像起一個(gè)容易理解的名字攒庵,二是可以通過(guò)docker tag來(lái)重新指定鏡像的倉(cāng)庫(kù),這樣在push時(shí)自動(dòng)提交到倉(cāng)庫(kù)败晴。
將同一IMAGE_ID的所有tag浓冒,合并為一個(gè)新的
# docker tag 195eb90b5349 seanlook/ubuntu:rm_test

新建一個(gè)tag,保留舊的那條記錄
# docker tag Registry/Repos:Tag New_Registry/New_Repos:New_Tag

7. 查看容器的信息container(ps)

docker ps命令可以查看容器的CONTAINER ID尖坤、NAME裆蒸、IMAGE NAME、端口開(kāi)啟及綁定糖驴、容器啟動(dòng)后執(zhí)行的COMMNAD僚祷。經(jīng)常通過(guò)ps來(lái)找到CONTAINER_ID佛致。
docker ps 默認(rèn)顯示當(dāng)前正在運(yùn)行中的container
docker ps -a查看包括已經(jīng)停止的所有容器
docker ps -l顯示最新啟動(dòng)的一個(gè)容器(包括已停止的)
*** -q, --quiet=false Only show numeric IDs#顯示所有鏡像容器的id號(hào)

8. 查看容器中正在運(yùn)行的進(jìn)程(top)

容器運(yùn)行時(shí)不一定有/bin/bash終端來(lái)交互執(zhí)行top命令,查看container中正在運(yùn)行的進(jìn)程辙谜,況且還不一定有top命令俺榆,這是docker top <container_id/container_name>就很有用了。實(shí)際上在host上使用ps -ef|grep docker也可以看到一組類(lèi)似的進(jìn)程信息装哆,把container里的進(jìn)程看成是host上啟動(dòng)docker的子進(jìn)程就對(duì)了罐脊。

  1. 其他命令
    docker還有一些如login、cp蜕琴、logs萍桌、export、import凌简、load上炎、kill等不是很常用的命令。

參考網(wǎng)站

Docker

我們通過(guò)docker的兩個(gè)參數(shù) -i -t雏搂,讓docker運(yùn)行的容器實(shí)現(xiàn)"對(duì)話"的能力

? -t:在新容器內(nèi)指定一個(gè)偽終端或終端藕施。
-t :指定要?jiǎng)?chuàng)建的目標(biāo)鏡像名
? -i:允許你對(duì)容器內(nèi)的標(biāo)準(zhǔn)輸入 (STDIN) 進(jìn)行交互。
我們還要將其啟動(dòng)在后臺(tái)(Daemonized)凸郑,加上-d參數(shù)裳食。
-d: 后臺(tái)運(yùn)行容器,并返回容器ID
sudo docker rm $(docker ps -a -q):刪除所有容器

刪除seanlook倉(cāng)庫(kù)中的tag <== # docker rmi seanlook/ubuntu:rm_test Untagged: seanlook/ubuntu:rm_test

創(chuàng)建自定義鏡像的文件芙沥。它通常分為四部分:基礎(chǔ)鏡像信息诲祸,維護(hù)者信息,鏡像操作指令和容器啟動(dòng)時(shí)的指令

使用URL github.com/creack/docker-firefox 的 Dockerfile 創(chuàng)建鏡像而昨。
docker build github.com/creack/docker-firefox

git clone https://github.com/sameersbn/docker-gitlab.git
cd docker-gitlab
docker build --tag="$USER/gitlab" .

其它 docker build 的用法
直接用 Git repo 進(jìn)行構(gòu)建
或許你已經(jīng)注意到了烦绳,docker build 還支持從 URL 構(gòu)建,比如可以直接從 Git repo 中構(gòu)建:
docker build https://github.com/twang2218/gitlab-ce-zh.git#:8.14 docker build https://github.com/twang2218/gitlab-ce-zh.git\#:8.14 Sending build context to Docker daemon 2.048 kB Step 1 : FROM gitlab/gitlab-ce:8.14.0-ce.0 8.14.0-ce.0: Pulling from gitlab/gitlab-ce aed15891ba52: Already exists 773ae8583d14: Already exists ... 這行命令指定了構(gòu)建所需的 Git repo配紫,并且指定默認(rèn)的 master 分支径密,構(gòu)建目錄為 /8.14/,然后 Docker 就會(huì)自己去 git clone 這個(gè)項(xiàng)目躺孝、切換到指定分支享扔、并進(jìn)入到指定目錄后開(kāi)始構(gòu)建。 用給定的 tar 壓縮包構(gòu)建 docker build http://server/context.tar.gz
如果所給出的 URL 不是個(gè) Git repo植袍,而是個(gè) tar 壓縮包惧眠,那么 Docker 引擎會(huì)下載這個(gè)包,并自動(dòng)解壓縮于个,以其作為上下文氛魁,開(kāi)始構(gòu)建。
從標(biāo)準(zhǔn)輸入中讀取 Dockerfile 進(jìn)行構(gòu)建
docker build - < Dockerfile

cat Dockerfile | docker build -
如果標(biāo)準(zhǔn)輸入傳入的是文本文件,則將其視為 Dockerfile秀存,并開(kāi)始構(gòu)建捶码。這種形式由于直接從標(biāo)準(zhǔn)輸入中讀取 Dockerfile 的內(nèi)容,它沒(méi)有上下文或链,因此不可以像其他方法那樣可以將本地文件 COPY 進(jìn)鏡像之類(lèi)的事情惫恼。
從標(biāo)準(zhǔn)輸入中讀取上下文壓縮包進(jìn)行構(gòu)建
$ docker build - < context.tar.gz
如果發(fā)現(xiàn)標(biāo)準(zhǔn)輸入的文件格式是 gzip、bzip2 以及 xz 的話澳盐,將會(huì)使其為上下文壓縮包祈纯,直接將其展開(kāi),將里面視為上下文叼耙,并開(kāi)始構(gòu)建腕窥。

譬如我要啟動(dòng)一個(gè)CentOS容器,宿主機(jī)的/test目錄掛載到容器的/soft目錄筛婉,可通過(guò)以下方式指定:

docker run -it -v /test:/soft centos /bin/bash

這樣在容器啟動(dòng)后簇爆,容器內(nèi)會(huì)自動(dòng)創(chuàng)建/soft的目錄。通過(guò)這種方式倾贰,我們可以明確一點(diǎn),即-v參數(shù)中拦惋,冒號(hào)":"前面的目錄是宿主機(jī)目錄匆浙,后面的目錄是容器內(nèi)目錄。

docker run :

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-d, --detach=false 指定容器運(yùn)行于前臺(tái)還是后臺(tái)厕妖,默認(rèn)為false
-i, --interactive=false 打開(kāi)STDIN首尼,用于控制臺(tái)交互
-t, --tty=false 分配tty設(shè)備,該可以支持終端登錄言秸,默認(rèn)為false
-u, --user="" 指定容器的用戶
-a, --attach=[] 登錄容器(必須是以docker run -d啟動(dòng)的容器)
-w, --workdir="" 指定容器的工作目錄
-c, --cpu-shares=0 設(shè)置容器CPU權(quán)重软能,在CPU共享場(chǎng)景使用
-e, --env=[] 指定環(huán)境變量,容器中可以使用該環(huán)境變量
-m, --memory="" 指定容器的內(nèi)存上限
-P, --publish-all=false 指定容器暴露的端口
-p, --publish=[] 指定容器暴露的端口
-h, --hostname="" 指定容器的主機(jī)名
-v, --volume=[] 給容器掛載存儲(chǔ)卷举畸,掛載到容器的某個(gè)目錄
--volumes-from=[] 給容器掛載其他容器上的卷查排,掛載到容器的某個(gè)目錄
--cap-add=[] 添加權(quán)限,權(quán)限清單詳見(jiàn):http://linux.die.net/man/7/capabilities
--cap-drop=[] 刪除權(quán)限抄沮,權(quán)限清單詳見(jiàn):http://linux.die.net/man/7/capabilities
--cidfile="" 運(yùn)行容器后跋核,在指定文件中寫(xiě)入容器PID值,一種典型的監(jiān)控系統(tǒng)用法
--cpuset="" 設(shè)置容器可以使用哪些CPU叛买,此參數(shù)可以用來(lái)容器獨(dú)占CPU
--device=[] 添加主機(jī)設(shè)備給容器砂代,相當(dāng)于設(shè)備直通
--dns=[] 指定容器的dns服務(wù)器
--dns-search=[] 指定容器的dns搜索域名,寫(xiě)入到容器的/etc/resolv.conf文件
--entrypoint="" 覆蓋image的入口點(diǎn)
--env-file=[] 指定環(huán)境變量文件率挣,文件格式為每行一個(gè)環(huán)境變量
--expose=[] 指定容器暴露的端口刻伊,即修改鏡像的暴露端口
--link=[] 指定容器間的關(guān)聯(lián),使用其他容器的IP、env等信息
--lxc-conf=[] 指定容器的配置文件捶箱,只有在指定--exec-driver=lxc時(shí)使用
--name="" 指定容器名字智什,后續(xù)可以通過(guò)名字進(jìn)行容器管理,links特性需要使用名字
--net="bridge" 容器網(wǎng)絡(luò)設(shè)置:
bridge 使用docker daemon指定的網(wǎng)橋
host //容器使用主機(jī)的網(wǎng)絡(luò)
container:NAME_or_ID >//使用其他容器的網(wǎng)路讼呢,共享IP和PORT等網(wǎng)絡(luò)資源
none 容器使用自己的網(wǎng)絡(luò)(類(lèi)似--net=bridge)撩鹿,但是不進(jìn)行配置
--privileged=false 指定容器是否為特權(quán)容器,特權(quán)容器擁有所有的capabilities
--restart="no" 指定容器停止后的重啟策略:
no:容器退出時(shí)不重啟
on-failure:容器故障退出(返回值非零)時(shí)重啟
always:容器退出時(shí)總是重啟
--rm=false 指定容器停止后自動(dòng)刪除容器(不支持以docker run -d啟動(dòng)的容器)
--sig-proxy=true 設(shè)置由代理接受并處理信號(hào)悦屏,但是SIGCHLD节沦、SIGSTOP和SIGKILL不能被代理
-h "mars": 指定容器的hostname;
-p <宿主端口>:<容器端口> 區(qū)分開(kāi)來(lái)础爬。-p甫贯,是映射宿主端口和容器端口
--name="nginx-lb": 為容器指定一個(gè)名稱(chēng)

docker掛載目錄:

Docker容器啟動(dòng)的時(shí)候,如果要掛載宿主機(jī)的一個(gè)目錄看蚜,可以用-v參數(shù)指定叫搁。
譬如我要啟動(dòng)一個(gè)CentOS容器,宿主機(jī)的/test目錄掛載到容器的/soft目錄供炎,可通過(guò)以下方式指定:

docker run -it -v /test:/soft centos /bin/bash

這樣在容器啟動(dòng)后渴逻,容器內(nèi)會(huì)自動(dòng)創(chuàng)建/soft的目錄。通過(guò)這種方式音诫,我們可以明確一點(diǎn)惨奕,即-v參數(shù)中,冒號(hào)":"前面的目錄是宿主機(jī)目錄竭钝,后面的目錄是容器內(nèi)目錄梨撞。
貌似簡(jiǎn)單,其實(shí)不然香罐,下面我們來(lái)驗(yàn)證一下:
一卧波、容器目錄不可以為相對(duì)路徑

[root@localhost ~]# docker run -it -v /test:soft
centos /bin/bash
invalid value "/test:soft" for flag -v: soft is not an absolute path
See 'docker run --help'.

直接報(bào)錯(cuò),提示soft不是一個(gè)絕對(duì)路徑庇茫,所謂的絕對(duì)路徑港粱,必須以下斜線“/”開(kāi)頭。

docker run參數(shù):

-p IP:host_port:container_port 或 -p IP::port
配置網(wǎng)絡(luò)訪問(wèn)域名(ip)和端口轉(zhuǎn)發(fā)容器端口
監(jiān)聽(tīng)主機(jī)的指定域名端口轉(zhuǎn)發(fā)到容器的端口

四.添加到用戶組(可選項(xiàng))

1.添加到用戶組(so easy)

sudo groupadd docker
sudo usermod -aG docker $USER

注銷(xiāo)系統(tǒng)重新進(jìn)入系統(tǒng)旦签,就可以直接使用docker開(kāi)頭了啥容。

2.如果不添加到用戶組會(huì)發(fā)生什么呢?

如果直接運(yùn)行:

docker run hello-world

你會(huì)發(fā)現(xiàn)下面的錯(cuò)誤:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.30/containers/json: dial unix /var/run/docker.sock: connect: permission denied

這是因?yàn)椋?/p>

docker守護(hù)程序綁定到Unix套接字而不是TCP端口顷霹。默認(rèn)情況下咪惠,Unix套接字由用戶root擁有,其他用戶只能使用sudo訪問(wèn)它淋淀。 docker守護(hù)程序始終以root用戶身份運(yùn)行遥昧。 如果您不想在使用docker命令時(shí)使用sudo覆醇,請(qǐng)創(chuàng)建名為docker的Unix組,并將用戶添加到該組炭臭。當(dāng)docker守護(hù)進(jìn)程啟動(dòng)時(shí)永脓,它會(huì)使Docker組的Unix套接字的所有權(quán)讀/寫(xiě)。

3.docker 普通用戶鞋仍,加入docker用戶組

普通用戶竞滓,加入docker用戶組钠龙,去掉sudo

操作順序:

sudo cat /etc/group | grep docker
如果不存在docker組冕茅,可以添加sudo groupadd docker
添加當(dāng)前用戶到docker組析显,sudo gpasswd -a ${USER} docker
重啟docker服務(wù),sudo systemctl restart docker
如果權(quán)限不夠,sudo chmod a+rw /var/run/docker.sock

Docker私有倉(cāng)庫(kù)搭建

http://blog.csdn.net/wangtaoking1/article/details/44180901
參考網(wǎng)站:https://yeasy.gitbooks.io/docker_practice/content/container/enter.html
http://www.sklinux.com/1394
FTP_SVN_DNS_LINUX服務(wù)器維護(hù)_搭建web云服務(wù)器安全配置
-.video-wrap{position:relative;width:100%;padding:0}.video-wrap embed, .video-wrap object, .video-wrap iframe{position:absolute;top:0;left:0;width:100%;height:100%}

jQuery(document).ready(function(){("#wrapper").vids();});

如何打開(kāi)多個(gè)終端進(jìn)入Docker容器

Docker容器運(yùn)行后肚豺,如何進(jìn)入容器進(jìn)行操作呢溃斋?起初我是用SSH。如果只啟動(dòng)一個(gè)容器吸申,用SSH還能應(yīng)付梗劫,只需要將容器的22端口映射到本機(jī)的一個(gè)端口即可。當(dāng)我啟動(dòng)了五個(gè)容器后截碴,每個(gè)容器默認(rèn)是沒(méi)有配置SSH Server的梳侨,安裝配置SSHD,映射容器SSH端口日丹,實(shí)在是麻煩走哺。 我發(fā)現(xiàn)很多Docker鏡像都是沒(méi)有安裝SSHD服務(wù)的,難道有其他方法進(jìn)入Docker容器聚凹?有很多種方法割坠,包括使用 docker attach 命令或 nsenter 工具等齐帚。使用 attach 命令有時(shí)候并不方便妒牙。當(dāng)多個(gè)窗口同時(shí) attach 到同一個(gè)容器的時(shí)候,所有窗口都會(huì)同步顯示对妄。nsenter 可以訪問(wèn)另一個(gè)進(jìn)程的名字空間湘今。為了連接到容器,你還需要找到容器的第一個(gè)進(jìn)程的 PID剪菱,可以通過(guò)下面的命令獲取摩瞎。PID=(docker inspect –format “{{ .State.Pid }}” <container>) //將<container>換成你的容器id通過(guò)這個(gè) PID,就可以連接到這個(gè)容器: nsenter –target PID –mount –uts –ipc –net –pid更簡(jiǎn)單的孝常,建議大家下載 .bashrc_docker旗们,并將內(nèi)容放到 .bashrc 中。 wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;echo “[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker” >> ~/.bashrc; source ~/.bashrc這個(gè)文件中定義了很多方便使用 Docker 的命令构灸,例如 docker-pid 可以獲取某個(gè)容器的 PID上渴;而 docker-enter 可以進(jìn)入容器或直接在容器內(nèi)執(zhí)行命令。 echo (docker-pid <container>) docker-enter <container>
附.bashrc_docker文件內(nèi)容:# Some useful commands to use docker.# Author: yeasy@github# Created:2014-09-25
alias docker-pid=”sudo docker inspect –format ‘{{.State.Pid}}’”alias docker-ip=”sudo docker inspect –format ‘{{ .NetworkSettings.IPAddress }}’”

the implementation refs from https://github.com/jpetazzo/nsenter/blob/master/docker-enterfunction docker-enter() {if [ -e (dirname "0")/nsenter ]; then# with boot2docker, nsenter is not in the PATH but it is in the same folderNSENTER=(dirname “0″)/nsenterelseNSENTER=nsenterfi[ -z "$NSENTER" ] && echo “WARN Cannot find nsenter” && return

if [ -z "1" ]; thenecho “Usage: `basename “0″` CONTAINER [COMMAND [ARG]…]”echo “”echo “Enters the Docker CONTAINER and executes the specified COMMAND.”echo “If COMMAND is not specified, runs an interactive shell in CONTAINER.”elsePID=(sudo docker inspect –format “{{.State.Pid}}” “1″)if [ -z "PID" ]; thenecho “WARN Cannot find the given container”returnfishift OPTS=”–targetPID –mount –uts –ipc –net –pid”
if [ -z "1" ]; then# No command given.# Use su to clear all host environment variables except for TERM,# initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH,# and start a login shell.#sudoNSENTER “OPTS” su – rootsudoNSENTER –target PID –mount –uts –ipc –net –pid su – rootelse# Use env to clear all host environment variables.sudoNSENTER –target PID –mount –uts –ipc –net –pid env -i@fifi}

Dockerfile:

RUN命令會(huì)在上面指定的鏡像里執(zhí)行任何命令

RUN apt-get update
RUN apt-get install -y nginx

7.6 ADD

<pre>ADD <src>... <dest></pre>

ADD復(fù)制本地主機(jī)文件、目錄或者遠(yuǎn)程文件 URLS 從 并且添加到容器指定路徑中 稠氮。

支持通過(guò) GO 的正則模糊匹配曹阔,具體規(guī)則可參見(jiàn) Go filepath.Match

ADD hom* /mydir/        # adds all files starting with "hom"
ADD hom?.txt /mydir/    # ? is replaced with any single character
  • 路徑必須是絕對(duì)路徑,如果 不存在隔披,會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)目錄
  • 路徑必須是 Dockerfile 所在路徑的相對(duì)路徑
  • 如果是一個(gè)目錄赃份,只會(huì)復(fù)制目錄下的內(nèi)容,而目錄本身則不會(huì)被復(fù)制
1. COPY指令

COPY指令能夠?qū)?gòu)建命令所在的主機(jī)本地的文件或目錄奢米,復(fù)制到鏡像文件系統(tǒng)抓韩。
CMD exec /bin/bash -c "/etc/init.d/xinetd start; trap : TERM INT; sleep infinity & wait"
當(dāng)執(zhí)行系統(tǒng)命令的時(shí)候,才會(huì)加-c

trap 的使用

1恃慧、運(yùn)行格式

trap命令的參數(shù)分為兩部分园蝠,前一部分是接收到指定信號(hào)時(shí)將要采取的行動(dòng),后一部分是要處理的信號(hào)名痢士。

trap command signal

它有三種形式分別對(duì)應(yīng)三種不同的信號(hào)回應(yīng)方式彪薛。

第一種:

trap "commands" signal-list

當(dāng)腳本收到signal-list清單內(nèi)列出的信號(hào)時(shí),trap命令執(zhí)行雙引號(hào)中的命令怠蹂。

第二種:

trap signal-list

trap不指定任何命令善延,接受信號(hào)的默認(rèn)操作,默認(rèn)操作是結(jié)束進(jìn)程的運(yùn)行城侧。

第三種:

trap " " signal-list

trap命令指定一個(gè)空命令串易遣,允許忽視信號(hào),我們用到的就是這一種嫌佑。

CMD exec /bin/bash -c "/etc/init.d/xinetd start; trap : TERM INT; sleep infinity & wait" 

HUP     1    終端斷線
INT       2    中斷(同 Ctrl + C)
QUIT    3    退出(同 Ctrl + \)
TERM    15    終止
KILL      9    強(qiáng)制終止
CONT   18    繼續(xù)(與STOP相反豆茫, fg/bg命令)
STOP    19    暫停(同 Ctrl + Z)

sleep命令常用于在Linux shell腳本中延遲時(shí)間。

永久等待 sleep infinity?

有時(shí)寫(xiě)了一個(gè)sh文件后需要保持這個(gè)sh的運(yùn)行屋摇,就用sleep永久等待好咯

sleep infinity

wait

wait是用來(lái)阻塞當(dāng)前進(jìn)程的執(zhí)行揩魂,直至指定的子進(jìn)程執(zhí)行結(jié)束后,才繼續(xù)執(zhí)行炮温。使用wait可以在bash腳本“多進(jìn)程”執(zhí)行模式下火脉,起到一些特殊控制的作用。

使用格式

wait [進(jìn)程號(hào) 或 作業(yè)號(hào)]
eg:wait 23 or wait %1
備注:
如果wait后面不帶任何的進(jìn)程號(hào)或作業(yè)號(hào)柒啤,那么wait會(huì)阻塞當(dāng)前進(jìn)程的執(zhí)行倦挂,直至當(dāng)前進(jìn)程的所有子進(jìn)程都執(zhí)行結(jié)束后,才繼續(xù)執(zhí)行担巩。

#方援!/bin/sh  
echo “1”  
sleep 5&  
echo “3”  
echo “4”  
wait  #會(huì)等待wait所在bash上的所有子進(jìn)程的執(zhí)行結(jié)束,本例中就是sleep 5這句  
echo”5”
EXPOSE
EXPOSE <port> [<port>...]

告訴 Docker 服務(wù)端容器對(duì)外映射的本地端口涛癌,需要在 docker run 的時(shí)候使用-p或者-P選項(xiàng)生效犯戏。

【docker】查看docker容器或鏡像的詳細(xì)信息命令窥浪,查看docker中正在運(yùn)行的容器的掛載位置

命令:
docker inspect f257d69e0035</pre>
格式:
docker inspect 容積或鏡像ID</pre>
首先,docker ps獲取簡(jiǎn)要信息

image

參考網(wǎng)站:

pwndocker :https://github.com/skysider/pwndocker

Docker —— 從入門(mén)到實(shí)踐:https://yeasy.gitbooks.io/docker_practice/content/install/ubuntu.html
我眼中的 Docker(二)Image:http://blog.csdn.net/jcjc918/article/details/46500031
非常詳細(xì)的資料:https://www.cnblogs.com/LinuxSuDa/p/6408364.html
有貨:https://segmentfault.com/a/1190000007652344
docker /web-docker練習(xí)網(wǎng)站:https://github.com/imagemlt/CTF_web_dockers
git報(bào)錯(cuò)--RPC failed; curl 18 transfer closed with outstanding read data remaining:
https://blog.csdn.net/IT_liuchengli/article/details/77040806
docker ctf環(huán)境詳解:
http://www.k0rz3n.com/2018/05/17/%E6%90%AD%E5%BB%BAdocker%E7%9A%84%20CTF%20getshell%E7%8E%AF%E5%A2%83/
daocker非常實(shí)用網(wǎng)站:
https://yeasy.gitbooks.io/docker_practice/introduction/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笛丙,一起剝皮案震驚了整個(gè)濱河市漾脂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胚鸯,老刑警劉巖骨稿,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異姜钳,居然都是意外死亡坦冠,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)哥桥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辙浑,“玉大人,你說(shuō)我怎么就攤上這事拟糕∨信唬” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵送滞,是天一觀的道長(zhǎng)侠草。 經(jīng)常有香客問(wèn)我,道長(zhǎng)犁嗅,這世上最難降的妖魔是什么边涕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮褂微,結(jié)果婚禮上功蜓,老公的妹妹穿的比我還像新娘。我一直安慰自己宠蚂,他們只是感情好式撼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著肥矢,像睡著了一般端衰。 火紅的嫁衣襯著肌膚如雪叠洗。 梳的紋絲不亂的頭發(fā)上甘改,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音灭抑,去河邊找鬼十艾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛腾节,可吹牛的內(nèi)容都是我干的忘嫉。 我是一名探鬼主播荤牍,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼庆冕!你這毒婦竟也來(lái)了康吵?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤访递,失蹤者是張志新(化名)和其女友劉穎晦嵌,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體拷姿,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惭载,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了响巢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片描滔。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖踪古,靈堂內(nèi)的尸體忽然破棺而出含长,到底是詐尸還是另有隱情,我是刑警寧澤伏穆,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布茎芋,位于F島的核電站,受9級(jí)特大地震影響蜈出,放射性物質(zhì)發(fā)生泄漏田弥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一铡原、第九天 我趴在偏房一處隱蔽的房頂上張望偷厦。 院中可真熱鬧,春花似錦燕刻、人聲如沸只泼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)请唱。三九已至,卻和暖如春过蹂,著一層夾襖步出監(jiān)牢的瞬間十绑,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工酷勺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留本橙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓脆诉,卻偏偏與公主長(zhǎng)得像甚亭,于是被迫代替她去往敵國(guó)和親贷币。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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