文章來自:When to use and when not to use Docker和7 Cases When You Should Not Use Docker,以及互聯(lián)網(wǎng)網(wǎng)上的一些零散內(nèi)容。這篇文章只是基于我自己的理解,進(jìn)行簡(jiǎn)單的概述。
適合的場(chǎng)景
-
你的團(tuán)隊(duì)不是一成不變的。
當(dāng)有新的成員加入,在他們開始編碼之前,他們必須為項(xiàng)目設(shè)置本地開發(fā)環(huán)境,例如據(jù)庫(kù)或其它第三方工具。這可能會(huì)花很多時(shí)間,比如我之前在做CRM系統(tǒng)時(shí),本地要安裝Oracle,Siebel,SVN等等這些東西,一個(gè)一個(gè)安起來非常麻煩,各種問題,安了兩天才成功完成。而如果有了Docker,利用Docker Compose,通過編寫docker-compose.yml一鍵就可以把它們?nèi)堪惭b,包括設(shè)定誰前誰后,環(huán)境變量等,如下圖是安裝ELK(ElasticSearch,Logstash,Kibana,做日志的東西;根據(jù)我的經(jīng)驗(yàn),你一個(gè)一個(gè)安會(huì)很痛苦的,安裝時(shí)出了問題也不好找)的docker-compose.yml文件。
而且團(tuán)隊(duì)越大,團(tuán)隊(duì)成員的變動(dòng)就越多,Docker可以大大減少在安裝上浪費(fèi)的時(shí)間。version: '3.2' services: elasticsearch: image: elasticsearch:7.17.4 volumes: - /etc/localtime:/etc/localtime - ./es/plugins:/usr/share/elasticsearch/plugins #插件文件掛載 - ./es/data:/usr/share/elasticsearch/data #數(shù)據(jù)文件掛載 ports: - '9200:9200' - '9300:9300' container_name: elasticsearch restart: always environment: - 'cluster.name=elasticsearch' #設(shè)置集群名稱為elasticsearch - 'discovery.type=single-node' #以單一節(jié)點(diǎn)模式啟動(dòng) - 'ES_JAVA_OPTS=-Xms1024m -Xmx1024m' #設(shè)置使用jvm內(nèi)存大小 networks: - elk logstash: image: logstash:7.17.4 container_name: logstash restart: always volumes: - /etc/localtime:/etc/localtime - './logstash/pipelines.yml:/usr/share/logstash/config/pipelines.yml' - './logstash/logstash-audit.conf:/usr/share/logstash/pipeline/logstash-audit.conf' - './logstash/logstash-user-action.conf:/usr/share/logstash/pipeline/logstash-user-action.conf' ports: - '5044:5044' - '50000:50000/tcp' - '50000:50000/udp' - '9600:9600' environment: LS_JAVA_OPTS: -Xms1024m -Xmx1024m TZ: Asia/Shanghai MONITORING_ENABLED: false links: - elasticsearch:es #可以用es這個(gè)域名訪問elasticsearch服務(wù) networks: - elk depends_on: - elasticsearch kibana: image: kibana:7.17.4 container_name: kibana restart: always volumes: - /etc/localtime:/etc/localtime - ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml ports: - '5601:5601' links: - elasticsearch:es #可以用es這個(gè)域名訪問elasticsearch服務(wù) environment: - ELASTICSEARCH_URL=http://elasticsearch:9200 #設(shè)置訪問elasticsearch的地址 - 'elasticsearch.hosts=http://es:9200' #設(shè)置訪問elasticsearch的地址 - I18N_LOCALE=zh-CN networks: - elk depends_on: - elasticsearch networks: elk: name: elk driver: bridge
-
你的軟件運(yùn)行在不同的環(huán)境中
我們平時(shí)開發(fā)人員是在開發(fā)環(huán)境中進(jìn)行開發(fā),當(dāng)編寫好、測(cè)試好代碼后,要提交到生產(chǎn)環(huán)境。因?yàn)槟愕拈_發(fā)環(huán)境不可能和生產(chǎn)環(huán)境一模一樣,所以可能會(huì)遇到一些無法預(yù)料的問題。而Docker一個(gè)個(gè)Container具有很好的隔離性,會(huì)大大降低外界環(huán)境的影響。而且也利用Docker的可移植性,也就是說比如你從一臺(tái)服務(wù)器移動(dòng)到另一臺(tái)服務(wù)器,只要安裝好相同的鏡像,運(yùn)行啟動(dòng)即可使用。
這里要額外說明一下,進(jìn)入Docker官網(wǎng)后,這里安裝的是Docker Desktop,也就是一個(gè)桌面應(yīng)用,可以可視化一些操作內(nèi)容。而它不同的版本Apple、Windows,安裝后Docker的內(nèi)部其實(shí)還是Linux,并不是Apple、Windows的系統(tǒng)。因?yàn)镈ocker本身就是基于Linux的,在非Linux上安裝,本質(zhì)上是利用Windos或Apple的一些特性,安裝了Linux虛擬機(jī)。 -
你的軟件由許多部分組成
這點(diǎn)依然用到了第一點(diǎn)提到的Docker Compose。隨著軟件的成長(zhǎng),組件越來越多,越來越不好管理,通過Docker Compose可以解決這個(gè)問題,一個(gè)docker-compose.yml文件。就可以管理好個(gè)個(gè)組件的關(guān)系。 -
你希望你的軟件是可擴(kuò)展的
Docker本身并不支持動(dòng)態(tài)擴(kuò)容,但是它可以很方便的進(jìn)行橫向擴(kuò)展,也就是在run一個(gè)images。之后再通過負(fù)載均衡從而達(dá)到擴(kuò)展的目的。
不適合的場(chǎng)景
-
桌面應(yīng)用
Docker本身是可以運(yùn)行GUI(圖形用戶界面)的,但是Docker 的設(shè)計(jì)初衷是為了在不同的環(huán)境中運(yùn)行應(yīng)用程序,而桌面應(yīng)用程序通常需要與操作系統(tǒng)進(jìn)行交互,比如要訪問本地文件系統(tǒng)、音頻系統(tǒng)等其他資源,由于Docker容器本身是隔離的,這些功能在 Docker 中可能無法直接實(shí)現(xiàn),因此需要額外的工作來解決這些問題。 -
你的軟件規(guī)模比較小
Docker本身并不是開箱即用的,會(huì)涉及很多內(nèi)容,命令、文件掛在、日志輸出等等,比如說如果你的軟件只涉及一個(gè)服務(wù)器,那完全沒有必要使用Docker。 -
你想加快你應(yīng)用的速度
在大多數(shù)情況下,Docker 的性能開銷對(duì)你來說是不可見的,因?yàn)镈ocker僅僅是基于Linux的LXC虛擬技術(shù),利用它的namespace(隔離開),cgroup(限制住自己)技術(shù),也就說僅僅是做了分離,而不是像虛擬機(jī)那樣,又重新造一個(gè)系統(tǒng)。但可能一定程度上會(huì)受到影響,因?yàn)槭褂肈ocker會(huì)在應(yīng)用和操作系統(tǒng)之間又多了“一層”。如果你的目標(biāo)是提高應(yīng)用程序的速度,Docker本身是無能為力的。 -
你非常注重安全
對(duì)于安全并不是太懂,簡(jiǎn)單來講Docker是基于Linux的namespace進(jìn)行隔離的,隔離性是遠(yuǎn)不如虛擬機(jī)的,比如時(shí)間就隔離不了,容器一更改時(shí)間,主機(jī)也會(huì)改。而且對(duì)于Docker,所有容器都是可以訪問主機(jī)內(nèi)核的,可能會(huì)造成風(fēng)險(xiǎn)。而傳統(tǒng)的虛擬機(jī)同樣地很多操作都需要通過內(nèi)核處理,但這只是虛擬機(jī)的內(nèi)核,并非宿主主機(jī)內(nèi)核,因此萬一出現(xiàn)問題時(shí),最多只影響到虛擬系統(tǒng)本身。
總結(jié)
Docker的好處:文章來源:http://www.zghlxwxcb.cn/news/detail-541120.html
- 利用其可移植性,鏡像提供了除內(nèi)核外完整的運(yùn)行環(huán)境,確保了應(yīng)用運(yùn)行環(huán)境的一致性,可以方便的在不同環(huán)境中進(jìn)行安裝運(yùn)行;
- 利用其隔離性,可以不用像虛擬機(jī)一樣,占用過多資源,而且也比虛擬機(jī)啟動(dòng)更快;讓自己的運(yùn)行環(huán)境不受外部干擾,讓資源不會(huì)容易受到其他用戶的影響(與可移植性類似);
- 可以方便的進(jìn)行不同組件的管理,以及快速搭建系統(tǒng)的整體的環(huán)境;
- 可以方便的對(duì)服務(wù)進(jìn)行橫向擴(kuò)展
- 利用以上特性,更加適合云原生的發(fā)展,實(shí)現(xiàn)像是持續(xù)集成和部署。
Docker的壞處:文章來源地址http://www.zghlxwxcb.cn/news/detail-541120.html
- 由于隔離的限制,不適合桌面應(yīng)用的安裝;
- 軟件規(guī)模較小時(shí),沒有必要使用,會(huì)大大增加復(fù)雜度;
- 無法提高應(yīng)用的性能;
- 一定程度上可能會(huì)影響安全,因?yàn)樗⒉幌裉摂M機(jī)隔離的徹底
到了這里,關(guān)于適合Docker的場(chǎng)景以及不適合的場(chǎng)景的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!