Docker的簡單使用

一、Docker簡介

​ Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口,更重要的是容器性能開銷極低。
一個完整的Docker有以下幾個部分組成:

  • dockerClient客戶端
  • Docker Image鏡像
  • DockerContainer容器
  • Docker Daemon守護進程
  1. Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。

  2. Docker與虛擬機

    首先,需要明白一點,Docker不是不是虛擬機,Docker與虛擬機有着不同的應用場景,Docker常常用於隔離不同應用,提供不同應用運行環境。虛擬機更擅長於徹底隔離整個運行環境。例如,雲服務提供商通常採用虛擬機技術隔離不同的用戶。

1. 客戶端

  1. 安裝

    ​ 這裏只簡單的介紹在Ubuntu下的安裝,Docker要求Ubuntu系統的內核版本高於3.10,使用uname -r 可以查看當前內核版本。

    ​ 現在的apt,apt-get已經比較強大了,使用apt-get install docker.io即可安裝。

  2. 常用命令

    docker -v   #查看版本信息
    docker 		#查看所有命令選項
    docker 命令 --help   #查看命令的詳細信息
    
  3. Hello World

    docker run ubuntu:15.10 /bin/echo "Hello world"		
    #可能會有點耗時,這是由於本地沒有該鏡像,需要下載
    #ubuntu:15.10:指定鏡像,如果本地沒有則會自動從鏡像倉庫 Docker Hub 下載公共鏡像。
    #/bin/echo "Hello world":shell語句
    

2. 鏡像(Images)

​ 鏡像類似於面向對象編程中的類,也和操作系統的鏡像文件類似,是用來創建容器的模板。

  1. 鏡像的使用

    ​ 當運行容器時,使用的鏡像如果在本地中不存在,docker 就會自動從docker 鏡像倉庫中下載,默認是從 Docker Hub 公共鏡像源下載。我們可以在網上(https://hub.docker.com/)查找鏡像,也可以使用docker search … 來查找,然後使用docker pull … 來獲取

    • 管理和使用本地Docker鏡像

      docker images	#列出本地鏡像
      #各個選項說明
      #    REPOSITORY:表示鏡像的倉庫源
      #    TAG:鏡像的標籤,表示鏡像版本號,同一個鏡像可以創建多個版本
      #    IMAGE ID:鏡像ID
      #    CREATED:鏡像創建時間
      #    SIZE:鏡像大小
      docker pull 鏡像名:版本號	#獲取一個新的鏡像
      
    • 創建鏡像

      當我們從docker鏡像倉庫中下載的鏡像不能滿足我們的需求時,我們可以通過以下兩種方式對鏡像進行更改。

      • 1.從已經創建的容器中更新鏡像,並且提交這個鏡像

        docker run -t -i ubuntu:15.10 /bin/bash		#運行鏡像
        apt-get update	#更新
        exit	#退出
        docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
        #說明:-m:提交的描述信息,-a:指定的鏡像作者
        #e218edb10161 runoob/ubuntu:v2分別是容器ID和要創建的鏡像名和tag
        
      • 2.使用 Dockerfile 指令來創建一個新的鏡像

        1. 創建鏡像生成文件
        FROM    centos:6.7	#版本,Base Image可以從本地拉取也可以從公共庫拉取
        MAINTAINER      Fisher "[email protected]"   #生成這個鏡像的作者。
        
        #以下是在創建之前在這鏡像中執行的語句
        RUN     /bin/echo 'root:123456' |chpasswd
        RUN     useradd runoob
        RUN     /bin/echo 'runoob:123456' |chpasswd
        RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
        EXPOSE  22
        EXPOSE  80
        CMD     /usr/sbin/sshd -D
        
        1. 使用Dockerfile生成鏡像
        docker build -t runoob/centos:6.7 .
        #說明:-t :指定生成的鏡像名和tag,
        	. :後接鏡像生成文件路徑,也可以指定絕對路徑
        

3. 容器(Container)

​ 我的理解是一個運行中的鏡像即爲一個容器,一個鏡像可以運行不同的應用,從而構成不同容器,容器不用像操作系統一樣需要安裝。

  1. 啓動一個容器

    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    [OPTIONS]:參數可選,可以指定後臺運行,默認是不指定後臺運行
    IMAGE:指定運行容器的鏡像文件
    [COMMAND]:需要執行的任務
    eg:
    #1. 直接運行不指定參數,結果會直接輸出
    docker run ubuntu:15.10 /bin/echo "Hello world"
    #2. 後臺運行,-d:指定後臺運行
    docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
    #3.啓動交互式容器,與遠程登錄了一臺操作系統類似
    docker run -i -t ubuntu:15.10 /bin/bash
    

4. 容器連接

一般採用端口映射,在創建時指定

docker run -d -p 5000:5000	...
#說明:
-p:指定映射關係,如果不指定一般會隨機映射,使用docker ps可以查看
例:0.0.0.0:32768->5000/tcp	將本機的容器的5000端口映射爲主機的0.0.0.0:32768端口
完整格式爲:
-p [ip:]port:port[/tcp/udp]

端口映射並不是唯一把 docker 連接到另一個容器的方法,docker 有一個連接系統允許將多個容器連接在一起,共享連接信息。docker 連接會創建一個父子關係,其中父容器可以看到子容器的信息。這裏不再做介紹。

5. 常用命令

  1. 鏡像管理

    docker images	#查看本地所有鏡像
    docker rmi [OPTIONS] IMAGE [IMAGE...]	#刪除一個或多個鏡像
                -f :強制刪除;
                --no-prune :不移除該鏡像的過程鏡像,默認移除;
    docker build [OPTIONS] PATH | URL | -   #用於使用 Dockerfile 創建鏡像。
    			-t:創建的鏡像名字及標籤
    			-f:Dockerfile文件路徑默認爲當前路徑
    			. :不明所以,必須有,
    docker pull [OPTIONS] NAME[:TAG|@DIGEST]	#獲取鏡像
    docker login -u ... -p ...			#登錄
    docker push [OPTIONS] NAME[:TAG]			#上傳到鏡像倉庫,需要先登錄
    docker logout   #退出登錄
    docker search [OPTIONS] TERM   #查找
    
  2. 容器相關

    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]		#創建一個容器
    		-v $PWD/logs:/wwwlogs:文件映射,將主機中當前目錄下的logs掛載到容器的/wwwlogs
    docker ps : 列出容器
    docker start :啓動一個或多個已經被停止的容器
    docker stop :停止一個運行中的容器
    docker restart :重啓容器
    docker kill [OPTIONS] CONTAINER [CONTAINER...]   #殺死一個運行中的容器
    docker logs [OPTIONS] CONTAINER
    

二、實例安裝

1. 安裝 Nginx

實例安裝一遍即鏡像的獲取,可以使用pull獲取也可以自定義創建,自定義創建這裏不做介紹。

  1. 獲取

    docker pull nginx		#獲取
    docker images nginx		#查看
    
  2. 使用

    docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs  -d nginx
    說明:
    -p 80:80:將容器的80端口映射到主機的80端口
    --name mynginx:將容器命名爲mynginx
    -v $PWD/www:/www:將主機中當前目錄下的www掛載到容器的/www
    -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:將主機中當前目錄下的nginx.conf掛載到容器的/etc/nginx/nginx.conf
    -v $PWD/logs:/wwwlogs:將主機中當前目錄下的logs掛載到容器的/wwwlogs
    

2. 安裝其他實例

docker pull php #安裝php
docker pull mysql #安裝mysql
docker pull tomcat
docker pull python:3.5
...

使用總結:

–name:重命名

-p:端口映射

-v:文件映射

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章