Docker實戰(二):製做本身的Docker鏡像

Docker實戰(二):製做本身的Docker鏡像

2015年11月17日 00:54:02 閱讀數:16520 標籤: Docker 更多html

我的分類: Dockerdocker

製做本身的Docker鏡像

製做本身的Docker鏡像主要有以下兩種方式:ubuntu

1.使用docker commit 命令來建立鏡像

  1. 經過docker run命令啓動容器
  2. 修改docker鏡像內容
  3. docker commit提交修改的鏡像
  4. docker run新的鏡像

2.使用 Dockerfile 來建立鏡像

使用 docker commit 來擴展一個鏡像比較簡單,可是不方便在一個團隊中分享。咱們可使用 docker build 來建立一個新的鏡像。爲此,首先須要建立一個 Dockerfile,包含一些如何建立鏡像的指令。bash

Dockerfile 基本的語法

  • 使用#來註釋
  • FROM 指令告訴 Docker 使用哪一個鏡像做爲基礎
  • 接着是維護者的信息
  • RUN開頭的指令會在建立中運行,好比安裝一個軟件包,在這裏使用 apt-get 來安裝了一些軟件

構建鏡像的步驟

1.新建一個目錄和一個 Dockerfile網絡

$ mkdir new_folder
$ cd new_folder
$ touch Dockerfile
  • 1
  • 2
  • 3

2.編寫Dockerfile,Dockerfile中每一條指令都建立鏡像的一層,例如:ssh

# 這裏是註釋
# 設置繼承自哪一個鏡像
FROM ubuntu:14.04
# 下面是一些建立者的基本信息
MAINTAINER birdben (191654006@163.com)
# 在終端須要執行的命令
RUN apt-get install -y openssh-server
RUN mkdir -p /var/run/sshd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3.編寫完成 Dockerfile 後可使用 docker build 來生成鏡像。ui

$ sudo docker build -t="birdben/ubuntu:v1" .
# 下面是一堆構建日誌信息

############
我是日誌
############

# 參數:
# -t 標記來添加 tag,指定新的鏡像的用戶和鏡像名稱信息。 
# 「.」 是 Dockerfile 所在的路徑(當前目錄),也能夠替換爲一個具體的 Dockerfile 的路徑。

# 以交互方式運行docker
$ docker run -it birdben/ubuntu:v1 /bin/bash

# 運行docker時指定配置
$ sudo docker run -d -p 10.211.55.4:9999:22 ubuntu:tools '/usr/sbin/sshd' -D

# 參數:
# -i:表示以「交互模式」運行容器,-i 則讓容器的標準輸入保持打開
# -t:表示容器啓動後會進入其命令行,-t 選項讓Docker分配一個僞終端(pseudo-tty)並綁定到容器的標準輸入上
# -v:表示須要將本地哪一個目錄掛載到容器中,格式:-v <宿主機目錄>:<容器目錄>,-v 標記來建立一個數據卷並掛載到容器裏。在一次 run 中屢次使用能夠掛載多個數據卷。
# -p:指定對外80端口
# 不必定要使用「鏡像 ID」,也可使用「倉庫名:標籤名」
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

Docker網絡

Docker的網絡功能相對簡單,沒有過多複雜的配置,Docker默認使用birdge橋接方式與容器通訊,啓動Docker後,宿主機上會產生docker0這樣一個虛擬網絡接口, docker0不是一個普通的網絡接口, 它是一個虛擬的以太網橋,能夠爲綁定到docker0上面的網絡接口自動轉發數據包,這樣可使容器與宿主機之間相互通訊。每次Docker建立一個容器,會產生一對虛擬接口,在宿主機上執行ifconfig,會發現多了一個相似veth****這樣的網絡接口,它會綁定到docker0上,因爲全部容器都綁定到docker0上,容器之間也就能夠通訊。spa

在宿主機上執行ifconfig,會看到docker0這個網絡接口, 啓動一個container,再次執行ifconfig, 會有一個相似veth****的interface,每一個container的缺省路由是宿主機上docker0的ip,在container中執行netstat -r能夠看到以下圖所示內容: 
container路由.net

在容器中使用netstat -r命令查看容器的IP地址命令行

容器中的默認網關跟docker0的地址是同樣的:

在宿主機中使用ifconfig查看docker0的IP地址

docker0 
當容器退出以後,veth*虛擬接口也會被銷燬。

參考文章:

相關文章
相關標籤/搜索