天天看點

Docker解析及輕量級PaaS平台演練(二)--Docker的一些簡單指令

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/qq1010885678/article/details/46291047

上一篇中,我們對Docker有了一個基本的了解

下面将讨論Docker中Image,Container的相關實際操作

Image管理:

鏡像的命名和版本管理:

普通鏡像的命名規範

{namespace}/{repository}:{tag}

namespace是docker hub的使用者名

repository是項目名稱,如:Ubuntu,mysql等

tag表示版本資訊,例如:cesc/mysql:5.5,tag是可選的,預設為latest

顯示本地的images

docker images           

我們可以通過docker指令從Docker Hub上拉取鏡像回本地:

docker pull {image name}
//如果沒有指定image的tag的話,會把該image的所有版本都下載下傳下來           

上傳鏡像:

docker login
//登陸到docker hub中

docker commit containerId
//将一個指定的Container打包成一個image,這時會傳回一個臨時的imageId(一大串)

docker tag imageId {namespace}/{repository}:{tag}
//根據imageId重命名image

docker push {namespace}/{repository}:{tag}
//push到docker hub           

運作Container:

在Host看來,運作一個Container就是開啟一個獨立namespace程序而已

通過docker run指令來啟動一個container,必須指定一個image作為初始化的檔案系統

docker run [options] image[:tag] [commond][args]
//[options]表示一些運作參數
//如-t,表示後面用哪個image作為template
//-d,表示背景運作等

//[commond],表示可以輸入一些linux指令 如ls等,作為container實際運作的首程序
//[args],表示上面的指令需要的參數,如-al           

如果-t 後面的image不存在本地的話,會自動到docker hub上下載下傳對應的image

docker run -d -t image[:tag]//-d讓container運作在背景

docker run -a stdin//預設是運作在前台的,會将輸入,輸出和錯誤資訊列印出來,通過-a來限制隻有stdin,這樣就看不到輸出和錯誤資訊了

docker attach containerId//将一個背景的container attach到前台

docker ps//檢視目前的container,用法和linux中的ps類似

docker inspect containerId//獲得指定container的所有資訊

docker logs containerId//檢視指定container的日志資訊           

網絡設定:

Docker預設使用橋接的方式,如下圖:

Host上對應每個Container都有veth{id}這樣的虛拟網卡,對應每個Container裡面的eth0,Host上的bridge負責将資料在各個veth中轉發,以達到通信的目的

docker run -dt --net none image[:tag] 
//none關閉網絡
//host使用主機網絡棧,将不做veth映射
//container:{containerId}使用另外一個container的網絡           

端口映射:

docker通過端口映射的方式,能夠将container内部的網絡端口暴露到外部

docker run -dt -p 80:8000 image[:tag] 
//将内部的80端口暴露出來,外部可以通過8000通路到,如果沒有指定外部對應的端口号,将會預設配置設定一個49000-49900之間的一個端口,可以通過docker ps來檢視自動配置設定的端口
           

Volume綁定:

通過-v參數可以将Host上的一個目錄綁定到container中,允許container對其進行讀寫

docker -dt -v /home/jchubby:/test image[:tag]
//将host上的/home/jchubby映射到container中的/test目錄           

環境變量設定:

既然container可以看成一個獨立的os,那麼肯定會有環境變量的設定

舉一個例子來說明:

有兩個container,a是提供資料庫服務的,b是web應用,那麼b要怎麼才能知道a的主機ip,端口等資訊,然後進行服務接入呢?

docker run --name mysql -dt image[:tag]
//通過--name為該container指定一個唯一的name

docker run --link mysql:db -dt image[:tag]
//通過link參數,可以将指定name(mysql)的container資訊以環境變量的方式加到目前的container中,:db是mysql的别名           

–link運作産生的環境變量結果如下:

如何進入Container:

每個Container都是一個獨立的os,我們可以像操作VM虛拟機一樣操作它

連接配接到Container有三種方式:

1、sshd

需要在Container中安裝sshd服務,然後通過ssh連接配接即可(安全性不高)

2、nsenter

由linux提供,用來進入一個程序的namespace

docker inspect --format "{{.State.Pid}}" <container-id>
//首先要獲得Container在host中的程序id

nsenter --target $pid --mount --uts --ipc --net --pid
//然後通過下面的指令進入Container           

3、exec

是Docker新進入的一個指令,用來進入一個Container來運作一些指令

docker exec containerId commod args