所需軟件
您需要在電腦中安裝 Oracle Virtual Box 和 Vagrant 。如果已經裝好,那我們就開始吧!
步驟1:創建 CentOS 虛擬機
在本地目錄(本文中使用 ~/vagrant 目錄)中創建一個 Vagrantfile 文件,內容如下:
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos65"
config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box"
config.vm.network :forwarded_port, guest: 80, host: 8080
config.vm.network :public_network
config.ssh.forward_agent = true
end
在這里,我就不解釋 Vagrant 和 Vagrantfile 了。 Vagrantfile 創建好后,在
Vagrantfile 所在目錄中再創建一個 htdocs 目錄並在其中創建一個 index.html 文件, html
文件內容如下:
This file is being server by http server running inside docker
container
Vagrantfile 文件和 htdocs 目錄都創建好了,現在我們來執行下面的命令:
vagrant up # 啟動虛擬機,這一步可能會讓我們選擇網卡
vagrant ssh # 虛擬機啟動后,通過ssh登陸到虛擬機中
步驟2:安裝 docker
執行下面的命令來安裝 docker :
sudo yum -y update # Update Installed packages
sudo yum install docker-io # Install Docker
sudo service docker start # Start Docker
步驟3:設置 Docker
Docker 需要一個基本的鏡像才能運行,我們的所有容器都是(直接或間接)基於這樣一個鏡像來運行的,下面的命令把一個基本鏡像
pull 到本地:
sudo docker pull centos # Download base image
步驟4:為我們的容器創建第一個鏡像
# 以 centos 鏡像作為基礎鏡像,我們啟動自己的容器並在其中執行/bin/bash命令
# 注:-t -i 參數用於創建一個虛擬的命令行。
sudo docker run -t -i centos /bin/bash
現在我們已經成功的運行了自己的第一個容器,並且進入到容器的命令行界面中。在容器中,我們執行下面的命令:
yum -y update # 更新軟件包
yum install which # 安裝which命令
yum install git # 安裝Git
安裝完成后,按 Ctrl + d 來退出容器的命令行。
# 執行sudo docker ps -a,可以看到被我們終止的容器
CONTAINER ID IMAGE
COMMAND
CREATED……
da9031d3568f centos:6.4
/bin/bash 5
minutes ago…..
把我們所做的改變提交到一個新的容器:
# 這里我們創建一個自己的基礎容器,容器中安裝好了文章中所需的常用工具。讀者的容器 id 可能與文章中的有所不同,以上一步
docker ps -a 的結果為准。
sudo docker commit da90 custom/base
容器成功提交后,執行 sudo docker images
,我們會看到剛才提交的容器(如下面的結果所示)。我們就以這個容器為基礎容器,再來創建一個新的容器。
REPOSITORY TAG
IMAGE ID
CREATED
custom/base latest
05b6cecd370b
2 minutes ago
centos 6.4
539c0211cd76 10 months ago
centos latest
539c0211cd76
10 months ago…
步驟5:創建新的容器,並安裝 apache
# 以 custom/base 容器為基礎,運行一個新的容器。
sudo docker run -t -i custom/base /bin/bash
# 安裝 httpd
yum install httpd
步驟6:再次提交新的容器
按 Ctrl + d 來退出容器的命令行,然后執行命令:
# 這個命令會把步驟5中我們安裝 httpd 帶來的改變提交到新的名為 custom/httpd 的容器鏡像中。你的容器 id
可能會和文章中有所不同,以 sudo docker ps -a 命令的結果為准。
sudo docker commit aa6e2fc0b94c custom/httpd
你應該已經發現了,我們創建了一個帶有 http
服務器並可以復用的容器鏡像。你可以根據這種思想,為自己所需的每個組件都創建一個容器,然后把這些容器復用於開發環境或者生產環境。
步驟7:運行 http 服務器
# -v will Mount a volume from VM to the container which was also
shared from host to Vagrant VM.
# -v 參數把主機共享給虛擬機的一個卷掛載到容器中
# -p forward VM port 80 to container port 80; VM port 80 is
mapped to host port 8080 in Vagrantfile
# -p 參數把虛擬機的80端口映射到容器的80端口;虛擬機的80端口在 Vagrantfile
中被綁定到主機的8080端口,也就是:主機8080->虛擬機80->容器80
sudo docker run -t -i -p 80:80 -v /vagrant/htdocs:/var/www/html
custom/httpd /bin/bash
# 啟動 Apache
apachectl -k start
步驟8:在瀏覽器中測試
在瀏覽器中瀏覽 http://localhost:8080 ,你應該可以看到步驟1中 html 文件的內容。
總結
我想,你現在一定已經感受到 Docker 的強大了。用 Docker
可以創建輕量級、可復用的鏡像,這樣的鏡像非常適合連續安裝軟件的情況。后面的文章中,我會教大家如何通過 Dockerfile
來完成本文中的工作,敬請期待。
譯者注:連續安裝軟件的情況,作者意思是指通過 Docker 鏡像中“層”( layer
)的概念,在連續的層中,每一層都安裝所需的一種或幾種軟件。