daocloud道客眾籌以太坊
Ⅰ 如何製作一個定製的 PHP 基礎 Docker 鏡像
選擇 Ubuntu 官方的 14.04 版本為我們依賴的系統鏡像。
dockerfile
FROM ubuntu:trusty
因所有官方鏡像均位於境外伺服器,為了確保所有示例能正常運行,DaoCloud 提供了一套境內鏡像源,並與官方源保持同步。如果使用 DaoCloud 的鏡像源,則指向:FROM cloud.io/ubuntu:trusty
設置鏡像的維護者,相當於鏡像的作者或發行方。
dockerfile
MAINTAINER Captain Dao <[email protected]>
用 RUN 命令調用 apt-get 包管理器安裝 PHP 環境所依賴的程序包。
安裝依賴包相對比較固定,因此該動作應該盡量提前,這樣做有助於提高鏡像層的復用率。
dockerfile
RUN apt-get update \
&& apt-get -y install \
curl \
wget \
apache2 \
libapache2-mod-php5 \
php5-mysql \
php5-sqlite \
php5-gd \
php5-curl \
php-pear \
php-apc \
用 RUN 命令調用 Linux 命令對 Apache 服務和 PHP 參數進行配置。
dockerfile
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf \
用 RUN 命令調用 mkdir 來准備一個干凈的放置代碼的目錄。
dockerfile
RUN mkdir -p /app && rm -rf /var/www/html && ln -s /app /var/www/html
將本地的代碼添加到目錄,並指定其為當前的工作目錄。
dockerfile
COPY . /app
WORKDIR /app
設置啟動腳本的許可權,指定暴露的容器內埠地址。
最後指定容器啟動的進程。
dockerfile
RUN chmod 755 ./start.sh
EXPOSE 80
CMD ["./start.sh"]
至此一個 PHP 的基礎鏡像製作完畢,你可以在本地運行 docker build -t my-php-base . 來構建出這個鏡像並命名為 my-php-base 。
由於網路環境的特殊情況,在本地運行 docker build 的時間會很長,並且有可能失敗。推薦使用 DaoCloud 加速器 和 DaoCloud 的雲端 代碼構建 功能。
完整 Dockerfile
``` dockerfile
Ubuntu 14.04,Trusty Tahr(可靠的塔爾羊)發行版
FROM ubuntu:trusty
道客船長榮譽出品
MAINTAINER Captain Dao < [email protected] >
APT 自動安裝 PHP 相關的依賴包,如需其他依賴包在此添加
RUN apt-get update \
&& apt-get -y install \
curl \
wget \
apache2 \
libapache2-mod-php5 \
php5-mysql \
php5-sqlite \
php5-gd \
php5-curl \
php-pear \
php-apc \
# 用完包管理器後安排打掃衛生可以顯著的減少鏡像大小
&& apt-get clean \
&& apt-get autoclean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
# 安裝 Composer,此物是 PHP 用來管理依賴關系的工具
# Laravel Symfony 等時髦的框架會依賴它
&& curl -sS https://getcomposer.org/installer \
| php -- --install-dir=/usr/local/bin --filename=composer
Apache 2 配置文件:/etc/apache2/apache2.conf
給 Apache 2 設置一個默認服務名,避免啟動時給個提示讓人緊張.
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf \
# PHP 配置文件:/etc/php5/apache2/php.ini
# 調整 PHP 處理 Request 里變數提交值的順序,解析順序從左到右,後解析新值覆蓋舊值
# 默認設定為 EGPCS(ENV/GET/POST/COOKIE/SERVER)
&& sed -i 's/variables_order.*/variables_order = "EGPCS"/g' \
/etc/php5/apache2/php.ini
配置默認放置 App 的目錄
RUN mkdir -p /app && rm -rf /var/www/html && ln -s /app /var/www/html
COPY . /app
WORKDIR /app
RUN chmod 755 ./start.sh
EXPOSE 80
CMD ["./start.sh"]
Ⅱ DaoCloud和雲雀到底誰家的技術比較強一些
這個在家教TV或者是漫畫裡面根本沒有提到過,父母身世甚的。
要營造一種神秘氣氛,一切真相大白的話雲雀也不會有那麼多人喜歡了。
Ⅲ 阿里雲,cloud的docker是啥os/docker 注意事項
Docker是Docker.Inc公司開源的一個基於輕量級虛擬化技術的容器引擎項目,整個項目基於Go語言開發,並遵從Apache 2.0協議。通過分層鏡像標准化和內核虛擬化技術,Docker使得應用開發者和運維工程師可以以統一的方式跨平台發布應用,並且以幾乎沒有額外開銷的情況下提供資源隔離的應用運行環境。由於眾多新穎的特性以及項目本身的開放性,Docker在不到兩年的時間里迅速獲得諸多IT廠商的參與,其中更是包括Google、Microsoft、VMware等業界行業領導者。同時,Docker在開發者社區也是一石激起千層浪,許多如我之碼農紛紛開始關注、學習和使用Docker,許多企業,尤其是互聯網企業,也在不斷加大對Docker的投入,大有掀起一場容器革命之勢。
Docker鏡像命名解析
鏡像是Docker最核心的技術之一,也是應用發布的標准格式。無論你是用docker pull image,或者是在Dockerfile裡面寫FROM image,從Docker官方Registry下載鏡像應該是Docker操作裡面最頻繁的動作之一了。那麼在我們執行docker pull image時背後到底發生了什麼呢?在回答這個問題前,我們需要先了解下docker鏡像是如何命名的,這也是Docker裡面比較容易令人混淆的一塊概念:Registry,Repository, Tag and Image。
下面是在本地機器運行docker images的輸出結果:
我們可以發現我們常說的「ubuntu」鏡像其實不是一個鏡像名稱,而是代表了一個名為ubuntu的Repository,同時在這個Repository下面有一系列打了tag的Image,Image的標記是一個GUID,為了方便也可以通過Repository:tag來引用。
那麼Registry又是什麼呢?Registry存儲鏡像數據,並且提供拉取和上傳鏡像的功能。Registry中鏡像是通過Repository來組織的,而每個Repository又包含了若干個Image。
Registry包含一個或多個Repository
Repository包含一個或多個Image
Image用GUID表示,有一個或多個Tag與之關聯
那麼在哪裡指定Registry呢?讓我們再拉取一個更完整命名的鏡像吧:
上面我試圖去拉取一個ubuntu鏡像,並且指定了Registry為我本機搭建的私有Registry。下面是Docker CLI中pull命令的代碼片段 (docker/api/client/command.go中的CmdPull函數)
在運行時,上面的taglessRemote變數會被傳入localhost:5000/ubuntu。上面代碼試圖從taglessRemote變數中解析出Registry的地址,在我們的例子中,它是localhost:5000。
那我們回過頭再來看看下面這個耳熟能詳的pull命令背後的故事吧:
我們跟著上面的示例代碼,進一步進入解析函數ResolveRepositoryName的定義代碼片段(docker/registry/registry.go)
我們發現,Docker CLI會判斷傳入的taglessRemote參數的第一部分中是否包含』.』或者':』,如果存在則認為第一部分是Registry地址,否則會使用Docker官方默認的Registry(即index.docker.io其實這里是一個Index Server,和Registry的區別留在後面再去深究吧),即上面代碼中高亮的部分。背後的故事還沒有結束,如果你向DockerHub上傳過鏡像,應該記得你上傳的鏡像名稱格式為user-name/repository:tag,這樣用戶Bob和用戶Alice可以有相同名稱的Repository,通過用戶名前綴作為命名空間隔離,比如Bob/ubuntu和Alice/ubuntu。官方鏡像是通過用戶名library來區分的,具體代碼片段如下(docker/api/client/command.go中的CmdPull函數)
我們回過頭再去看Docker命令行中解析Tag的邏輯吧(docker/api/client/command.go中的CmdPull函數):
代碼會試著在用戶輸入的Image名稱中找』 : 『後面的tag,如果不存在,會使用默認的『DEFAULTTAG』,即『latest』。
也就是說在我們的例子裡面,命令會被解析為下面這樣(注意,下面的命令不能直接運行,因為Docker CLI不允許明確指定官方Registry地址)
配置Registry Mirror
Docker之所以這么吸引人,除了它的新穎的技術外,圍繞官方Registry(Docker Hub)的生態圈也是相當吸引人眼球的地方。在Docker Hub上你可以很輕松下載到大量已經容器化好的應用鏡像,即拉即用。這些鏡像中,有些是Docker官方維護的,更多的是眾多開發者自發上傳分享的。而且你還可以在Docker Hub中綁定你的代碼託管系統(目前支持Github和Bitbucket)配置自動生成鏡像功能,這樣Docker Hub會在你代碼更新時自動生成對應的Docker鏡像,是不是很方便?
不幸的是Docker Hub並沒有在國內放伺服器或者用國內的CDN,下載個鏡像20分鍾最起碼,我等碼農可耗不起這么長時間,老闆正站在身後催著我們搬運代碼呢。為了克服跨洋網路延遲,一般有兩個解決方案:一是使用私有Registry,另外是使用Registry Mirror,我們下面一一展開聊聊.
方案一就是搭建或者使用現有的私有Registry,通過定期和Docker Hub同步熱門的鏡像,私有Registry上保存了一些鏡像的副本,然後大家可以通過docker pull private-registry.com/user-name/ubuntu:latest,從這個私有Registry上拉取鏡像。因為這個方案需要定期同步Docker Hub鏡像,因此它比較適合於使用的鏡像相對穩定,或者都是私有鏡像的場景。而且用戶需要顯式的映射官方鏡像名稱到私有鏡像名稱,私有Registry更多被大家應用在企業內部場景。私有Registry部署也很方便,可以直接在Docker Hub上下載Registry鏡像,即拉即用,具體部署可以參考官方文檔。
方案二是使用Registry Mirror,它的原理類似於緩存,如果鏡像在Mirror中命中則直接返回給客戶端,否則從存放鏡像的Registry上拉取並自動緩存在Mirror中。最酷的是,是否使用Mirror對Docker使用者來講是透明的,也就是說在配置Mirror以後,大家可以仍然輸入docker pull ubuntu來拉取Docker Hub鏡像,除了速度變快了,和以前沒有任何區別。
了以更便捷的方式對接Docker Hub生態圈,使用Registry Mirror自然成為我的首選。接下來我就和大家一起看看Docker使用Mirror來拉取鏡像的過程。下面的例子,我使用的是由DaoCloud提供的Registry Mirror服務,在申請開通Mirror服務後你會得到一個Mirror地址,然後我們要做的就是把這個地址配置在Docker Server啟動腳本中,重啟Docker服務後Mirror配置就生效了(如何獲得Mirror服務可以參考本篇文章的附錄)
Ubuntu下配置Docker Registry Mirror的命令如下:
sudo echo 「DOCKER_OPTS=\」\$DOCKER_OPTS –registry-mirror=http://your-id.m.cloud.io -d\」」 >> /etc/default/docker
sudo service docker restart
如果你是用的Boot2Docker,配置命令為:
# 進入Boot2Docker Start Shell,並執行
sudo su
echo 「EXTRA_ARGS=\」–registry-mirror=http://your-id.m.cloud.io\」」 >> /var/lib/boot2docker/profile
exit
# 重啟Boot2Docker
配置好Registry Mirror後,就可以拉取Docker鏡像了,經我測試,使用DaoCloud的Mirror後,拉取常見鏡像的速度可以達到1.5M左右,具體速度在你的網路環境可能會略有不同。
我們來看看配置了Registry Mirror後,Docker拉取鏡像的過程吧。首先是CLI拉取鏡像命令代碼片段(docker/api/client/command.go中的CmdPull函數)
首先,Docker CLI會試圖獲得授權,在我們的例子中會向https://index.docker.io/v1請求認證,認證完成後,認證伺服器會返回一個對應的Token。注意,這里用戶認證與配置的Registry Mirror完全無關,這樣我們就不用擔心使用Mirror的安全問題了。接著Docker CLI會調用Docker Server(即Docker daemon程序)的創建鏡像命令,Docker Server隨之會執行具體的拉取鏡像動作,代碼片段如下(docker/graph/pull.go的pullRepository函數)
從代碼中可以發現,如果配置了Registry Mirror,Docker Server會首先從Mirror中拉取鏡像,如果Mirror拉取失敗會退而求其次從鏡像中指定的Registry拉取。大家又可以鬆口氣了,就算配置的Registry Mirror失效,也不會影響用戶拉取鏡像,只不過速度就。。。
鏡像拉下來後,就可以運行容器了
Ⅳ 怎麼配置docker從cloud拉取鏡像
查看下docker
registry的文章,就是docker
設置一下私有倉庫
Ⅳ docker怎麼配置cloud
安裝Docker
安裝 Docker 官方的最新發行版, 支持 Ubuntu 12.04 以上版本
curl -sSL https://get.cloud.io/docker | sh
安裝完成後:
+ sh -c docker version
Client:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5
Built: Fri Nov 20 13:12:04 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5
Built: Fri Nov 20 13:12:04 UTC 2015
OS/Arch: linux/amd64
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:
sudo usermod -aG docker your-user
Remember that you will have to log out and back in for this to take effect!
安裝過程結束後,可執行下面命令驗證安裝結果。如果看到輸出 dockerstart/running 就表示安裝成功。
sudo service docker status
運行結果:
$ sudo service docker status
docker start/running, process 10692
安裝主機監控程序
curl -sSL https://get.cloud.io/monit/install.sh | sh -s 7a6d83cbe808b4注意這里是私有的5fbcc77d451d82f
什麼是主機監控程序?
主機監控程序可以幫助您將主機接入到 DaoCloud 智能分發網路中,通過調用 DockerAPI 管理您的容器。
安裝Kitematic
Kitematic 可以讓你以最簡單的方式在你的 Mac 電腦上開始使用 Docker 容器。是一個簡單的 Docker 容器管理程序。
如何使用
啟動Kitematic之後,我們就啟動了Docker VM進程。關閉Kitematic我們會自動退出Docker VM進程。我們也可以使用docker-machine start來啟動Docker VM。
在Kitematic中,啟動之前安裝好的monit,我們就可以使用 pull來代替docker pull命令了。
docker-machine start default (啟動Kitematic就相當於這個)
docker-machine ssh default (然後我們可以直接ssh到default)
pull tensorflow/tensorflow:latest
得到如下的反饋:
�7�4 ~ docker-machine ssh default
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.8.1, build master : 7f12e95 - Thu Aug 13 03:24:56 UTC 2015
Docker version 1.8.1, build d12ea79
docker@default:~$
然後看看有哪些鏡像和容器:
docker@default:~$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
cloud.io/cloud/cloud-toolset latest 02ff2e9e58d7 4 weeks ago 145.8 MB
ptimof/ghost latest 1722fa005568 4 weeks ago 351.2 MB
tensorflow/tensorflow latest 4f849d71dfa0 7 weeks ago 653.1 MB
docker@default:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2640b244f3c8 cloud.io/cloud/monit "/usr/local/bin/mo" 6 weeks ago Up 5 minutes monit
假如我們要運行之前安裝的TensorFlow,則可以
docker run -it tensorflow/tensorflow
root@01dc70bc523f:~#
這樣,我們就進入了tensorflow容器內部,可以迅速開始深度學習之旅啦!
Ⅵ DaoCloud是否藉助Docker成功,看這幾條就夠了
DaoCloud是否藉助Docker成功,看這幾條就夠了
安裝完成後:
+ sh -c docker version
Client:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5
Built: Fri Nov 20 13:12:04 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5
Built: Fri Nov 20 13:12:04 UTC 2015
OS/Arch: linux/amd64
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:
Ⅶ boot2docker怎麼使用cloud加速
安裝Docker 安裝 Docker 官方的最新發行版, 支持 Ubuntu 12.04 以上版本 curl -sSL https://get.cloud.io/docker | sh 安裝完成後: + sh -c docker version Client: Version: 1.9.1 API version: 1.21 Go version: go1.4.2 Git commit:
Ⅷ 好雨雲和靈雀雲,時速雲,DaoCloud這些Docker平台有什麼不一樣
主要是開發管理框架的不同吧,時速雲主要用的是K8s,其他家用的Swarm,Mesos等
Ⅸ 怎麼配置docker從cloud拉取鏡像
查看下docker registry的文章,就是docker 設置一下私有倉庫
Ⅹ 時速雲,靈雀雲,DaoCloud哪家比較好用
時速雲目前也不錯,相比大公司來說使用的費用低很多。
