一直對docker很感興趣,今天按照官網的Guides學習一個。
安裝
我的機器是騰訊雲1元學生主機,centos,香港節點,還能當梯子,美滋滋。安裝就不多說了,按官網來就行了,直接Get Started。
Get Started
part 1
這一節講起源,主要是docker和傳統虛擬機的區別,我的理解是傳統虛擬機完整的模擬出一個操作系統,每個虛擬機都有一個系統,通過一個hypervisor來管理。而docker利用Linux namespace,cgroup等技術,共享一個內核。
part 2
這一節講容器(Containers)。
Dockerfile
dockerfile定義了一個容器裏有什麼東西,直接複製官網的就好。
然後寫一個python文件,一個依賴文件。
docker build -t friendlyhello .
docker build創建一個鏡像 -t選項用來命名。
docker run -p 4000:80 friendlyhello
這樣一個容器就跑起來了,本地4000端口對應容器80端口。
常用命令
docker build -t friendlyname . # 根據Dockerfile創建鏡像
docker run -p 4000:80 friendlyname #運行"friendlyname"端口映射4000到80
docker run -d -p 4000:80 friendlyname #後臺運行
docker container ls # 列出所有容器
docker container ls -a # 列出所有容器,包括不在運行的
docker container stop <hash> #終止某個容器
docker container kill <hash> # 強制停止某個容器
docker container rm <hash> # 刪除某個容器
docker container rm $(docker container ls -a -q) #刪除所有容器
docker image ls -a # 列出所有鏡像
docker image rm <image id> # 刪除某個鏡像
docker image rm $(docker image ls -a -q) # 刪除所有鏡像
docker login # 登錄docker賬號
docker tag <image> username/repository:tag #給要上傳的鏡像打標籤
docker push username/repository:tag # 上傳鏡像到倉庫
docker run username/repository:tag # 運行倉庫的鏡像
part 3
這一節講服務(Services)。
首先要裝一個Docker Compose,這個是用來跑多個容器的,通過寫一個YAML文件來配置一個多容器的服務。一個服務只跑一個鏡像,可以有多個容器。複製它的docker-compose.yml文件。
docker stack deploy -c docker-compose.yml getstartedlab
這樣就運行了一個服務,由5個容器組成,自動負載均衡。
這一節還有幾個名詞
stack:stack是一組可以一起管理的相互關聯的服務。
task:服務中運行的單個容器叫task。
常用命令
docker stack ls # 列出stack
docker stack deploy -c <composefile> <appname> # 運行Composefile
docker service ls # 列出正在運行的services
docker service ps <service> # 列出stack中的task
docker inspect <task or container> # 查看container信息
docker container ls -q # 列出container的id
docker stack rm <appname> # 銷燬stack
docker swarm leave --force # 離開swarm集羣
part 4
這一節介紹swarm集羣,swarm是一組運行docker的機器,機器可以使虛擬機或物理機。
docker-machine:docker-machine命令可以創建虛擬機並安裝docker。
這個命令需要virtualbox,由於雲主機已經是虛擬化的東西了,這個命令跑不起來。
docker swarm init創建集羣併成爲管理節點,docker swarm join 加入集羣。
docker-machine create --driver virtualbox myvm1 # 創建一個虛擬機(Mac, Win7, Linux)
docker-machine env myvm1 #查看節點的基本信息
docker-machine ssh myvm1 "docker node ls" #列出swarm節點
docker-machine ssh myvm1 "docker node inspect <node ID>" # 查看某個節點
docker-machine ssh myvm1 "docker swarm join-token -q worker" # 查看token
docker-machine ssh myvm1 # ssh到虛擬機
docker node ls # 列出swarm節點
docker-machine ssh myvm2 "docker swarm leave" # worker節點離開swarm集羣
docker-machine ssh myvm1 "docker swarm leave -f" # master節點離開集羣,
docker-machine ls # 列出虛擬機
docker-machine start myvm1 # 啓動虛擬機
docker-machine env myvm1 # 查看環境變量
eval $(docker-machine env myvm1) # 連接虛擬機shell
docker stack deploy -c <file> <app> # 部署app
docker-machine ssh myvm1 "docker stack deploy -c <file> <app>" #ssh部署
eval $(docker-machine env -u) # 斷開虛擬機的shell
docker-machine stop $(docker-machine ls -q) # 停止所有虛擬機
docker-machine rm $(docker-machine ls -q) # 刪除所有虛擬機