摘要:后聯(lián)合廣東,致力于北伐,他所統(tǒng)領(lǐng)的七軍被譽(yù)為鋼軍,奠定了南京國(guó)民政府的基礎(chǔ),龍?zhí)兑灰郏於私y(tǒng)一全國(guó)的基礎(chǔ)。這本書(shū)爆出很多歷史事實(shí),比如北伐,國(guó)民黨內(nèi)部紛爭(zhēng),蔣介石的為人。
最近在看《李宗仁回憶錄》,斷斷續(xù)續(xù)看了一個(gè)星期,因白天沒(méi)時(shí)間,只能抽出晚上的時(shí)間,荒廢了好多學(xué)習(xí)的時(shí)間,自覺(jué)慚愧。本來(lái)就對(duì)歷史非常感興趣,而李宗仁的這個(gè)回憶錄,寫(xiě)得真是太好啦,每天晚上回來(lái),本想著打開(kāi)書(shū)就看一會(huì),然后就漸漸忘我了。
這本書(shū)最吸引我的地方是刷新了我對(duì)民國(guó)歷史的理解,之前,我了解到的李宗仁是一個(gè)領(lǐng)導(dǎo)臺(tái)兒莊戰(zhàn)役,與蔣介石對(duì)立的桂系領(lǐng)袖。仔細(xì)讀完這本書(shū)之后,發(fā)現(xiàn)李實(shí)為一代英雄,和預(yù)想中差別真是太大,而且從他做事的風(fēng)格打心底佩服這個(gè)傳奇人物。少時(shí)家貧,棄文從戎,從排長(zhǎng)做起,負(fù)過(guò)傷,一步一步(克死上級(jí)),連長(zhǎng)、營(yíng)長(zhǎng)、團(tuán)長(zhǎng)、旅長(zhǎng),三十出頭,統(tǒng)一廣西,李的年輕史就是一部奮斗史。
后聯(lián)合廣東,致力于北伐,他所統(tǒng)領(lǐng)的七軍被譽(yù)為“鋼軍”,奠定了南京國(guó)民政府的基礎(chǔ),龍?zhí)兑灰郏於私y(tǒng)一全國(guó)的基礎(chǔ)。后經(jīng)武漢軍變,蔣桂戰(zhàn)爭(zhēng),中原大戰(zhàn)而不被滅亡,抗日戰(zhàn)爭(zhēng)后又有很多輝煌事跡。這本書(shū)爆出很多歷史事實(shí),比如北伐,國(guó)民黨內(nèi)部紛爭(zhēng),蔣介石的為人。
之前我一直有一個(gè)疑惑,像汪精衛(wèi)這種大漢奸,為什么后人罵之甚少,才知道原來(lái)汪在國(guó)民黨內(nèi)部地位如此之高,而且投日后也未作出對(duì)國(guó)家,對(duì)民族不利的事情。
雖說(shuō)歷史不可全信,而且看這本書(shū)就像看小說(shuō)一樣過(guò)癮,李宗仁的經(jīng)歷就像兒時(shí)自己的夢(mèng)想一樣,只不過(guò)一個(gè)是真實(shí)存在,一個(gè)從來(lái)未踏出第一步,看完之后,只能用佩服得五體投地來(lái)形容。
最近公司里開(kāi)始全面使用 Docker 來(lái)搭建靶機(jī)環(huán)境,以前搭環(huán)境都是用 Ubuntu 虛擬機(jī),安裝必備的軟件 mysql、php 和 apache(以 php 服務(wù)器為例),然后整個(gè)虛擬機(jī)生成一個(gè)好幾 G 的 .vof 虛擬機(jī)文件當(dāng)作服務(wù)器,每次需要搭一個(gè)新環(huán)境,都必先拷貝該文件,然后像 /var/www/html 中復(fù)制 php web 文件。可以說(shuō)整個(gè)過(guò)程,費(fèi)時(shí)費(fèi)力,還很占用空間。
很早之前,公司里有部分人就開(kāi)始研究 docker,最近才打算使用 docker 來(lái)搭建環(huán)境。而我最近在寫(xiě) jQuery 源碼方面的項(xiàng)目,想來(lái)也沒(méi)啥可寫(xiě),就抽時(shí)間把這幾周使用 docker 的經(jīng)驗(yàn)記錄一下吧,歡迎打臉。
為什么要用 dockerdocker 在 github 上開(kāi)源,它是一個(gè)引擎,支持創(chuàng)建一個(gè)輕量級(jí)、可移植的容器,用過(guò)之后感覺(jué)和虛擬機(jī)非常像呀,而且還比虛擬機(jī)輕量多了。docker 最經(jīng)典的一句話:build once, configure once and run anywhere。可見(jiàn) docker 的強(qiáng)大。
比如現(xiàn)在的阿里云容器,用戶(hù)可以在上面購(gòu)買(mǎi) web 服務(wù),然后 docker 一鍵部署生成應(yīng)用,可見(jiàn) docker 已經(jīng)有取代虛擬云主機(jī)的趨勢(shì),畢竟對(duì)于大部分服務(wù)商來(lái)說(shuō),他們只希望 web 服務(wù)能平穩(wěn)安全的運(yùn)行,并不在意它運(yùn)行在容器里還是虛擬機(jī)里。
我的理解,docker 是面向運(yùn)維人員的,而開(kāi)發(fā)人員,該怎么開(kāi)發(fā),還是怎么開(kāi)發(fā),只是運(yùn)行的平臺(tái)不同而已。
那么,docker 的優(yōu)勢(shì)在哪里?
支持多平臺(tái),目前已支持各大操作系統(tǒng):window、linux 和 mac,docker products overview。
就我使用的來(lái)看,比 VM 小,比 VM 快,docker 在構(gòu)建應(yīng)用的過(guò)程中,速度要比虛擬機(jī)快很多,而且每個(gè)應(yīng)用依托 image,實(shí)際上是在 container 中運(yùn)行,鏡像和容器分開(kāi),在構(gòu)建多個(gè)應(yīng)用的時(shí)候,又非常多方便。
docker 雖然是容器,但卻是通過(guò)命令行來(lái)管理,而且還借鑒 git 操作,比如一些常見(jiàn)的 commit、push、pull 命令。
CPU/內(nèi)存的低消耗這方面我無(wú)法驗(yàn)證,但是 build once,run anywhere,這點(diǎn)非常贊同。比如公司里現(xiàn)在需要搭建 php 的環(huán)境,只需要 build 一個(gè) php+mysql+apache 的環(huán)境,便可構(gòu)建任意一個(gè) web 應(yīng)用。
docker 的使用關(guān)于 docker 的安裝,可以參考 docker docs,詳細(xì)介紹了支持操作系統(tǒng)的安裝。
使用 docker 的第一步,就是拉取 image。docker image 是 docker 運(yùn)行時(shí)的模版,比如我想要運(yùn)行一個(gè) mysql 服務(wù),就必須有一個(gè)安裝了 mysql 的基本的 ubuntu 系統(tǒng)。這個(gè)就是運(yùn)行時(shí)基本的 image,而最基本的 image 要屬一個(gè)純凈的 ubuntu 系統(tǒng)docker hub ubuntu。
第一步,先拉取一個(gè)簡(jiǎn)單的 docker 鏡像。docker 提供一個(gè)類(lèi)似于 github 一樣鏡像官網(wǎng),https://hub.docker.com/,用戶(hù)可以 pull 到一些基本和流行的鏡像。當(dāng)然在 docker hub 中最火的還是 ubuntu 鏡像,關(guān)注度最高。用戶(hù)把基本 ubuntu 鏡像加以改造,衍生出各類(lèi)鏡像文件。
docker pull ubuntu:14.04
上面這個(gè)是最基本的 docker pull 命令,有 ubuntu:14.04 表示官方 ubuntu 鏡像 14.04 版本,也可以 pull 最新版的比如:docker pull ubuntu:latest 或者 pull 16.04:docker pull ubuntu:16.04。
這個(gè)是從 docker hub 官網(wǎng)獲取鏡像,速度非常慢,好在國(guó)內(nèi)有鏡像加速器,具體配置可參考這篇文章,或者注冊(cè) www.daocloud.io 通過(guò)這個(gè)頁(yè)面獲取鏡像加速。通過(guò)加速之后,你會(huì)發(fā)現(xiàn),速度非常快。
這個(gè)時(shí)候通過(guò) docker images 可以查看當(dāng)前存在的鏡像。
運(yùn)行的話,使用下面的命令:
docker run -i -t ubuntu:14.04 /bin/bash // -i 表示輸出在標(biāo)準(zhǔn)控制臺(tái) // -t 表示分配一個(gè) tty 終端設(shè)備
這個(gè)命令執(zhí)行后,在當(dāng)前的命令行下面,會(huì)進(jìn)入 ubuntu:14.04 的命令行,就像 ssh 服務(wù)器那樣,exit 命令退出。ubuntu:14.04 是 image 名稱(chēng)和版本,最后是要執(zhí)行的命令,這里是進(jìn)入命令行,所以 執(zhí)行 /bin/bash 文件。因?yàn)?build 是自動(dòng)的,所以在大多數(shù)情況下(后面介紹 Dockerfile 會(huì)用到)事先寫(xiě)好一個(gè) bash 文件,啟動(dòng)運(yùn)行這個(gè) bash 文件即可,比如:
docker run -d ubuntu:14.04 /bin/bash /run.sh // -d 表示后臺(tái)運(yùn)行容器
docker ps 用于查看當(dāng)前正在運(yùn)行的 container,docker ps -a 顯示所有 container,docker stop/start/restart {container_id | container name} 可以停止/開(kāi)啟/重啟 正在運(yùn)行或已經(jīng)停止的容器。總之記住一句話,images 是模版,而運(yùn)行靠容器。
有時(shí)候?yàn)榱朔奖愎芾恚€需要對(duì) container 進(jìn)行命名:
docker run -d ubuntu:14.04 /bin/bash /run.sh --name=test
如果運(yùn)行時(shí)忘記了或者需要修改名字,可以通過(guò)下面的命令,因?yàn)榧词雇浢琩ocker container 會(huì)使用一個(gè)系統(tǒng)隨機(jī)分配的名字:
docker rename {old_name} {new_name}
我們可以將基本的 ubuntu 鏡像升級(jí)成一個(gè) mysql 的服務(wù)器,這是通過(guò) commit 命令來(lái)完成:
host$ docker run -i -t ubuntu:14.04 /bin/bash // 下面進(jìn)入 ubuntu:14.04 shell // 命令進(jìn)行簡(jiǎn)化 root$ sudo apt-get update root$ sudo apt-get install mysql-server root$ exit host$ docker commit -m "install mysql_server" {container_id} ubuntu:mysql host$ docker images
會(huì)發(fā)現(xiàn)多一個(gè)叫做 ubuntu:mysql 的鏡像文件,便是 commit 后的鏡像文件,此時(shí)可以通過(guò) push 命令將它們 push 到服務(wù)器供別人使用。
docker 還通過(guò)端口映射,文件夾映射等,比如一個(gè) mysql 服務(wù)器,它啟動(dòng)了之后,實(shí)際上會(huì)在容器中開(kāi)啟 3306 端口,可以通過(guò) -p 將它們映射到本地的 3306 端口:
docker run -d -p 3306:3306 -p 80:80 -v /web/:/var/www/html ubuntu:apache_server /bin/bash /run.sh
-v 會(huì)將主機(jī)目錄下 /web 映射到 /var/www/html 中。
這是一個(gè)容器,如果我們需要開(kāi)啟第二個(gè) web 應(yīng)用,只需要新建另一個(gè)容器即可,所謂的 build once,run everywhere。
有時(shí)候?qū)τ跀?shù)據(jù)庫(kù)服務(wù)和 apache 服務(wù),需要在兩個(gè)不同的容器中運(yùn)行,需要將它們建立 link 鏈接。
Dockerfile前面說(shuō)了,一鍵部署,一鍵運(yùn)行,而我們只看到的是一鍵運(yùn)行,而一鍵部署該如何設(shè)置?
通過(guò) docker 提供的 docker build 命令。
新建 image 有兩種方法,前面已經(jīng)介紹過(guò)一種 commit 的方法,但是 commit 是針對(duì) container 來(lái)說(shuō)的,構(gòu)建的話需要一個(gè)已經(jīng)完好的 container,過(guò)程略有繁瑣。
docker build 需要一個(gè) Dockerfile 的文件,如果該文件在當(dāng)前目錄下:
docker build -t ubuntu:mysql .
-t 參數(shù)表示給 image 添加一個(gè) tag 標(biāo)簽,Dockerfile 也可以指定位置,把 . 換成一個(gè)指定的 Dockerfile 即可。
而一個(gè) Dockerfile 大致如下:
# 表示來(lái)自哪個(gè) image FROM ubuntu:14:04 # 作者 MAINTAINER author# ENV 指定 docker 容器的環(huán)境變量 ENV DEBIAN_FRONTEND noninteractive # RUN 表示執(zhí)行 bash 命令 # install package RUN apt-get update && apt-get -y install supervisor git apache2 libapache2-mod-php5 mysql-server php5-mysql pwgen php-apc php5-mcrypt && echo "ServerName localhost" >> /etc/apache2/apache2.conf # ADD 表示將本地文件添加到容器目錄中 ADD start-apache2.sh /start-apache2.sh ADD start-mysqld.sh /start-mysqld.sh ADD run.sh /run.sh RUN chmod 755 /*.sh ADD my.cnf /etc/mysql/conf.d/my.cnf ADD supervisord-apache2.conf /etc/supervisor/conf.d/supervisord-apache2.conf ADD supervisord-mysqld.conf /etc/supervisor/conf.d/supervisord-mysqld.conf # 刪除數(shù)據(jù)庫(kù)文件 RUN rm -rf /var/lib/mysql/* # 添加數(shù)據(jù)庫(kù)配置文件 ADD create_mysql_admin_user.sh /create_mysql_admin_user.sh RUN chmod 755 /*.sh # clone app 文件 RUN git clone https://github.com/fermayo/hello-world-lamp.git /var/www/html #Environment variables to configure php ENV PHP_UPLOAD_MAX_FILESIZE 10M ENV PHP_POST_MAX_SIZE 10M # 添加掛載,用于共享,和 -v 命令一樣 VOLUME ["/etc/mysql", "/var/lib/mysql" ] # 暴露端口 EXPOSE 80 3306 # 添加默認(rèn)執(zhí)行的 bash(cmd) CMD ["/run.sh"]
這里面有一個(gè)坑啊。因?yàn)檫@個(gè) 14.04 的鏡像來(lái)自于官方,所以 apt-get 的源是美國(guó)的主機(jī),非常慢,建議先對(duì) ubuntu 的更新源進(jìn)行修改,然后再執(zhí)行 build 命令,切記。
上面這個(gè) Dockerfile 文件來(lái)自 github 上一個(gè) php+mysql+apache 環(huán)境搭建項(xiàng)目,lamp。
更多 Dockerfile 的命令請(qǐng)參考如何使用Dockerfile構(gòu)建鏡像或Docker入門(mén)教程(三)Dockerfile。
總結(jié)其實(shí) docker 的使用非常簡(jiǎn)單,又不用看它的的源碼,只是一些簡(jiǎn)單的命令,而且網(wǎng)上的教程滿(mǎn)天飛,想在短時(shí)間內(nèi)學(xué)會(huì) docker 是完全沒(méi)有問(wèn)題的,但是關(guān)鍵的問(wèn)題是:你為什么要學(xué) docker?docker 能給你帶來(lái)哪些便利?
因我公司需要掌握 docker,我也就花了一些時(shí)間,算入門(mén) docker 了吧,基本的命令都有所了解,而且確實(shí)也帶來(lái)了很大的便利。但入門(mén)始終是入門(mén),有一些問(wèn)題會(huì)在使用的過(guò)程中碰到,比如
container 容器 root 權(quán)限的問(wèn)題;
docker 像虛擬機(jī)那樣安全嗎;
docker 的性能與 VM 性能和直接在本地運(yùn)行應(yīng)用的性能,都有多大差別?
共勉!
參考docker 中文
Docker入門(mén)教程
Docker容器入門(mén)
如何使用Dockerfile構(gòu)建鏡像
歡迎來(lái)我的博客討論。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/35813.html
摘要:后聯(lián)合廣東,致力于北伐,他所統(tǒng)領(lǐng)的七軍被譽(yù)為鋼軍,奠定了南京國(guó)民政府的基礎(chǔ),龍?zhí)兑灰郏於私y(tǒng)一全國(guó)的基礎(chǔ)。這本書(shū)爆出很多歷史事實(shí),比如北伐,國(guó)民黨內(nèi)部紛爭(zhēng),蔣介石的為人。 最近在看《李宗仁回憶錄》,斷斷續(xù)續(xù)看了一個(gè)星期,因白天沒(méi)時(shí)間,只能抽出晚上的時(shí)間,荒廢了好多學(xué)習(xí)的時(shí)間,自覺(jué)慚愧。本來(lái)就對(duì)歷史非常感興趣,而李宗仁的這個(gè)回憶錄,寫(xiě)得真是太好啦,每天晚上回來(lái),本想著打開(kāi)書(shū)就看一會(huì),然...
閱讀 635·2023-04-26 02:08
閱讀 2659·2021-11-18 10:02
閱讀 3466·2021-11-11 16:55
閱讀 2349·2021-08-17 10:13
閱讀 2908·2019-08-30 15:53
閱讀 689·2019-08-30 15:44
閱讀 2553·2019-08-30 11:10
閱讀 1762·2019-08-29 16:57