首頁 > 軟體

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

2020-06-16 16:46:19

一、簡介
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 查詢核心版本

博主的核心版本為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-ce的yum源到/etc/yum.repos.d/下

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


yum安裝docker-ce

docker安裝完成,啟動docker,檢視docker版本資訊

systemctl start docker


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

docker run hello-world


使用docker images命令可查詢當前本地主機上的映象,我的機器上原來有拉取其它映象會有點多,看到有hello-world映象即為ok

docker images


刪除映象使用以下命令

docker rmi imagename<imageid>


刪除成功
從遠端docker hub拉取映象

docker pull imagename<imageid>


檢視本地映象列表,拉取成功

拉取之前可以查詢docker hub可拉取映象列表

docker search imagename


第一個欄位為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"


執行一個互動式的container(容器)

docker run -it ubuntu:15.10 /bin/bash


可以發現已經進入到容器當中,退出使用exitctl+d
從遠端docker hub拉取一個映象

在後台執行一個新的container

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


檢視當前執行容器詳情

docker ps


檢視容器埠

docker port containername<containerid>


可以看到容器test1的埠對映到了本機的32768,可以存取本機ip的32768埠來檢視

檢視容器紀錄檔

docker logs containername<containerid>


停止指定容器

docker stop containername<containerid>


再次執行該容器就可以使用

docker start containername<containerid>


檢視指定容器內部執行進程

docker top containername<containerid>


檢視歷史啟動的容器

docker ps -a


刪除容器,容器必須處於停止狀態

docker rm containername<containerid>


其它命令
為映象新增新的標籤

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放在同一目錄下

建立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 build

執行

docker build -t nginx:1.6 .
-t      ---------指定映象名和標籤

請注意,最後面有一個點 ‘.’,指定dockerfile的路徑,也可以寫為絕對路徑

執行成功會出現

檢視本地映象可以看到我們構建的映象

執行我們構建的映象,對映到原生的80埠

檢視本地埠80

存取本地80埠,成功

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-09/154111.htm


IT145.com E-mail:sddin#qq.com