Dockerfile是用來構建Docker鏡像的構建文件,是由一系列命令和參數構成的腳本。
DockerFile構建三步驟:
1、編寫DockerFile;2、docker build ;3、docker run
DockerFile體系結構:
FROM 基礎鏡像、當前新鏡像是基於哪個鏡像的
MAINTAINER 鏡像維護者的姓名和郵箱地址
RUN 容器構建時需要運行的命令
EXPOSE 當前容器對外暴露出的端口
WORKDIR 指定在創建容器後,終端默認登陸的進來工作目錄,一個落腳點
ENV 用來在構建鏡像過程中設置環境變量
ADD 將宿主機目錄下的文件拷貝進鏡像且ADD命令會自動處理URL和解壓tar壓縮包
COPY 類似ADD,拷貝文件和目錄到鏡像中。
將從構建上下文目錄中 <源路徑> 的文件/目錄複製到新的一層的鏡像內的 <目標路徑> 位置
VOLUME 容器數據卷,用於數據保存和持久化工作
CMD 指定一個容器啓動時要運行的命令
Dockerfile 中可以有多個 CMD 指令,但只有最後一個生效,CMD 會被 docker run 之後的參數替換
ENTRYPOINT 指定一個容器啓動時要運行的命令
ENTRYPOINT 的目的和 CMD 一樣,都是在指定容器啓動程序及參數
ONBUILD 當構建一個被繼承的Dockerfile時運行命令,父鏡像在被子繼承後父鏡像的onbuild被觸發
簡單運用:以ubuntu爲基礎鏡像來構建一個新的鏡像
首先去dockerhub上拉取ubuntu鏡像,參考上一篇文章docker筆記(二、commit命令運用)
以這個ubuntu創建的新容器默認登陸的工作目錄是默認的根目錄,並且用不了vim和ifconfig命令
所以我想以這個ubuntu來構建一個新的鏡像,新鏡像裏面更改了終端默認登陸的進來工作目錄以及安裝了一些工具:
首先編寫DockerFile文件
#基於ubuntu鏡像
FROM ubuntu:latest
#作者的聯繫方式
MAINTAINER admin<[email protected]>
#創建工作目錄
RUN mkdir -p /docker
#進入工作目錄
WORKDIR /docker
#設置環境變量
ENV mypath /docker
#下載一些工具
RUN apt-get -y update
RUN apt-get install -y vim
RUN apt-get install net-tools
#對外開放8080端口
EXPOSE 8080
CMD /bin/bash
在DockerFile文件所在的目錄進行build,注意build命令後面有一個小點
sudo docker build -f DockerFile -t ubuntu:1.1 .
其中 -f 後面可以跟指定路徑的DockerFile文件
-t 後面跟新鏡像名以及標籤
命令最後面有一個.
構建的過程比較長,就不一一貼出了,直到最後看到successfully就證明build完成了
build完成後,就能看到剛纔構建的鏡像了
以這個ubuntu1.1鏡像創建新容器並進入該鏡像,發現默認的登陸目錄變成了DockerFile文件裏面指定的目錄了,並且可以使用vim和ifconig命令了
後臺運行容器:
sudo docker run -it -d --name myUbuntu ubuntu:1.1
-d 以守護進程方式啓動
--name 給新啓動的容器起一個別名(--name 別名 容器名或容器id)
將容器導出到本地:
sudo docker export 388fc39489bf > myUbuntu.tar
docker導入本地鏡像文件:
將剛纔的容器和鏡像都刪除掉
(docker rm 容器id 、docker rmi 鏡像id)
然後執行下面命令:
cat /home/lenovo/docker_test/my_ubuntu/myUbuntu.tar | sudo docker import - ubuntu:1.1