一般咱們在開發環境寫好代碼,打個war/jar包,扔到tomcat下,就算是跑起來了;
可是扔到生產環境就掛了,what?各類錯誤。。。mysql
兩個應用運行在一個服務器上,好比一個PHP,一個.NET。
這兩個應用各類的依賴軟件都安裝在同一個服務器上,可能就會形成各類衝突/沒法兼容,這可能調試就很是麻煩了。linux
docker 就是爲解決上方問題出現的,一次封裝,處處運行。
Linux 容器技術的出現解決了這樣的一個問題,而 docker 就是在他的基礎上發展過來的。
將應用運行在 docker 容器上面,而docker 容器在任何操做系統上都是一致的,實現了跨平臺、跨服務器。nginx
只須要一次配置好環境,切換別的機子上就能夠一鍵部署好,大大簡化了操做。redis
假設:開發環境裝了個 redis 3.2 ,運維環境裝了 4.2,但是 3.2 運行沒問題,可是在 4.2 就很差用了,可是既然開發環境裝了 redis 3.2 了,運維就不必重複裝了,開發把 redis 打個鏡像,而運維只須要裝個 docker 環境,而後把鏡像一鍵部署便可。
放在之前,咱們只須要把代碼扔給運維,讓他去裝軟件,裝很差就啓動不了。sql
話外語:個人好朋友昆少,做爲一個運維,每次都要陪開發加班上線項目,並且每每有些時候居然是環境引發的,畢竟開發本地用的 windows 環境,部署到 linux 就…docker
一句話概述:解決了運行環境和配置問題軟件容器,方便作持續集成並有助於總體發佈的容器虛擬化技術。數據庫
資源佔用多(特別吃內存)、冗餘步驟多、啓動慢;
虛擬機是一個連硬件都模擬的,好比打印機等等,是分鐘級別的,而 docker 是秒級別的windows
因爲前面的虛擬器存在這些缺點,linux 發展處另外一種虛擬化技術—linux 容器;
不是模擬一個完整的操做系統,而是對進程進行隔離。
有了容器,能夠將軟件運行所須要的資源打包一個隔離的容器中,容器與虛擬機不一樣,不須要捆綁一整套操做系統,只須要軟件工做
所需的庫資源可設置。centos
docker 和傳統虛擬化方式的不一樣之處:tomcat
- 傳統虛擬機技術是虛擬出一套硬件後,在其上運行一個完整操做系統,在該系統上再運行所須要應用進程。
- 容器的應用進程直接運行於宿主的內核,容器沒有本身的內核,並且也沒有進行硬件虛擬,所以容器更輕便。
- 每一個容器之間互相隔離,容器有本身的文件系統,容器之間進程不會互相影響,能區分計算資源。
一次構建、隨處運行
更快應用交付和部署、更快升級和擴縮容、更簡單的系統運維、更搞笑的計算資源利用
新浪、美團、阿里、京東等
docker.com docker-cn.com
官網?no!
連接:https://pan.baidu.com/s/1c20sYm0ziaRyUsotbp0oOg 提取碼:o2m6
連接:https://pan.baidu.com/s/1KwJM_mes51cvl0e0kava5Q 提取碼:n34r
解壓鏡像後,直接執行 vmx 後綴的文件。
systemctl start docker
mysql
docker run -di --name=tensquare_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7
--name=數據庫名稱
-p 3306:3306 端口號
MYSQL_ROOT_PASSWORD=密碼
nginx
docker run -p 80:80 --name ngx_demo -d nginx
-p 80:80:將容器的80端口映射到主機的80端口
--name mynginx:將容器命名爲mynginx
查看全部的容器:docker images
若是文章有錯的地方歡迎指正,你們互相留言交流。習慣在微信看技術文章,想要獲取更多的Java資源的同窗,能夠關注微信公衆號:niceyoo