查找鏡像,下載鏡像
Docker Hub查找有哪些公共的可用鏡像時陵像,可以使用如下命令:
docker search [keywords] 根據(jù)keywords查找鏡像
docker pull [Name] 下載列表中為Name的鏡像
docker run -t -i [Name] /bin/bash 開始啟用該鏡像
docker run -d -p 8080:80 -p 3306:3306 tutum/lamp run攜帶參數(shù)包括運行時端口映射
創(chuàng)建自己的鏡像
在上面的內(nèi)容中,我們已經(jīng)了解了如下查詢犀填,拉取蠢壹,運行鏡像,那么接下來我們將會繼續(xù)學習如何修改九巡、更新和管理自己的鏡像。
構(gòu)建鏡像的方式有以下兩種:
使用docker commit
使用docker build和Dockerfile文件
使用docker commit更新并且提交鏡像
更新一個鏡像蹂季,首先我們要運行一個我們想更新的容器,然后做好相應(yīng)的更改后(例如install nignx)冕广。
輸入exit命令來退出這個容器
使用docker commit來提交這個容器
$ docker commit -m="Added json gem" -a="Kate Smith" \
0b2616b0e5a8 ouruser/sinatra:v2
4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c
這里我們使用了docker commit命令。我們可以指定-m和-a標示偿洁。-m標示是允許我們指定提交的信息撒汉,就像你提交一個版本控制。-a標示允許對我們的更新指定一個用戶涕滋。
我們也指定了我們想要創(chuàng)建的新鏡像來自(我們先前記錄的ID)0b2616b0e5a8和我們指定的
(用戶/目標鏡像:標簽):ouruser/sinatra:v2
接下來就可以在docker images中看到這個新的鏡像了
使用Dockerfile創(chuàng)建鏡像
使用docker commit命令能非常簡單的擴展鏡像睬辐,但是它有點麻煩:在一個團隊中不容易共享它的開發(fā)過程。
為此宾肺,我們創(chuàng)建一個Dockerfile溯饵,其中包含一組指令告訴docker如何創(chuàng)建我們的鏡像。
現(xiàn)在讓我們創(chuàng)建一個目錄锨用,并且創(chuàng)建一個Dockerfile文件并配置
$ mkdir sinatra
$ cd sinatra
$ vi Dockerfile
輸入(每個指令前綴都必須大寫)
# This is a comment
FROM ubuntu:14.04
MAINTAINER Kate Smith <ksmith@example.com>
RUN apt-get -qq update
RUN apt-get -qqy install ruby ruby-dev
RUN gem install sinatra
讓我們看看Dockerfile做了什么:第一個指令FROM丰刊,告訴Docker使用哪個鏡像源,在這個案例中我們使用了一個Ubuntu 14.04基礎(chǔ)鏡像增拥。下一步啄巧,我們使用MAINTAINER指令指定誰是維護者寻歧。最后,我們指定三個RUN指令秩仆,一個RUN指令在鏡像內(nèi)執(zhí)行命令码泛。例如安裝包。這里我們在Sinatra中更新了APT緩存澄耍,安裝了Ruby和RubyGems弟晚。
在一個文件夾中,如果有一個名字為Dockfile的文件逾苫,其內(nèi)容滿足語法要求卿城,在這個文件夾路徑下執(zhí)行命令:docker build --tag name:tag .
就可以按照描述構(gòu)建一個已有的為name:tag的鏡像了, 但也可以使用-f參數(shù)+ Dockfile路徑的方式指定Dockfile。
注意:這是比較簡單的創(chuàng)建鏡像方法铅搓。我們跳過了你可以使用的一大堆指令瑟押。在后面的部門我們將會看到更多的指令指南,或者你可以參考Dockerfile參考的例子和詳細描述每一個指令星掰。
Dockerfile中設(shè)置端口映射
docker run -tdi -p 80:80 --name apache_web basic_sys -p : hostip : host_port : docker_container's port
-p 從左往右的可以依次寫成宿主機IP多望,宿主機端口,容器的端口氢烘。
經(jīng)過上面的配置以后怀偷,此時訪問宿主機的80端口就等于訪問容器的80端口。
Dockerfile方式運行原理及更多配置項:
*Docker從基礎(chǔ)鏡像運行一個容器播玖。
*執(zhí)行一條指令椎工,對容器修改。
*執(zhí)行類似與docker commit的操作蜀踏,提交一個新的鏡像層维蒙。
*Docker再基于剛剛提交的鏡像運行一個新的容器。
*執(zhí)行Dockerfile中的下一條指令果覆,直到所有的指令執(zhí)行完畢, 刪除產(chǎn)生的中間鏡像層, 留下一個頂級的鏡像層颅痊。
更多配置項參考
Docker倉庫和共享
Docker倉庫
倉庫(Repository)是集中存放鏡像文件的場所。有時候會把倉庫和倉庫注冊服務(wù)器(Registry)混為一談局待,并不嚴格區(qū)分斑响。實際上,倉庫注冊服務(wù)器上往往存放著多個倉庫钳榨,每個倉庫中又包含了多個鏡像舰罚,每個鏡像有不同的標簽(tag)。
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式重绷。最大的公開倉庫是 Docker Hub沸停,存放了數(shù)量龐大的鏡像供用戶下載。國內(nèi)的公開倉庫包括 時速云 昭卓、網(wǎng)易云 等愤钾,可以提供大陸用戶更穩(wěn)定快速的訪問瘟滨。當然,用戶也可以在本地網(wǎng)絡(luò)內(nèi)創(chuàng)建一個私有倉庫能颁。
當用戶創(chuàng)建了自己的鏡像之后就可以使用 push 命令將它上傳到公有或者私有倉庫杂瘸,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 pull 下來就可以了伙菊。
Docker 倉庫的概念跟 Git 類似败玉,注冊服務(wù)器可以理解為 GitHub 這樣的托管服務(wù)。
項目組共享注意:
hub.docker.com上可以保存鏡像镜硕,但是網(wǎng)速相對較慢,所以一般選擇一臺服務(wù)器(內(nèi)外網(wǎng)地址)作為注冊服務(wù)器运翼,用于搭建私有倉庫實現(xiàn)公司企業(yè)項目內(nèi)共享,具體教程參考網(wǎng)上。