為什么要用Docker?
如果我們想使用某種pc軟件, 那么在互聯網上查找並安裝軟件的流程大致如下圖:
那么這就有幾個問題要弄清楚:
- 從哪里獲得軟件
- App Store
- Linux的包管理
- 從某些網站直接下載
軟件是否提供了相關信息和數據
- 例如流行度, 下載次數, 存在的bug, 上次的更新時間等等.
- 信任問題
- 下載軟件的網站是否為官方網站
- http 還是 https
- 代碼
- 是否還可以下載
- 是否收費
第一個令人困擾的問題: 安裝軟件
- 軟件是否支持我的操作系統/版本
- 是否支持我的設備的CPU架構
- 軟件的格式
- 有些是從源碼進行安裝
- 有些是單獨的exe文件
- 有的是exe+dlls
- 有時候是exe+dlls+依賴某些運行時
- 軟件的安裝方式
- 有自帶的安裝器
- 使用包管理工具安裝
- 手動安裝
- 軟件的更新和卸載
- 自動更新?
- 軟件的配置(對於新手來說可能這就是個噩夢)
從上面這些問題可以看出, 現在這個年代, 安裝個軟件真是個挺麻煩的事, 尤其是用於開發相關的軟件, 有時候讓人頭疼.
第二個問題: 軟件的運行
這方面可能會存在以下問題:
- 是否有詳細的幫助文檔
- 軟件在哪運行
- 是否需要手動修改系統某些設置
- 是否需要設置環境變量PATH
- 如何開始, 如何結束
- 是否需要注冊服務
- 如何注冊服務
- 是否需要手動編寫服務配置
- 是否需要許可
- 如何安裝和運行軟件的依賴項
- 如果沒找到依賴項會怎么處理
- 循環的依賴項
- 安全性, 沙箱運行?
- 破壞性更新
- 系統更新是否對軟件有破壞性影響
- 共享的庫有更新
什么是容器
Docker不是虛擬機的替代者, docker不是虛擬化技術, 它更多是關於軟件的運行.
什么是容器,它和虛擬機有什么區別?
首先介紹一下虛擬機:
虛擬機管理其把服務器的硬件資源(CPU,內存,硬盤,網絡等)切割成多個虛擬的版本, 然后基於這些虛擬的硬件建立操作系統.
虛擬機建立的系統就像是正常的系統服務一樣.
與虛擬機管理器不同, Docker或者其他的容器引擎切割的是操作系統的資源, 例如進程的命名空間, 網絡棧, 存儲棧等等:
每個容器都有PID為1的進程, 每個容器也都有自己的根文件系統(windows的C盤, linux的/).
所以docker可以稱作是對針對操作系統的虛擬化操作, 它非常的輕量級.
可以舉一些例子, 安裝 sql server, mysql, mongodb, postgresql 等, 下載, 安裝, 配置. 有的還是挺麻煩的.
下面看看使用docker會怎么樣, 首先需要安裝docker.
安裝Docker
Docker for windows 下載地址: https://store.docker.com/editions/community/docker-ce-desktop-windows
安裝好docker后, 系統右下角托盤處會有docker的圖標, 等到圖標不再閃爍了, 說明docker已經啟動成功了.
右鍵點擊圖標有Settings.
可以通過命令行看一下docker的狀態:
docker version
可以看到client是windows, server是linux(系統需要啟用Hyper-V)虛擬機.
從Hyper-V管理器可以看到這個linux虛擬機:
使用Docker的例子: Postgresql
首先去 https://hub.docker.com/ 這里查找需要使用的軟件, 例如postgresql : https://hub.docker.com/_/postgres/
從頁面可以看到 postgres是docker官方認可的庫. 頁面的下方有使用說明等.
首先別忘了運行docker.
然后從docker hub下載postgres這個軟件(應該叫image), 命令行執行:
docker pull postgres
下載的過程有時候比較慢, 尤其是在國內 (如果速度實在太慢, 那么可以使用阿里雲的容器鏡像: https://dev.aliyun.com/search.html?spm=5176.1972343.0.1.340c5aaafU9rRJ):
等了一段時間之后, 下載完畢:
現在image已經下載了, 那么接下來就是需要通過某種方式運行這個image, 這就涉及到了container容器.
容器就像是一個已經安裝好的軟件, 它負責把這個image配置並安裝好, 然后就可以運行這個安裝好的postgresql了.
普通的軟件安裝好之后運行的是exe, 而這個運行的是容器, 容器里面是postgresql.
整個針對普通的軟件安裝的流程如下:
docker run 命令
docker run 這個命令會一次性執行上面整個流程.
注: 所有的docker命令都是以docker開頭, 也就是調用docker程序. docker run xxx表示讓docker運行某個image. 然后客戶端就會通過API調用告訴服務端(Daemon守護進程, 它實現了Docker Remote Api或者叫Docker Engine Api). Daemon首先看看本地有沒有這個image, 然后沒找到這個image, 然后daemon就會從docker hub 拉取下來這個image到本地, 然后使用這個image來創建新的container.
下面執行docker run postgres:
可以看到postgresql已經運行起來了. 其內容和單獨安裝的postgresql運行起來是一樣的.
使用 docker ps 命令查看正在運行的容器:
然后按照官方文檔的命令使用psql去連接postgresql:
可以看到, 進入到psql環境了. 這個postgres和傳統方式安裝的postgresql功能是一樣的.
寫個postgresql命令試試:
docker exec 運行容器內的命令:
我電腦現在運行的是docker的linux容器, 所以可以使用這個命令運行一下linux的bash:
首先使用docker ps命令查看正在運行的容器, 然后使用docker exec -it 08 bash執行ID為08開頭的容器內的bash命令. -it表示交互模式.
然后使用ps -e查看該容器內的linux的進程, 里面有bash, 剛才啟動運行的psql, ps.
退出
在交互模式下使用exit命令進行退出:
停止運行容器則需要使用docker stop 容器ID這個命令:
以上這些就是使用docker的原因.......
出處:http://www.cnblogs.com/cgzl/p/8458926.html
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
另附一篇自己制作鏡像的教程:
編寫Dockerfile,
1、根據你選擇的基礎鏡像,
2、然后在此基礎上預先寫好安裝那些軟件的或者依賴的運行命令,
3、寫好拷貝你自己的項目文件的命令
4、預約開放端口
5、編譯 .
這是文檔,拿走不謝
> https://doc.yonyoucloud.com/doc/docker_practice/dockerfile/basic_structure.html