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

上一篇中,咱們對Docker有了一個基本的瞭解
下面將討論Docker中Image,Container的相關實際操做css

Image管理:mysql

鏡像的命名和版本管理:linux

普通鏡像的命名規範
{namespace}/{repository}:{tag}web

namespace是docker hub的用戶名
repository是項目名稱,如:Ubuntu,mysql等
tag表示版本信息,例如:cesc/mysql:5.5,tag是可選的,默認爲latestsql

顯示本地的imagesdocker

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:ruby

在Host看來,運行一個Container就是開啓一個獨立namespace進程而已bash

經過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有三種方式:

一、sshd
須要在Container中安裝sshd服務,而後經過ssh鏈接便可(安全性不高)

二、nsenter
由linux提供,用來進入一個進程的namespace

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

nsenter --target $pid --mount --uts --ipc --net --pid
//而後經過下面的命令進入Container

三、exec
是Docker新進入的一個命令,用來進入一個Container來運行一些指令

docker exec containerId commod args
相關文章
相關標籤/搜索