一、Docker簡介
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口,更重要的是容器性能開銷極低。
一個完整的Docker有以下幾個部分組成:
- dockerClient客戶端
- Docker Image鏡像
- DockerContainer容器
- Docker Daemon守護進程
-
Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。
-
Docker與虛擬機
首先,需要明白一點,Docker不是不是虛擬機,Docker與虛擬機有着不同的應用場景,Docker常常用於隔離不同應用,提供不同應用運行環境。虛擬機更擅長於徹底隔離整個運行環境。例如,雲服務提供商通常採用虛擬機技術隔離不同的用戶。
1. 客戶端
-
安裝
這裏只簡單的介紹在Ubuntu下的安裝,Docker要求Ubuntu系統的內核版本高於3.10,使用uname -r 可以查看當前內核版本。
現在的apt,apt-get已經比較強大了,使用
apt-get install docker.io
即可安裝。 -
常用命令
docker -v #查看版本信息 docker #查看所有命令選項 docker 命令 --help #查看命令的詳細信息
-
Hello World
docker run ubuntu:15.10 /bin/echo "Hello world" #可能會有點耗時,這是由於本地沒有該鏡像,需要下載 #ubuntu:15.10:指定鏡像,如果本地沒有則會自動從鏡像倉庫 Docker Hub 下載公共鏡像。 #/bin/echo "Hello world":shell語句
2. 鏡像(Images)
鏡像類似於面向對象編程中的類,也和操作系統的鏡像文件類似,是用來創建容器的模板。
-
鏡像的使用
當運行容器時,使用的鏡像如果在本地中不存在,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 指令來創建一個新的鏡像
- 創建鏡像生成文件
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
- 使用Dockerfile生成鏡像
docker build -t runoob/centos:6.7 . #說明:-t :指定生成的鏡像名和tag, . :後接鏡像生成文件路徑,也可以指定絕對路徑
-
-
3. 容器(Container)
我的理解是一個運行中的鏡像即爲一個容器,一個鏡像可以運行不同的應用,從而構成不同容器,容器不用像操作系統一樣需要安裝。
-
啓動一個容器
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. 常用命令
-
鏡像管理
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 #查找
-
容器相關
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獲取也可以自定義創建,自定義創建這裏不做介紹。
-
獲取
docker pull nginx #獲取 docker images nginx #查看
-
使用
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:文件映射