Docker入門

一直對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) # 刪除所有虛擬機
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章