轉 如何在Docker容器中運行Apache服務器


?

素胚勾勒不出你

所需軟件

您需要在電腦中安裝 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

)的概念,在連續的層中,每一層都安裝所需的一種或幾種軟件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM