學習docker on windows (1): 爲何要使用docker

爲何要用Docker?

若是咱們想使用某種pc軟件, 那麼在互聯網上查找並安裝軟件的流程大體以下圖:html

那麼這就有幾個問題要弄清楚:mysql

  • 從哪裏得到軟件
    • App Store
    • Linux的包管理
    • 從某些網站直接下載
  • 軟件是否提供了相關信息和數據
    • 例如流行度, 下載次數, 存在的bug, 上次的更新時間等等.
  • 信任問題
    • 下載軟件的網站是否爲官方網站
    • http 仍是 https
    • 代碼
  • 是否還能夠下載
  • 是否收費

第一個使人困擾的問題: 安裝軟件

  • 軟件是否支持個人操做系統/版本
  • 是否支持個人設備的CPU架構
  • 軟件的格式
    • 有些是從源碼進行安裝
    • 有些是單獨的exe文件
    • 有的是exe+dlls
    • 有時候是exe+dlls+依賴某些運行時
  • 軟件的安裝方式
    • 有自帶的安裝器
    • 使用包管理工具安裝
    • 手動安裝
  • 軟件的更新和卸載
    • 自動更新?
  • 軟件的配置(對於新手來講可能這就是個噩夢)

從上面這些問題能夠看出, 如今這個年代, 安裝個軟件真是個挺麻煩的事, 尤爲是用於開發相關的軟件, 有時候讓人頭疼.linux

第二個問題: 軟件的運行

這方面可能會存在如下問題:sql

  • 是否有詳細的幫助文檔
  • 軟件在哪運行
    • 是否須要手動修改系統某些設置
    • 是否須要設置環境變量PATH
  • 如何開始, 如何結束
  • 是否須要註冊服務
    • 如何註冊服務
    • 是否須要手動編寫服務配置
  • 是否須要許可
  • 如何安裝和運行軟件的依賴項
    • 若是沒找到依賴項會怎麼處理
    • 循環的依賴項
  • 安全性, 沙箱運行?
  • 破壞性更新
    • 系統更新是否對軟件有破壞性影響
    • 共享的庫有更新

什麼是容器

Docker不是虛擬機的替代者, docker不是虛擬化技術, 它更可能是關於軟件的運行.mongodb

什麼是容器,它和虛擬機有什麼區別?docker

首先介紹一下虛擬機:windows

虛擬機管理其把服務器的硬件資源(CPU,內存,硬盤,網絡等)切割成多個虛擬的版本, 而後基於這些虛擬的硬件創建操做系統.安全

虛擬機創建的系統就像是正常的系統服務同樣.bash

與虛擬機管理器不一樣, 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,
一、根據你選擇的基礎鏡像,
二、而後在此基礎上預先寫好安裝那些軟件的或者依賴的運行命令,
三、寫好拷貝你本身的項目文件的命令
四、預定開放端口
五、編譯 . 

這是文檔,拿走不謝> https://doc.yonyoucloud.com/doc/docker_practice/dockerfile/basic_structure.html

相關文章
相關標籤/搜索