2021-05-12 14:32:11
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 查詢核心版本
博主的核心版本為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
可以發現已經進入到容器當中,退出使用exit或ctl+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
相關文章