Docker 從入門到掉坑,學到就是賺到

Docker 介紹

簡單的對docker進行介紹,能夠把它理解爲一個應用程序執行的容器。可是docker自己和虛擬機仍是有較爲明顯的出入的。我大體概括了一下,能夠總結爲如下幾點:java

Docker 從入門到掉坑,學到就是賺到

docker自身也有着不少的優勢,關於它的優勢,能夠總結爲如下幾項:mysql

Docker 從入門到掉坑,學到就是賺到

Java程序員加入Java技術劍能夠領取一份【Java核心知識點整理】文檔【涵蓋Java架構師必會的29個技能解析】
linux

安裝docker

從 2017 年 3 月開始 docker 在原來的基礎上分爲兩個分支版本: Docker CE 和 Docker EE。nginx

Docker CE 即社區免費版,Docker EE 即企業版,強調安全,但需付費使用。程序員

首先咱們須要移除舊的docker版本:redis

$ sudo yum remove docker \
 docker-client \
 docker-client-latest \
 docker-common \
 docker-latest \
 docker-latest-logrotate \
 docker-logrotate \
 docker-selinux \
 docker-engine-selinux \
 docker-engine複製代碼

接着咱們須要安裝一些必要的系統工具:sql

sudo yum install -y yum-utils device-mapper-persistent-data lvm2複製代碼

接下來咱們須要添加軟件源信息:docker

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo複製代碼

更新 yum 緩存:centos

sudo yum makecache fast複製代碼

驗證容器

上邊的操做都是一些準備操做,若是步驟過程當中沒有出現什麼異常的話,後邊就能夠安裝docker了緩存

sudo yum -y install docker-ce複製代碼

安裝完畢以後即是開啓docker後臺服務步驟:

sudo systemctl start docker複製代碼

當咱們的docker鏡像下載完畢以後,默認會有個helloworld的鏡像用於測試:

測試運行 hello-world

因爲本地沒有hello-world這個鏡像,因此會下載一個hello-world的鏡像,並在容器內運行。

關於docker的鏡像和容器介紹

容器的本質就是進程,不一樣的容器有着本身獨立的root文件系統,網絡配置,一個隔離的空間。容器一旦消失,則裏面包含的數據也會發生丟失。容器裏面全部的存儲信息都應該使用數據卷或者其餘形式。數據卷的生存週期獨立於容器,容器消亡,數據卷不會消亡。所以,使用數據卷後,容器刪除或者從新運行以後,數據卻不會丟失。

Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建以後也不會被改變。

docker安裝nginx

初步安裝完了docker以後便開始進入一些實戰環節吧

首先咱們須要在docker裏面pull相關的nginx鏡像:

一開始宿主機並無啓動docker容器,須要啓動docker服務

而後pull鏡像下來,而且啓動

參數講解:-d 後臺啓動 -p 宿主機的80端口映射容器的80端口。測試一下相關頁面,成功則以下圖:

Docker 從入門到掉坑,學到就是賺到

接下來咱們能夠查看一下鏡像標籤

這個命令查詢出來的只是鏡像的id,可是咱們沒法根據鏡像id進入容器中,進入容器須要有容器的id才能夠:

因而能夠經過這個命令來查看容器的id:

而後進入容器修改信息
進入容器的命令有不少種,這裏推薦可使用這種類型:

經過選擇相應的tag-id進入容器,進入到容器裏面以後,會發現裏面彷彿就是一個新的linux操做系統:

Docker 從入門到掉坑,學到就是賺到

如何關閉docker容器?

比較簡單,這裏很少說,本身操做就懂了

docker kill 4591552a4185複製代碼

文件拷貝

懂得了基本的docker容器操做以後,咱們來試試如何上傳文件到docker容器中,這個須要和宿主機進行文件交換才能夠。

首先咱們須要拿到容器id的全稱:

而後將文件拷貝進入docker容器中:

接下來的操做就比較簡單了,查看到移動的頁面便可:

接下來的基本都是常規操做了,進入咱們的nginx配置中:

發現沒有vi命令,須要下載安裝

在使用docker容器時,有時候裏邊沒有安裝vi,敲vi命令時提示說:vi: command not found,這個時候就須要安裝vi,但是當你敲apt-get install vi命令時,提示:

這時候須要敲:apt-get update,這個命令的做用是:同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,這樣才能獲取到最新的軟件包。等更新完畢之後再敲命令:apt-get install vi命令便可。

如今docker有了,nginx鏡像也開啓了,就能夠對nginx的配置作修改了。

docker裏面安裝redis

首先仍是老規矩,pull鏡像

拉取鏡像結束以後,內容以下:

ok,基本鏡像有了,那麼就直接開啓容器吧

這裏咱們修改了宿主機的端口號爲8879映射容器裏面的6379哈。

參數解釋

  • -p 8879:8879: 將容器的8879端口映射到主機的6379端口
  • -v $PWD/data:/data : 將主機中當前目錄下的data掛載到容器的/data
  • redis-server —appendonly yes : 在容器執行redis-server啓動命令,並打開redis持久化配置

啓動完畢以後,一切都開始正常運行了。

進入容器,開始檢測redis是否正常:

這裏建議開啓redis的時候最好在宿主機作一份redis配置文件,映射到容器裏面,否則進入容器中根本找不到相應的redis配置文件,很痛苦。

docker裏面安裝MySQL

這部分的內容比較簡單,只須要將鏡像拉下來便可:

而後等待一段時間,終於咱們的MySQL容器安裝好了:

Docker 從入門到掉坑,學到就是賺到


容器的內存資源消耗狀況
因爲我購買的是一臺小型的服務器,相關的配置以下所示,因此在給各個運行的容器進行資源分配的時候須要考慮到每一個docker容器佔用的資源狀況。

Docker 從入門到掉坑,學到就是賺到

目前已經搭建了mysql容器,redis容器,還有一個nginx容器,若是再添加一個java應用的話,目測跑java容器須要至少500m左右的內存大小來支撐。

經過使用docker stats命令來看當前服務器的內存,因爲平日的訪問量並不高,能夠給當前的mysql,redis分配小一些內存資源:

Docker 從入門到掉坑,學到就是賺到

這時候能夠採用docker的update命令來對內存大小進行管理分配:

--memory-swap -1 參數是指不讓容器和宿主機進行內存交換,若是須要則須要額外調整,
設置下內存的限制以後結果以下:

Docker 從入門到掉坑,學到就是賺到

docker容器啓動失敗分析實戰

在配置docker新容器的時候,例如說給mysql配置my.cnf文件的某些屬性,須要重啓容器才能生效。可是有時候可能由於手誤,致使配置出現異常,容器重啓失敗,這個時候該怎麼辦呢?

這個時候最簡單粗暴的方式就是,將該容器先rm掉,而後從新安裝,可是這樣的操做過於暴力化,萬一容器裏面還有其餘重要數據,直接rm操做不可取。

其實docker本質也是安裝在宿主機裏面的,因此相應的配置文件在宿主機裏面也能找到痕跡,這裏記錄了以前我掉坑的一些補救方式:

經過該命令能夠查看到容器的內部配置屬性信息:

Docker 從入門到掉坑,學到就是賺到

這時候咱們能夠查看到一個叫作MergedDir的目錄文件夾,進入該文件夾的上一級目錄,

接着咱們查看該目錄下結構,會發現一個叫作diff的文件夾

Docker 從入門到掉坑,學到就是賺到

帶着好奇心,一步一步地進入到文件夾的內部,就會找到以前在docker容器中配置的mysql文件了,手動將原先的配置修改回來,容器便重啓成功了。

Docker 從入門到掉坑,學到就是賺到
相關文章
相關標籤/搜索