Docker的安裝和使用及dockerfile簡單使用

一、簡介
Docker是一個基於go語言的開源的應用容器引擎,可以將開發者的應用及依賴包打包到一個可移植容器當中,然後發佈到任何流行的Linux機器中,可以極大的減少開發人員的工作量,Docker也可以實現虛擬化
二、Docker安裝
前提:
Docker自發布以來就變得非常火爆,目前Linux系統、windows系統和mac系統都支持docker,本文以Linux系統介紹Docker的安裝及簡單使用。
Docker的發佈時間也沒有多長時間,因此Linux對Docker的支持也有限制,僅支持64位,目前centos7已經支持docker,安裝要求系統爲64位,內核版本爲3.10以上,對於centos6,安裝要求需centos6.5或更高版本,同樣系統爲64位,docker僅支持64位,同時內核版本爲2.6.32-431 或者更高版本。
可以使用uname -a 查詢內核版本
Docker的安裝和使用及dockerfile簡單使用
博主的內核版本爲3.10.0-862,爲方便使用,安裝的是centos7系統,如果是centos6還需要升級內核版本,稍顯麻煩
Docker安裝:
Docker有兩個版本,Docker-ee和Docker-ce
Docker-ce是社區免費版,Docker-ee爲企業版,需要收費,本文安裝的爲Docker-ce社區免費版
安裝之前安裝相應所需包依賴

yum -y install yum-utils device-mapper-persistent-data lvm2

Docker的安裝和使用及dockerfile簡單使用
下載docker-ce的yum源到/etc/yum.repos.d/下

wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Docker的安裝和使用及dockerfile簡單使用
yum安裝docker-ce
Docker的安裝和使用及dockerfile簡單使用
docker安裝完成,啓動docker,查看docker版本信息

systemctl start docker

Docker的安裝和使用及dockerfile簡單使用
Docker安裝成功
三、Docker使用
首先從最簡單的hello-world開始
運行一個hello-world容器,本地最初沒有hello-world鏡像,會自動從遠端docker hub拉取

docker run hello-world

Docker的安裝和使用及dockerfile簡單使用
使用docker images命令可查詢當前本地主機上的鏡像,我的機器上原來有拉取其它鏡像會有點多,看到有hello-world鏡像即爲ok

docker images

Docker的安裝和使用及dockerfile簡單使用
刪除鏡像使用以下命令

docker rmi imagename<imageid>

Docker的安裝和使用及dockerfile簡單使用
刪除成功
從遠端docker hub拉取鏡像

docker pull imagename<imageid>

Docker的安裝和使用及dockerfile簡單使用
查看本地鏡像列表,拉取成功
Docker的安裝和使用及dockerfile簡單使用
拉取之前可以查詢docker hub可拉取鏡像列表

docker search imagename

Docker的安裝和使用及dockerfile簡單使用
第一個字段爲imagename(鏡像名字),第四個字段爲official,是否爲官方鏡像,個人也可以把自己製作的鏡像放到docker hub上,找到自己想要下載的鏡像名字就可以拉取了。
運行一個新的container

docker run [-i -t -d -p -P -c] [--name]:在容器內運行一個應用程序
 -t :在新容器內指定一個僞終端或終端
 -i:允許你對容器內的標準輸入進行交互
 -d:以進程方式運行容器,讓容器在後臺運行
 -p:設置端口
 -P:將容器內部使用的網絡端口映射到我們使用的主機,就是讓我們訪問我們使用的主機就等同於訪問到容器內部
 -c:command,後面接命令
 --name container name:指定容器名字

運行一個新的container並調用打印命令

docker run ubuntu:15.10 /bin/echo "Hello world"

Docker的安裝和使用及dockerfile簡單使用
運行一個交互式的container(容器)

docker run -it ubuntu:15.10 /bin/bash

Docker的安裝和使用及dockerfile簡單使用
可以發現已經進入到容器當中,退出使用exitctl+d
從遠程docker hub拉取一個鏡像
Docker的安裝和使用及dockerfile簡單使用
在後臺運行一個新的container

docker run -P --name test1 -d training/webapp python app.py

Docker的安裝和使用及dockerfile簡單使用
查看當前運行容器詳情

docker ps

Docker的安裝和使用及dockerfile簡單使用
查看容器端口

docker port containername<containerid>

Docker的安裝和使用及dockerfile簡單使用
可以看到容器test1的端口映射到了本機的32768,可以訪問本機ip的32768端口來查看
Docker的安裝和使用及dockerfile簡單使用
查看容器日誌

docker logs containername<containerid>

Docker的安裝和使用及dockerfile簡單使用
停止指定容器

docker stop containername<containerid>

Docker的安裝和使用及dockerfile簡單使用
再次運行該容器就可以使用

docker start containername<containerid>

Docker的安裝和使用及dockerfile簡單使用
查看指定容器內部運行進程

docker top containername<containerid>

Docker的安裝和使用及dockerfile簡單使用
查看歷史啓動的容器

docker ps -a

Docker的安裝和使用及dockerfile簡單使用
刪除容器,容器必須處於停止狀態

docker rm containername<containerid>

Docker的安裝和使用及dockerfile簡單使用
其它命令
爲鏡像添加新的標籤

docker tag

查詢容器ip

docker inspect containername<containerid>

提交容器副本

docker commit [-m -a] container-id image-name
-m:提交的描述信息
-a:指定鏡像作者
container-id:容器ID
image-name:你要命名的鏡像名

先寫這麼多,後續補充
補充:
前邊有提到可以將自己的本地鏡像上傳到docker hub上,那麼如何生成自己的鏡像呢?docker提供一種docker file的方式來生成本地鏡像,你也可以通過docker file的方式把你的項目打包成鏡像來使用。
四、Dockerfile部分命令
首先,每個指令的前綴必須大寫

FROM 指定基礎鏡像,後可跟鏡像名字或鏡像id    
例:FROM centos:6.0
MAINTAINER 作者   指定作者    
例:MAINTAINER root
ADD 把文件複製到到容器的指定目錄,如果是tar包會自動解壓,後可跟本地文件或url,如果是url,功能類似於wget 
例:ADD nginx-1.9.3.tar.gz /usr/local
RUN 告訴docker要在鏡像內執行的命令,後可跟shell命令或普通命令  
例:1.RUN useradd test   2.RUN /bin/echo "hello test"
CMD 容器啓動時要運行的命令       
例:1.CMD ["nginx"]  2.CMD ["service mysqld start"]
RUN & CMD 區別:
RUN是構建容器時就運行的命令以及提交運行結果,即執行 docker build時運行,一個dockerfile可以有多個
CMD是容器啓動時執行的命令,即執行 docker run時運行,一個dockerfile只有1個
LABEL爲鏡像指定標籤      
例:LABEL version="1.0"
EXPOSE 將容器的監聽端口暴露給外部,這樣才能使主機和container建立映射,即在dokcer run使指定-p端口映射
關係 
例:EXPOSE 80
ENV  設置環境變量    
例:ENV PATH /usr/local/nginx/sbin:$PATH
VOLUME 可實現掛載功能,可以將內地文件夾或者其他容器中的文件夾掛在到這個容器中,容器使用的是AUFS,
這種文件系統不能持久化數據,當容器關閉後,所有的更改都會丟失。所以當數據需要持久化時用這個命令。
例:VOLUME /usr/local/nginx/conf/nginx.conf /etc/nginx/nginx.conf 
將主機上的/usr/local/nginx/conf/nginx.conf文件掛在到容器的/etc/nginx/nginx.conf文件
copy 與add類似,區別爲copy後只能跟本地目錄
workdir 設置工作目錄,類似於linux的cd命令
user 設置啓動容器的用戶    1.USER daemon  2.USER UID
stopsignal  當容器退出時給系統發送什麼樣的指令

dockerfile命令其實有好多和linux系統本身命令的功能相似,還是相對比較好理解,爲方便理解,博主做了一個關於將nginx服務打包成鏡像並使用的一個例子。
首先我們需要把我們的要用到的nginx安裝包和dockerfile放在同一目錄下
Docker的安裝和使用及dockerfile簡單使用
創建Dockerfile文件,其實就是把nginx的安裝過程寫成了腳本,只不過要符合dockerfile的規範。

FROM    centos:6.7       ---基礎鏡像centos6.7
MAINTAINER      test    ----dockerfile作者,test

ADD     nginx-1.6.2.tar.gz /usr/local/src  ----解壓nginx安裝包到container的/usr/local/src中
RUN     yum -y install wget gcc gcc-c++ make openssl-devel pcre-devel    ---在容器內要執行的命令,安裝包依賴
RUN     useradd -s /sbin/nologin nginx    --------在容器內要執行的命令,新增nginx用戶
WORKDIR /usr/local/src/nginx-1.6.2  ------------container內跳轉目錄到/usr/local/src/nginx-1.6.2
RUN     ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module 
--with-http_stub_status_module && make && make install   ------ 在容器內要執行的命令,源碼安裝nginx
RUN     echo "daemon off;">>/usr/local/nginx/conf/nginx.conf     ------在容器內要執行的命令,設置nginx前臺運行
ENV     PATH /usr/local/nginx/sbin:$PATH   ---- ---設置環境變量
EXPOSE  80     --------------------------------------------設置映射端口
CMD     ["nginx"]    ---------------------------------------容器啓動時要執行的命令

Docker的安裝和使用及dockerfile簡單使用
構建鏡像操作

docker build

執行

docker build -t nginx:1.6 .
-t      ---------指定鏡像名和標籤

請注意,最後面有一個點 ‘.’,指定dockerfile的路徑,也可以寫爲絕對路徑
Docker的安裝和使用及dockerfile簡單使用
執行成功會出現
Docker的安裝和使用及dockerfile簡單使用
查看本地鏡像可以看到我們構建的鏡像
Docker的安裝和使用及dockerfile簡單使用
運行我們構建的鏡像,映射到本地的80端口
Docker的安裝和使用及dockerfile簡單使用
查看本地端口80
Docker的安裝和使用及dockerfile簡單使用
訪問本地80端口,成功
Docker的安裝和使用及dockerfile簡單使用

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