你不得不瞭解的應用容器引擎---Docker

来源:http://www.cnblogs.com/johnson108178/archive/2017/12/15/8043879.html
-Advertisement-
Play Games

最近突然想搭一個redis集群玩玩,因為公司的電腦同時開2個虛擬機就卡的不行,所以我就想到用Docker開啟多個redis-server來搭建。然後在網上找著找著發現,使用Docker,哪需要搭建啊,直接Docker pull一個鏡像就OK了。加上之前使用Docker,五分鐘搭建一個類似github ...


最近突然想搭一個redis集群玩玩,因為公司的電腦同時開2個虛擬機就卡的不行,所以我就想到用Docker開啟多個redis-server來搭建。然後在網上找著找著發現,使用Docker,哪需要搭建啊,直接Docker pull一個鏡像就OK了。加上之前使用Docker,五分鐘搭建一個類似github的Gogs項目平臺和Rancher雲,不得不感嘆,Docker給用戶帶來了太多的方便。

1、寫在最前面

要是在幾年前,你說你不瞭解Docker,那還情有可原。現如今再不瞭解甚至不知道Docker,那我只能說,兄弟,過分了啊?

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的Linux機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。

說的通俗易懂點,本人是一個php開發者,比如剛買了一個Linux伺服器,需要部署項目到伺服器上,以前我們是這麼乾的:安裝php-安裝mysql-安裝Nginx/Apache,然後再部署項目。這中間的過程老司機都懂有多痛苦。

那麼有了Docker後,我們可以這麼乾:

  • DockerHub上找一個你喜歡的鏡像,可以是php-nginx/Apache-mysql的,也可以是php-nginx,然後把mysql單獨出來的,我使用的就是後一種。也推薦大家使用這種,這樣這個mysql容器就可以被多次使用。
  • 運行Docker pull imagesName,下載你的鏡像。
  • 使用Docker run 運行你的容器吧。

好了,到這裡就結束了,你可以部署你的項目了。(這裡先說個流程,具體的操作命令後面會說。)

 

2、我眼中的Docker

Docker提倡”Build once,Run anywhere“。當然,它也做到了。想瞭解Docker,就必須知道他的三個特性:

  • 鏡像

    Docker鏡像是面向Docker引擎的一個只讀模板,它也是創建容器的必需品。

  • 容器

    每一個容器的創建都必須依賴於一個鏡像,但一個鏡像可以被用來創建多個容器。你可以想虛擬機一樣去操作它-開始,停止,重啟,刪除。。

  • 倉庫

    其實也就是鏡像的倉庫,目前鏡像基本都放在DockerHub上,其上存放了大量的鏡像供用戶下載。

3、安裝Docker

https://docs.docker.com/engine/installation/ 官方安裝文檔。雖然是英文的,但還是很全的,不要怕看不懂,實在看不懂的時候咱就右鍵->翻成中文(簡體)

4、Docker基本命令

下麵給大家介紹一些Docker常見的基本命令。

docker images : 查看本地鏡像   -a 列出本地所有的鏡像(含中間映像層,預設情況下,過濾掉中間映像層)

docker pull 鏡像名 :從倉庫拉取鏡像到本地

docker run :運行容器(說下這條命令的一些常用參數)

  --name 為容器指定一個名稱

  -p 埠映射,即宿主機的埠映射容器埠,可以指定多個

  -v 數據掛載,即將容器內的數據掛載到宿主機上,可自動同步

  -d 後臺運行容器

  --link 可用來連接兩個容器

  -m 設置容器使用記憶體最大值

docker ps :列出本地容器 -a 列出所有本地容器

docker exec -it 容器ID /bin/bash :以終端交互模式進入容器

docker login -u 用戶名 -p 密碼:用戶名和密碼都是dockerhub平臺的

docker push 鏡像名:tags :上傳本地鏡像到鏡像倉庫

docker commit 容器ID 鏡像名:tags:從容器創建一個新的鏡像

  這個鏡像名的命名格式應該為:dockerhub的用戶名/鏡像名 。否則你生成的鏡像無法上傳的自己的dockerhub鏡像庫。

  -a  提交的鏡像作者

    -m 提交時的說明文字;

 

5、容器間的通信

  • 使用--link參數連接

    假設機器上已經通過docker pull下載了mysql鏡像和php-nginx鏡像。

    1、啟動mysql容器,並命名為myDB

      docker run --name myDB -e MYSQL_ROOT_PASSWORD=111111 -d mysql

    2、啟動php-nginx容器

      docker run --name php-nginx --link myDB:mysql -p 8002:80 -d webdevops/php-nginx

      --link myDB:mysql 就是告訴要創建的容器,要使用myDB這個容器,並且起了一個別名叫mysql。這樣在新創建的容器里就可以使用“mysql”來連接myDb這個容器。

    但這種通信方式有一個局限性,就是只有運行在同一臺伺服器上的容器間可以通信,想要跨伺服器通信,就看下麵的另一種連接方式。

  • 通過宿主機埠連接

    這種方式更簡單更容易理解。在創建mysql容器的時候與宿主機建立埠映射:docker run --name myDB -p 3306:3306 -e MYSQL_ROOT_PASSWORD=111111 -d mysql.

    這樣,假如你的宿主機IP是127.0.0.1.那麼你就可以在任何地方用127.0.0.1:3306來連接mysql容器。推薦使用這種方式,因為方便我們使用Navicat等資料庫圖形工具來連接。

 

6、數據掛載

如果有一天你的mysql容器不小心被刪除了,那麼裡面的數據隨之也會不見,這是相當相當相當可怕的事情。所以這裡我們就要用到數據掛載了。

docker run --name myDB -p 3306:3306 -e MYSQL_ROOT_PASSWORD=111111 -v /data/mysql:/var/lib/mysql -d mysql。

這樣,mysql中的數據就會自動同步到你宿主機的/data/mysql目錄中,若該目錄不存在,則會自動創建。這裡的mysql數據備份就要你們自己來了。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 每個版本的 .NET framework 都包含公共語言運行時 (CLR)、基類庫和其他托管庫。 本主題按版本介紹了 .NET Framework 的關鍵功能,提供了有關基礎 CLR 版本和相關開發環境的信息,並標識了 Windows 操作系統所安裝的版本。 備註 若要瞭解如何下載和安裝 .NET ...
  • 今天做了一個統計站點的網頁,想要發佈一下,中間碰到不少問題,現在和大家分享一下! 這是我想要最終的網頁結果: 1.發佈站點到桌面(任意路徑) 2.安裝IIS 3.安裝好後,打開IIS,新建站點web,結果瀏覽時,提示瀏覽文件的許可權不夠。於是,新建用戶Everyone,修改該web站點的許可權。 給Ev ...
  • .Net Core 將之前Web.Config中的配置遷移到了appsettings.json文件中,並使用ConfigurationBuilder來讀取這個配置文件。並可設置在配置文件變化以後,自動重新載入,這樣可不用重啟你的程式。 ...
  • 一、MVC簡介 MVC:Model-View-Controller(模型-視圖-控制器),MVC是一種軟體開發架構模式。 1、模型(Model) 模型對象是實現應用程式數據域邏輯的應用程式部件。 通常,模型對象會檢索模型狀態並將其存儲在資料庫中。 例如,Product 對象可能會從資料庫中檢索信息, ...
  • 背水一戰 Windows 10 之 控制項(自定義控制項): 自定義控制項的基礎知識,依賴屬性和附加屬性 ...
  • 1.在之前第36章里,我們學習了通過驅動的oops定位錯誤代碼行 第36章的oops代碼如下所示: 1.1那為什麼在上一章,我們用錯誤的應用程式,卻沒有列印oops,如下圖所示: 接下來,我們便來配置內核,從而列印應用程式的oops 2.首先來搜索oops里的:Unable to handle ke ...
  • 前言 使用VMware安裝虛擬機這個一般都知道,操作簡單。而本文主要講使用虛擬機的後續相關配置。並記錄使用過程中遇到的問題以及一些技巧。本篇文章以後回持續更新的。。。 安裝包准備 VM:12 Linux:CentOS 7.0 百度雲盤: 鏈接:https://pan.baidu.com/s/1geE ...
  • Win10筆記本如何禁用觸摸板呢?Win10筆記本如何設置“插入滑鼠自動禁止觸摸板功能”呢?雖然筆記本觸摸板在一定程度上可以方便我們的 操作,但是在以滑鼠和鍵盤做為重要的輸入設備的情況下,筆記本觸摸板有時由於觸摸、誤按等操作,導致造成一些不必要的後果。對此我們可以通過 以下方法實現筆記本觸摸板的禁用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...