這些天了解了現在流行的容器技術Docker,主要是參考這個系列的博客 http://www.cnblogs.com/CloudMan6/tag/Docker/ 還有Docker中文網 http://www.docker.org.cn
本篇博客主要講一些命令的操作,至於原理性的東西就不多講了,這些在網上都可以找到,本篇博客主要是記錄一些命令的操作,用於以后用到可以方便的查到。命令是用到的時候再查的,不過原理性的概念還是要了解的,docker這個東西使用的時候不難,沒有多少要學的。重要是了解Docker概念后,根據實際項目在進行配置即可。現在了解只是為了以后快速使用而已。
1. 安裝
系統使用的是Debian 8.8,先配置Docker的apt源。
apt-get install apt-transport-https ca-certificates curl software-properties-common
增加Docker 官方的GPG
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
注意后面的 - 號, 這里使用ubuntu的gpg
將Docker的源添加到 /etc/apt/sources.list
add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable”
使用Aliyun源
https://yq.aliyun.com/articles/110806?spm=5176.8351553.0.0.1cbe1991CFEvea
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
安裝Docker
apt-get update apt-get install docker-ce
查看是否安裝成功
service docker status docker version


2. 加速
由於Docker Hub的服務器是在國外,下載鏡像(image)時會比較慢,有時候網絡斷開還要重新下載,好在Docker提供私服功能,國內就有好多家公司提供了這樣的服務。這里使用 daocloud.io 提供的服務。首先在daocloud.io免費注冊一個用戶。然后在用戶管理界面哪里有個加速器( https://www.daocloud.io/mirror#accelerator-doc )

運行命令后,重啟Docker即可。
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://71***3.m.daocloud.io service docker restart
3. 運行第一個容器Docker
docker run -d -p 80:80 httpd #運行后自動從服務器上下載image,然后以后台方式運行容器。 docker images #進行查看 docker ps #查看運行情況
然后訪問本地的Web服務器

Docker 架構圖

4. 基本操作
docker run -it centos #下載並以命令行運行centos
進入后,可以在里面進行操作,基本的操作跟在一台Linux主機上操作是一樣的,沒有什么區別。如果在容器(Container)里面退出的話,對應的容器也就關閉,假設進入后,還沒有退出來。新建一個控制台,然后在里面輸入docker ps 就可以查看當前真正運行的容器實例。在容器里面的所有操作,都是暫時的,如果操作后,退出容器,那么是不進行保存的。如果想保存,那么要在另外的控制台用命令保存當前運行的容器,生成一個鏡像(image).至於原理性的東西,請參考具體的文章。
在新的控制台中輸入 docker ps 查看當前運行的容器,記住運行的Container ID,然后通過下面命令對當前運行的容器生成一個快照鏡像(Image)
docker commit 17022396134b centos-new # docker commit ContainerID new-ContainerName
這樣就生成一個鏡像了。由於容器是分層的,這里保存會很快。然后通過 docker images 可以查看剛才保存的鏡像。
5. 通過Dockerfile構建鏡像
通過Dockerfile方式構建鏡像,底層通過解析Dockerfile文件一條一條命令進行docker commit 一層一層構建新鏡像。Docker的分層架構,可以具體去了解一下,設計的很好。
創建一個簡單的Dockerfile文件
然后在Dockerfile 文件中輸入以下內容
FROM ubuntu RUN sed -i ‘s/archive.ubuntu/mirrors.aliyun/g’ /etc/apt/sources.list #這里用阿里雲(網易163)的開源鏡像服務器,會快一點。 RUN apt-get update && apt-get install -y vim COPY testfile /
命令行輸入命令
docker build -t ubuntu-with-vi-dockerfile .
注意后面的點. 表示從當前目錄查找Dockerfile文本文件,然后鏡像構建。
然后可以通過 docker images 查看,可以通過 docker history ubuntu-with-vi-dockerfile 查看當前鏡像的歷史修改信息。
關於Dockerfile語法還比較多,還有很多高級操作,不過我覺得,這個在實際項目中有需要再去查,然后使用即可,這里就不展開說明。
6. 建立私服
這個還是蠻重要的一部分,大部分實際項目都會通過這種方式進行內網部署。雖然現在很多雲服務,大部分也通過這種方式進行部署,但是通過網絡鏡像雲部署的,對於個人項目和曉欣項目比較多。稍微復雜一點的,一般公司都會自己組建服務器,即使使用雲主機,也是會部署在雲主機內網里,不大會將鏡像放到外網。
下面就介紹如何搭建私服。
首先下載Docker Hub上官方鏡像registry,這個也是Docker image ,是官方提供的。
docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:latest
由於使用-d參數,所以是后台運行。
docker ps

可以看到私服就這樣啟動了,是不是很容易,這就是Docker容器化的優勢。
我們對剛才下載的httpd 復制一份,命名一個新tag。
docker tag httpd:latest localhost-httpd #錯誤,如果要保存在本地,需要填寫對於的域名 docker tag httpd:latest localhost:5000/myuser/httpd

這樣就復制了一個,可以通過push 命令推送到本地倉庫。
如果省略域名就會默認推送的docker.io上了。(docker push localhost-httpd:latest)
docker push localhost:5000/myuser/httpd

這樣就表示推送到本地倉庫了。可以在本地的 /myregistry 查看

新開了一個虛擬機,然后通過遠程下載對應的鏡像。

但是發現好像不能用http,只能用https,我們需要修改一些配置。現在的最新版本修改 /etc/docker/daemon.json 這個配置文件.打開后可以看到里面有我們之前寫入的daocloud.io這個加速用的網址。我們在其后面加上如下配置:
{ “insecure-registries” : [“192.168.56.150”] } 服務器端和客戶端都要進行配置。配置后如下顯示

然后 service docker restart # 重啟Docker 要注意看registry 是否還啟動着,如果沒有,要重新啟動。因為重啟Docker ,Docker會stop 正在運行的容器,可以試着docker start ID

7. 多說兩句
其他高級使用,如使用Docker 自帶的對硬件的限制功能。使用Docker-Compose來管理Docker集群等高級功能。
參加工作后,現在沒有很多連續的時間,很難像以前那樣做一個系列的博客文章。只能利用有空的時間,看一些比較前沿的計算,然后簡單的了解一下而已,並不能很好的深入,現在的想法是能學點就多學點,多了解一些,等實際工作中有機會用到的話,再進行深入理解。平時沒事,就看看,了解了解。
參考資料:
http://www.docker.org.cn/book/docker/what-is-docker-16.html
http://www.cnblogs.com/CloudMan6/tag/Docker/
http://www.cnblogs.com/zuoxiaobing/p/6259029.html
