深入淺出Docker

2021-09-23 00:24:06 字數 4288 閱讀 5701

本文講的是深入淺出docker,

【編者的話】本文是一篇docker入門文章,作者介紹了docker相關的基礎知識,包括docker映象、dockerfile、docker容器、docker hub。然後作者使用docker搭建了乙個wordpress應用,基礎架構包含乙個nginx伺服器來路由/**請求、wordpress應用伺服器來部署應用以及mysql資料庫來提供儲存。初學docker的同學可以看看。

在持續整合這樣新的開發方**流行的今天,軟體工程師只是將**推送出去並且祈禱**能在另外的環境裡成功執行的日子已經一去不復返了。開發、測試和運維之間的傳統高牆正在逐漸瓦解,並且這些職責會互相滲透,從而造就了新型工程師。devops在業界流行,專案開發團隊越來越敏捷高效,並且能夠迅速響應變化。這樣的轉變使得新工具和框架隨之興起,幫助我們自動化地部署、測試和標準化基礎架構。

轉型浪潮的前端工具之一就是docker,docker是乙個開放的平台,幫助開發人員和系統管理員構建、發布並執行分布式應用。在進一步深入**實際經驗之前,推薦大家閱讀這篇文章:

《什麼是docker》

。在開始操作之前,你需要先安裝docker,我在mac上用boot2docker來安裝,更為詳細的適合你的平台的安裝指南請參考

docker安裝介紹

。另外,可以使用雲服務商來執行docker主機,digital ocean提供執行在雲端,並且可以使用docker的伺服器,只需要花費每小時0.007美元,要是你受限於頻寬或資源的話,這是個很好的解決方法。

docker映象

docker映象是乙個唯讀容器,例如ubuntu作業系統或者centos作業系統映象。在docker裡執行的每個容器都需要基於某個docker映象。

dockerfile

dockerfile

其實就是一些**指令,它告訴docker應該如何構建docker映象。docker映象是分層的,易於擴充套件,支援在已有的基礎映象上增加額外的功能。常用的基礎映象是ubuntu:latest,這是ubuntu版本的基礎映象。

docker容器

docker容器可以看成是執行著linux系統(通常精簡過的linux系統)的虛擬機器的輕量級自包含例項,可以迅速啟動和停止。docker容器可以通過docker映象無限複製,它們是無狀態/短暫的資源。

docker hub

docker hub

給系統基礎框架引入了軟體工程dry的原則,它是儲存dockerfile和映象的全域性倉庫。目前docker hub已經有很多的可用映象,比如ubuntu、redhat、rabbitmq、mongodb、nginx。

讓我們直接深入docker,我們要構建乙個簡單的基礎框架,其上執行乙個wordpress的自包含例項,wordpress是被全世界很多公司和作家使用的流行部落格工具。這個基礎架構包含乙個nginx伺服器來路由/**請求,wordpress應用伺服器來部署應用以及mysql資料庫來提供儲存。最終的架構類似於:

資料庫容器docker run命令列來啟動新容器。

docker run --name wordpress-db -e mysql_root_password=mysecretpassword -d mysql
上面的命令是讓docker使用mysql基礎映象執行乙個新容器,各個引數意義如下:

注意:為了維護跨容器的資料,必須配置乙個

volume

來確保資料一致性。為了簡單起見我們忽略了這個標誌,但是要記住涉及狀態的部署必須考慮到資料跨容器生命週期的持續性。

下面我們需要執行wordpress應用容器,這個也已經被docker化並放在docker hub上了:

wordpress倉庫

-link wordpress-db:mysql這個引數告訴docker建立網路連線到wordpress-db容器(之前建立出來的),使得兩個容器間能夠網路通訊。這個值分為兩部分,左邊部分指定想要連線的容器(wordpress-db),右邊部分指定這個容器的主機別名(mysql)。

docker ps檢視一下正在執行的容器:

docker ps

container id        image               command                created              status              ports               names

20e66802e914        mysql:latest        "/entrypoint.sh mysq   about a minute ago   up about a minute   3306/tcp            wordpress-db

ping mysql

64 bytes from 172.17.0.2: icmp_seq=0 ttl=64 time=0.085 ms

64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.127 ms

64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.108 ms

很好,一切看起來都不錯。

web應用之前通常有http web**。這樣做有很多好處,比如控制請求路由、審查、安全、日誌、快取、負載均衡、存放靜態內容等。nginx是常用的http web**伺服器。因為需要建立自定義的nginx,所以需要乙個新dockerfile來定義包含自定義nginx配置的新映象:

mkdir wordpress-nginx

cd wordpress-nginx

vi default.conf

server 

error_page   500 502 503 504  /50x.html;

location = /50x.html 

}

vi dockerfile

from nginx

copy default.conf /etc/nginx/conf.d/default.conf

from nginxnginx基礎映象

copy default.conf /etc/nginx/conf.d/default.conf這個命令從當前目錄得到default.conf,並拷貝到/etc/nginx/conf.d/下的容器映象。

剩下的事情是構建新的docker映象並執行容器:

docker build -t wordpress-nginx .

docker ps

container id        image                    command                created             status              ports                         names

2b9f99664249        wordpress-nginx:latest   "nginx -g 'daemon of   3 seconds ago       up 2 seconds        443/tcp, 0.0.0.0:80->80/tcp   wordpress-nginx     

20e66802e914        mysql:latest             "/entrypoint.sh mysq   9 minutes ago       up 4 minutes        3306/tcp                      wordpress-db

可能你會注意到我們指定了引數-p 80:80,這是告訴docker暴露容器的80埠,這樣可以從docker的宿主機器外部訪問該容器。

在瀏覽器瀏覽

,看,wordpress已經可以用了,按照wordpress安裝提示配置例項,很快就可以看到如下頁面:

總的來說,我們通過實際使用docker hub上的一些已有資源,學習到了一些docker的基本概念,構建了wordpress的自包含可執行例項。一切只需要執行幾個docker命令。希望這篇文章能夠幫助你開始docker化你的應用基礎架構,享受到docker帶來的巨大好處。

如果喜歡這篇文章,請幫忙**給你的朋友,或者在twitter,linkedin上共享。多謝閱讀!

===========================

譯者介紹

崔婧雯,現就職於vmware,高階軟體工程師,負責桌面虛擬化產品的質量保證工作。曾在ibm websphere業務流程管理軟體擔任多年系統測試工作。對虛擬化,中介軟體技術有濃厚的興趣。

原文發布時間為:2015-02-07

docker 深入淺出

一 如何開始 安裝docker yum y install docker brew cask install docker systemctl start docker systemctl enable docker.service cat etc docker daemon.json regist...

深入淺出Docker系列

深入淺出系列 深入淺出docker 一 docker核心技術預覽 深入淺出docker 二 docker命令列探秘 深入淺出docker 三 docker開源之路 深入淺出docker 四 docker的整合測試部署之道 深入淺出docker 五 基於fig搭建開發環境 原始碼分析系列 docker...

深入淺出Docker之Docker容器

容器是映象的執行時例項。正如從虛擬機器模板上啟動 vm 一樣,使用者也同樣可以從單個映象上啟動乙個或多個容器。虛擬機器和容器最大的區別是容器更快並且更輕量級 與虛擬機器執行在完整的作業系統之上相比,容器會共享其所在主機的作業系統 核心。下圖為使用單個 docker 映象啟動多個容器的示意圖 啟動容器...