我的docker手冊

container.jpg

原文鏈接

需要注意的是在Docker里面竞滓,鏡像和容器是兩個(gè)概念钠龙,鏡像類似操作系統(tǒng)的ISO稠鼻,而容器則是以該ISO為基礎(chǔ)生成而來的端三。

系統(tǒng)相關(guān)

boot2docker默認(rèn)用戶名是docker搔驼,密碼是tcuser

鏡像和容器

docker pull ubuntu:14.04.1 # 拉取官方鏡像
docker pull registry.hub.docker.com/ubuntu:14.04  # 拉取特定網(wǎng)站的鏡像
docker pull index.alauda.cn/library/centos:centos6.6 # 靈雀云的鏡像,鏡像中心https://hub.alauda.cn/
docker images # 列出所有的鏡像

docker ps           # 列出正在運(yùn)行的容器
docker ps -a -s # 列出所有容器,-s可以列出大小信息
docker ps -q        # 只列出容器的ID

docker rm # 刪除容器
docker rmi # 刪除鏡像

docker tag id name:tag  # 給鏡像更改名稱

創(chuàng)建容器

啟動(dòng)參數(shù)

--add-host="host:IP"    # 給hosts添加一行
-d                      # 使容器在后臺運(yùn)行(detached mode)
--name haofly           # 給容器命名
--net=host              # 網(wǎng)絡(luò)模式茶没,host表示容器不會(huì)獲得獨(dú)立的Network Namspace肌幽,而是和宿主機(jī)公用一個(gè)Network Namespace晚碾。容器將不會(huì)虛擬網(wǎng)卡,配置自己的IP牍颈,而是使用宿主機(jī)器的IP和端口迄薄;none表示沒有網(wǎng)絡(luò)琅关;bridge是docker默認(rèn)的網(wǎng)絡(luò)設(shè)置煮岁;container:NAME_or_ID表示container模式,指定新創(chuàng)建的容器和已經(jīng)存在的一個(gè)容器共享一個(gè)Network Namespace涣易,和指定的容器共享IP画机、端口范圍等。
--restart=no            # 容器的重啟模式新症,no表示不自動(dòng)重啟步氏,on-failure表示當(dāng)容器推出碼為非零的時(shí)候自動(dòng)重啟,always表示總是自動(dòng)重啟徒爹,docker重啟后也會(huì)自動(dòng)重啟荚醒,unless-stopped表示只有在docker重啟時(shí)不重啟,其他時(shí)候都自動(dòng)重啟隆嗅。
-v /etc/test/:/etc/internal/test    # 將宿主機(jī)的/etc/test目錄掛載到容器內(nèi)部的/etc/internal/test目錄

啟動(dòng)命令

# docker run命令用于從鏡像創(chuàng)建一個(gè)容器
# -i參數(shù)表示將STDIN持續(xù)打開而不管是否已經(jīng)attached
docker run -t -i ubuntu:14.04.1      # 從ubuntu:14.04.1鏡像創(chuàng)建一個(gè)容器
docker run -t -i ubuntu:14.04.1 /bin/bash # 從ubuntu:14.04.1創(chuàng)建容器并在容器中執(zhí)行命令
docker run -t -i -d ubuntu:14.04.1  # 創(chuàng)建容器并作為daemon運(yùn)行
docker run -t -i -p 80:80 ubuntu:14.04.1 # 創(chuàng)建容器并映射容器的80端口到主機(jī)的80端口
docker run -t -i -v /etc/hehe/:/etc/haha ubuntu:14.04.1 # 創(chuàng)建容器并映射主機(jī)的/etc/hehe目錄到容器的/etc/haha目錄
docker run -t -i
exit # 退出容器
docker logs 容器名稱  # 獲取容器的輸出信息界阁,但是通過docker exec進(jìn)入容器的時(shí)候,其標(biāo)準(zhǔn)輸出并未被主進(jìn)程相關(guān)聯(lián)胖喳,所以docker exec所執(zhí)行進(jìn)程的標(biāo)準(zhǔn)輸出不會(huì)進(jìn)入容器的日志文件泡躯。即docker容器的日志只負(fù)責(zé)應(yīng)用本身的標(biāo)準(zhǔn)輸出,不包括docker exec衍生進(jìn)程的標(biāo)準(zhǔn)輸出(http://docs.daocloud.io/allen-docker/docker-exec)
docker run -t -i -d -p 80:80 -v /home/haofly/docker/test/mysite:/mysite django-apache:latest # 我當(dāng)前機(jī)器上的一條執(zhí)行自己創(chuàng)建的鏡像的命令

?

容器操作

docker start:和docker run后面參數(shù)一樣丽焊,只是它是重啟容器较剃,而docker run是創(chuàng)建容器
docker stop 容器名/ID:停止某個(gè)容器
docker attach 容器名/ID:直接進(jìn)入容器,查看容器當(dāng)前的標(biāo)準(zhǔn)輸出
docker exec -it 容器名 bash  # ssh進(jìn)一個(gè)容器
docker inspect 容器名:查看一個(gè)容器的詳細(xì)信息

Dockerfile

Dockerfile是一個(gè)制作鏡像的腳本工具技健,通過它可以比直接拷貝docker容器更方便地遷移写穴,只需要拷貝一個(gè)Dockerfile然后在本地構(gòu)建一個(gè)即可。

docker build -t local:mine .

Dockerfile的語法說明:

#: Dockerfile中用#來進(jìn)行注釋
FROM: 指定基于哪個(gè)鏡像創(chuàng)建,這樣會(huì)先pull該鏡像.例如`FROM ubuntu:14.04.1`
MAINTAINER: 指定創(chuàng)建作者的信息.例如`MAINTAINER haofly <haoflynet@gmail.com>`
ADD: 將指定的主機(jī)目錄中的文件代替要構(gòu)建的鏡像中的文件,這條命令通常用于鏡像源的更換,例如`ADD sources.list_aliyun /etc/apt/sources.list`,這樣,鏡像中的/etc/apt/sources.list文件就被sources.list_aliyun文件替代了
RUN: 執(zhí)行一條shell命令
EXPOSE: 暴露什么端口給主機(jī),需要注意的是,即使指定了,也得在docker run的時(shí)候通過-p參數(shù)執(zhí)行端口的映射
WORKDIR: 切換工作目錄,這樣下面的CMD等就可以在新的目錄執(zhí)行
CMD: 一般寫于最后,因?yàn)樗侨萜鲉?dòng)時(shí)才執(zhí)行的命令,并且無論寫多少,都只執(zhí)行最后那一條,一般用于容器中鏡像的啟動(dòng),例如`CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]`,當(dāng)然,也可不加括號和引號,直接用shell的方式寫一條命令.但是如果docker run 中指定了命令過后,CMD將不被執(zhí)行
ENTRYPOINT: 和CMD類似,但是如果docker run中指定了命令,它仍然會(huì)被執(zhí)行
ENV: 指定環(huán)境變量
ARG: 指定參數(shù)雌贱,比如ockerfile里面定義了`ARG JAVA_HOME`啊送,那么可以在構(gòu)建的時(shí)候用docker build JAVA_HOME=$JAVA_HOME對該參數(shù)進(jìn)行賦值
ONBUILD: 后面跟的是其他的普通指令,例如ONBUILDI RUN mkdir test帽芽,實(shí)際上它是創(chuàng)建了一個(gè)模版景象删掀,后續(xù)根據(jù)該景象創(chuàng)建的子鏡像不用重復(fù)寫它后面的指令,就會(huì)執(zhí)行該指令了

Docker Compose

Docker Compose主要用于快速在集群中部署分布式應(yīng)用导街,主要有兩個(gè)概念:

  • 服務(wù)(Service): 一個(gè)應(yīng)用的容器披泪,實(shí)際上可以包括若干個(gè)運(yùn)行相同鏡像的容器實(shí)例
  • 項(xiàng)目(Project): 由一組關(guān)聯(lián)的應(yīng)用容器組成的一個(gè)完整業(yè)務(wù)單元

一個(gè)例子:

weba:               # 給容器取名
    build: ./web    # 如果容器需要使用特定的Dockerfile可以在這里指定
    expose:         # 暴露的接口
        - 80

webb:               # 第二個(gè)容器
    build: ./web
    extra_hosts:
      - "haofly.net:172.0.0.1"  # 添加hosts
    command: bash -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"  # 如果要在開機(jī)之后執(zhí)行命令可以這樣子做
    expose:
        - 80

haproxy:            # 第三方容器
    image: haproxy:latest   # 直接從鏡像啟動(dòng),而不是Dockerfile啟動(dòng)
    volumes:                # 掛載的卷
        - ./haproxy:/haproxy-override
    links:                  # 連接另外的容器
        - weba
        - webb:test.haofly.net  # 分配一個(gè)別名搬瑰,都能ping通的
        - webc
    ports:                  # 映射的端口
        - "80:80"
    expose:                 # 暴露的端口
        - "80"

docker-compose常用命令

docker-compose stop     # 暫停所有容器
docker-compose up -d    # start所有的容器
docker-compose rm -f    # 刪除所有容器
docker-compose ps       # 列出所有的容器

遷移

docker save -o ubuntu_14.04.tar ubuntu:14.04  # 導(dǎo)出鏡像到本地
docker load < ubuntu_14.04.tar   # 加載本地鏡像
docker export 容器ID > ubuntu.tar # 導(dǎo)出容器快照到本地
docker import # 導(dǎo)入本地快照
docker commit -m "說明信息" -a "用戶信息" # 更改容器后直接將容器作為鏡像

# 如果要將本地鏡像推送到目標(biāo)倉庫款票,這樣做
docker login hub.haofly.net # 先登錄
docker tab image_id hub.haofly.net/haofly/test:tag  # 更改名稱
docker push hub.haofly.net/haofly/test:tag  # 推送

常用容器/鏡像

Alpine

是一個(gè)非常簡單的鏡像控硼,本身只有幾兆,包含了linux最簡單的內(nèi)核艾少,并且功能十分強(qiáng)大卡乾。很多的基礎(chǔ)鏡像都是基于它。當(dāng)然缚够,有一點(diǎn)特別注意幔妨,它沒有自帶apt-get,也沒有bash(sh代替)谍椅。不過還好误堡,也能使用阿里的鏡像源。這里有它里面的一些基本操作

apk add --update    # 更新源
apt add --no-cache python   # 安裝軟件
apt del python          # 刪除軟件

MySQL/Mariadb容器

docker run --name some-mariadb -v /Users/haofly/workspace/share:/share --net host -e MYSQL_ROOT_PASSWORD=mysql -d mariadb:tag   # 開啟一個(gè)mysql容器雏吭,可通過exec bash進(jìn)入容器內(nèi)

PHP容器

docker run --name php-apache -v /Users/haofly/workspace/share/yangqing:/var/www/html -p 80:80 --link some-mysql:mysql -d b664eb500b48 # 這是php-apache锁施,并且連接mysql容器,如果要安裝mysql擴(kuò)展需要在Dockerfile里面去安裝

CentOS容器

docker run -it -v /Users/haofly/workspace/dbm:/share --name dbm -d index.alauda.cn/library/centos:centos6.6 /bin/bash
docker run -it -v /Users/haofly/workspace/share:/share --name salt_client --privileged 750109855bc0 /usr/sbin/init  # 對于7.x,如果想在容器里執(zhí)行systemctl杖们,需要添加privileged參數(shù)悉抵,并且后面應(yīng)該用init

NodeJS容器

docker run -it -v /Users/haofly/workspace:/workspace -p 4000:4000 -p 4001:4001 --name node -d node:latest /bin/bash

Nginx代理

太好用了,這個(gè)

# 首先摘完,直接拉下這個(gè)鏡像并創(chuàng)建容器
docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro  --name nginx-proxy jwilder/nginx-proxy:latest

docker run -it -e VIRTUAL_HOST=dev.haofly.net --name dev -d eboraas/laravel # 通過-e VIRTUAL_HOST指定域名姥饰,然后把該域名加到hosts里面127.0.0.1  dev.haofly.net,即可訪問了描焰,連nginx的配置都不用改
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末媳否,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子荆秦,更是在濱河造成了極大的恐慌篱竭,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件步绸,死亡現(xiàn)場離奇詭異掺逼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瓤介,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門吕喘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人刑桑,你說我怎么就攤上這事氯质。” “怎么了祠斧?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵闻察,是天一觀的道長。 經(jīng)常有香客問我,道長辕漂,這世上最難降的妖魔是什么呢灶? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮钉嘹,結(jié)果婚禮上鸯乃,老公的妹妹穿的比我還像新娘。我一直安慰自己跋涣,他們只是感情好缨睡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仆潮,像睡著了一般宏蛉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上性置,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音揍堰,去河邊找鬼鹏浅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛屏歹,可吹牛的內(nèi)容都是我干的隐砸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蝙眶,長吁一口氣:“原來是場噩夢啊……” “哼季希!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起幽纷,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤式塌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后友浸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體峰尝,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年收恢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了武学。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伦意,死狀恐怖火窒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情驮肉,我是刑警寧澤熏矿,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響曲掰,放射性物質(zhì)發(fā)生泄漏疾捍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一栏妖、第九天 我趴在偏房一處隱蔽的房頂上張望乱豆。 院中可真熱鬧,春花似錦吊趾、人聲如沸宛裕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揩尸。三九已至,卻和暖如春屁奏,著一層夾襖步出監(jiān)牢的瞬間岩榆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工坟瓢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留勇边,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓折联,卻偏偏與公主長得像粒褒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子诚镰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

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

  • Docker — 云時(shí)代的程序分發(fā)方式 要說最近一年云計(jì)算業(yè)界有什么大事件奕坟?Google Compute Engi...
    ahohoho閱讀 15,534評論 15 147
  • 0. 前言 docker是什么?docker是用GO語言開發(fā)的應(yīng)用容器引擎清笨,基于容器化月杉,沙箱機(jī)制的應(yīng)用部署技術(shù)『睿可...
    sessionboy閱讀 3,854評論 2 49
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 8,750評論 1 21
  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一沙合、Docker 簡介 Docke...
    極客圈閱讀 10,501評論 0 120
  • 今天是預(yù)產(chǎn)期,寶寶留級了跌帐! 雖然很期待首懈,希望順其自然,寶寶健健康康的到來谨敛! 學(xué)習(xí)力就是生產(chǎn)力究履,一點(diǎn)不假,懂學(xué)習(xí)脸狸,會(huì)...
    馨雅心向未來閱讀 144評論 0 0