1. 程式人生 > >docker入門安裝與簡單使用

docker入門安裝與簡單使用

快速瞭解

(一) Docker 是什麼

官方給出的定義是:Docker是一個集開發,打包,執行應用於一體的開放式平臺。Docker可以用來快速交付應用。使用Docker,你可以將應用程式從你的基礎設施中分離出來,並將基礎設施當做一個管理平臺。Docker可以加快打包時間,加快測試,加快釋出,縮短開發及執行程式碼之間的週期。Docker通過結合核心容器化特點和工作流,並使之工具化來實現這一切,幫助管理和釋出你的應用。

(二) Docker平臺

Docker的生態環境正逐漸壯大起來,Docker的核心,提供了一種執行大部分應用程式的方式,並安全地隔離在容器中。隔離性和安全性允許你在主機上同時執行多個容器。容器天生的輕量級特性,使其在執行時無需載入額外的虛擬機器管理器,這意味著你可以從硬體中獲得更多東西。
容器周邊是一個工具化的平臺,可以從以下幾個方面幫助你:

將你的應用(或支援的元件)置於Docker容器中
分發和打包這些容器,以便將來用於開發和測試
將這些應用部署至生產環境,無論是資料中心還是公有云環境。

(三) Docker 引擎

Docker Engine是一個C/S架構的應用程式,主要有以下元件:

服務端守護程序
REST API介面,程式用來與守護程序進行互動
CLI(command line interface)命令列介面客戶端
Docker Engine Components
這裡寫圖片描述

注:Docker 引擎 組成(圖片來源於docs.docker.com)
CLI使用指令碼或直接使用CLI命令,利用Docker的REST API來控制Docker守護程序或與之進行互動。其他許多Docker應用程式使用底層API和CLI。
守護程序建立並管理Docker物件,Docker物件包括映象,容器,網路,資料卷等等。

(四) Docker可以幹什麼

快速交付應用
便捷的部署和調整
高密集度,高負載

(五) Docker 重要概念

映象(images)

Docker映象是一個只讀的模板。包含了容器執行時所需要的檔案系統和一些引數。映象是無狀態的,也不會改變。映象是用來建立容器的。你可以使用docker pull命令獲取一個別人已建立好的映象,或者使用dockerbuild來構建一個自己的映象。

容器(containers)

Docker容器就像是一個資料夾,容器中包含了應用執行所需的一切。每個容器都是一個隔離的和安全的應用平臺。容器是映象的一個例項,它是有狀態的,而且隨時會改變,容器一般是短暫的。

啟動一個容器的過程如下:

檢查指定的映象是否存在
如果不存在,則去Docker Hub下載
載入映象並執行

Docker註冊中心(Docker Registries):

Docker註冊中心是託管Docker映象的地方,有公共的和私有的,你可以往這些註冊中心上傳或下載映象。
Docker Hub是Docker官方的公共映象倉庫,這裡彙集了非常多的常用映象,我們可以直接從這裡下載使用,也可以自己製作自己的映象,並分享給別人。

docker ubuntu14.04安裝

編者按:docker的發展非常迅速,apt源的更新往往比較滯後。所以docker官網推薦的安裝方式都是下載docker安裝指令碼安裝。
依賴關係:
Ubuntu 14.04版本無需安裝額外的依賴包,可以直接安裝。
安裝步驟:

使用管理員帳號登入ubuntu 14.04系統,保證該管理有root許可權,或者可以執行sudo命令。
檢查curl包有沒有安裝。
$ which curl
如果curl沒有安裝的話,更新apt源之後,安裝curl包。
$ sudo apt-get update $ sudo apt-get install curl
獲得最新的docker安裝包。
$ curl -sSL https://get.docker.com/ | sh 
shell會提示你輸入sudo的密碼,然後開始執行安裝過程。
確認Docker是否安裝成功。
$ sudo docker run hello-world
這個命令會下載一個測試用的映象並啟動一個容器執行它。
這時候本底沒有映象
docker會去Docker註冊中心下載
再 執行 docker run hello-world  執行映象
注意:docker要呼叫底層庫需要 sudo許可權 可以執行 sudo -i後 就切換到root了  


docker run hello-world
接著簡單描述了一下產生該條資訊所經歷的一系列步驟:

1 Docker客戶端連線到守護程序 
2 Docker守護程序從Docker Hub拉取了hello-world映象 
3 Docker守護程序從該映象建立了一個容器,來執行了命令並輸出了我們當前看的這條訊息 
4 Docker守護程序將容器中的標準輸出轉發到你的終端。

另一種校驗方式
sudo service docker status
執行結果:
$ sudo service docker status
docker start/running, process 10692

國情需要

1、配置Daocloud,去官網申請一個賬戶
2、配置 Docker 加速器 將 –registry-mirror 加入到你的 Docker 配置檔案 /etc/default/docker 中
3、重啟docker sudo service docker restart

docker簡單幾個命令

啟動docker服務
$ sudo service docker start
或者
$ sudo systemctl start docker

 設定開機啟動
$ sudo systemctl enable docker

 新增一個docker組(避免每次執行docker命令都帶sudo)
注:1.12版本的docker 安裝完後已經建立好了docker分組,檢查是否已存在:cat /etc/group |grep docker,如果你的沒有,則手動新增一下:
$ sudo groupadd docker
將當前使用者加入docker組
$ sudo usermod -aG docker $USER
編輯/etc/default/grub,修改GRUB_CMDLINE_LINUX的值如下:
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
儲存並退出。重啟系統

檢查版本
$ docker -v
Docker version 1.12.0, build 8eab29e

升級
後續如果有新的版本更新,直接使用apt-get即可:
$ sudo apt-get upgrade docker-engine

解除安裝
在解除安裝或刪除Docker資料時,一定要檢查確保需要的資料已做好備份!
解除安裝Docker:
$ sudo apt-get purge docker-engine
$ sudo apt-get autoremove --purge docker-engine
上述命令只是解除安裝了docker程式,並不會刪除資料(映象,容器,資料卷或你在主機上的配置檔案等),如果要將這些也全部刪除,執行:
$ sudo rm -rf /var/lib/docker
然後手動刪除你建立的配置檔案即可。
注: 

如果你有建立docker組,並且該組也不再需要,則可以將該組刪除:
$ sudo groupdel docker

可以看一下目前所有的容器:
docker ps -a

檢視正在執行的容器:
docker ps

檢視最後建立的一個容器。
docker ps -l

檢視本地映象
docker images

線上查詢映象
如果你不知道都有哪些可用的映象,線上查詢一下
直接使用docker search + [你想查詢的映象關鍵字],如:
$ docker search tomcat
檢視 tomcat的映象


拉取映象
使用docker pull [映象名稱[:版本]]可以拉取一個映象:
注: 完整的映象名稱由[repository]/name:[tag]構成,[repository]為倉庫,如果省略,則預設為library,即從Docker Hub拉取;如果省略tag,則預設拉取latest版本,name為映象名稱,不能省略。
pull tomcat:7

建立容器
 docker run -d --name tomcat001 -p 8081:8080 tomcat:8
其中,-d 指定容器在後臺執行;–name用於指定容器的名稱;-p 8081:8080 用於將容器內的8080埠對映到主機的8081埠,你也可以換成其他本機埠.如果需要,你可以建立多個容器使用,需要注意的是,本機對映的埠不能重複,name也不能重複。

容器日誌
docker logs -f tomcat001

停止容器
docker stop tomcat001

啟動容器
docker start tomcat001

docker run 該命令包括了 docker create 和 docker start

刪除容器
刪除一個容器前,需要先停止容器,否則,需要使用 -f選項強制刪除(不推薦)。 
另外,如果容器包含資料卷的話,可以使用-v選項連同關聯的資料卷一塊刪除,刪除容器時,預設不刪除資料卷,因為資料卷通常會包含我們的資料。
docker rm tomcat001

刪除映象
docker rmi tomcat:8 
//刪除一個映象前,需要先停止使所有用它的容器,否則會報錯,或者使用 -f選項強制刪除。

簡單實踐-跑一個tomcat

1、拉取tomcat的映象

docker pull tomcat:8

2、檢視一下映象是否拉取成功

docker images

3、建立並且啟動容器

docker run -d --name t8 -p 8081:8080 tomcat:8
//最簡單的使用資料卷的方式就是在建立一個容器時 增加-v選項

4、檢視容器日誌

docker logs t8

5、瀏覽器訪問tomcat8

http://宿主機ip:對映埠/

6、關閉容器

docker stop t8

7、啟動容器

docker start t8

8、檢視啟動了的容器

docker ps

9、建立目錄

//建立目錄
sudo mkdir -p /opt/data/myapp/ROOT
sudo chown -R $USER:root /opt/data/myapp  // $USER 當前登入使用者名稱

//在/opt/data/myapp/ROOT下建立一個WEB-INF目錄
mkdir /opt/data/myapp/ROOT/WEB-INF

10、新建一個web.xml

//新建一個web.xml
vi /opt/data/myapp/ROOT/WEB-INF/web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0"
  metadata-complete="true">

  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>

</web-app>

11、新建一個jsp頁面

新建一個jsp頁面
vi /opt/data/myapp/ROOT/index.jsp
<!DOCTYPE html>
<html lang="en">
    </body>
        Hello, this is my first docker app!
    </body>
</html>

12、將我們的應用掛載到容器中
 docker run -d --name myapp -v /opt/data/myapp:/usr/local/tomcat/webapps -p 8888:8080 tomcat:8

13瀏覽器訪問 http://宿主機ip:8888/

打造自己的開發環境映象

1 、新建一個資料夾,並命名為baseos

mkdir -p /opt/data/baseos

該目錄作為我們構建映象的上下文,構建該映象的所有內容都會放到該目錄下。

2、建立Dockerfile檔案

touch Dockerfile //該命令會建立一個空白文字文件

3、編輯Dockerfile

vim Dockerfile

寫入

# Base os image
FROM ubuntu:16.04
MAINTAINER your_name <your_email_address>
LABEL Description="This image is the base os images."  Version="1.0"
# reconfig timezone
RUN echo "Asia/Beijing" > /etc/timezone  && dpkg-reconfigure -f noninteractive tzdata

說明 
以#開頭的行為註釋;
第二行FROM關鍵字告訴docker我們的新映象基於哪個基礎映象;
第三行MAINTAINER關鍵字是維護者資訊,可以修改為你的名字和郵箱地址;
第四行LABEL Description是對映象的一個簡單說明,Version指明該映象的版本號,方便維護;
第六行RUN關鍵字用於執行一條命令。這裡主要是修改系統的時區從標準UTC改為亞洲/Beijing。

4、下載jdk–》移動到Dockerfile所在目錄

5、修改Dockerfile檔案


   # Base os image
   FROM ubuntu:16.04
   MAINTAINER your_name <your_email_address>
   LABEL Description="This image is the base os images."  Version="1.0"
   # reconfig timezone
   RUN echo "Asia/Beijing" > /etc/timezone  && dpkg-reconfigure -f noninteractive tzdata
   ADD jdk-7u80-linux-x64.tar.gz  /usr/lib/jvm
   RUN update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_80/bin/java 300 && update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0_80/bin/javac 300
   ENV JAVA_HOME /usr/lib/jvm/jre

6構建映象、執行docker build -t cjn/baseos:1.0 .命令構建,注意不要忘了最後的那個點.
說明: -t, –tag=”” Repository name (and optionally a tag) to be applied to the resulting image in case of success

7、測試結果

這裡寫圖片描述