文章目錄
dockerfile 例子
example
From ubuntu:14:04
MAINTAINER foo bar <[email protected]>
RUN apt-get update
RUN apt-get install -y nginx
RUN echo"\ndaemon off;">>/etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx
VOLUME ["/data","/etc/nginx/site-enable","/var/log/nginx"]
WORKDIR /etc/nginx
CMD ["nginx"]
EXPOSE 80
EXPOSE 443
指令介紹
FROM: 指定鏡像 名字:標籤
MAINTAINER:維護者信息
RUN:運行shell腳本 一定要加上-y,創建時不能接受輸入
VOLUME: 與主機共享目錄 也可運行時 -v
CMD:啓動腳本
WORKDIR:爲CMD中設置可執行文件設置運行目錄
EXPOSE:與主機相連的端口
From 可以有多個,多個則創建多個鏡像
Maintainer 維護則信息可省略
Run 腳本
RUN shell
RUN [“apt-get”,“install”,"-y",“nginx”] #非shell
可執行文件 形參
run的執行結果會被緩存,下次創建不想緩存build --no-cache
CMD 啓動腳本
CMD shell
CMD [“可執行文件”,“形參”] #無shell
ENTRYPOINT[“可執行文件”] 而後 CMD[“形參”] 分開寫
只能執行一次
docker run --entrypoint
EXPOSE 80 443 對主機露端口號
ENV 環境變量
ENV HELLO 1234
ADD 用於向鏡像添加文件,要複製的文件,以相對路徑,當前目錄以內
還會解壓縮 解包 對於網絡文件只解壓縮不解包(tar)
外部文件
網絡文件
curl http:/xxxx/tar.gz | tar -xz
COPY 用於添加文件
但不會解壓縮包,不能用於網絡文件
VOLUME 將目錄存儲到主機內
VOLUME /data
VOLUME ["/data","/var/log/hello"]
不能指定主機目錄
只有在docker run時指定,否則用默認的
USER <用戶名>
USER後面所有的 RUN CMD ENTRYPOINT 都是以該用戶執行的
WORKDIR
爲那些命令設置工作路徑
可更換以改變路徑
ONBUILD 觸發式,當別人用你的鏡像的時候,FROM 後面就會執行
ONBUILD RUN touch /hello.txt
可查看 docker inspect -f “{{.ContainerConfig.OnBuild}}” example
構建命令
build命令創建鏡像
docker build <選項> <dockerfile路徑> --tag 名字:標籤 .
docker images 查看
.dockerignore 忽略某些目錄 ,遵循go語言規則
經常忽略.git .svn這類
運行選項(在構建完成,後追加到生成容器階段)
docker run --name hello-nginx -d -p 80:80 -v /root/data:data hello:0.1
docker -d 後臺運行
-p 端口映射
-v 文件映射
-e 設置環境變量
–rm 一次性用完即毀壞
–privileged 容器可以有主機內核功能
查看歷史
docker history <鏡像名orID>:<標籤>
複製文件
docker cp hello-nginx:/etc/nginx/nginx.conf ./
docker cp <容器名>:<路徑><主機路徑>
從容器中創建鏡像
docker commit 從容器
docker commit -a “Foo Bar [email protected]” -m “add hello.txt” hello-nginx hello:0.2
-a
-m
提交用戶註冊信息
查看容器文件修改與鏡像對比
docker diff hello-nginx
A添加
C修改
D刪除
查看內容
docker inspect <內容>
上傳私有倉庫時,先要打上標籤
docker tag : <私有倉庫url>:/:
docker push :/:
別名
docker run --link <別的容器名>:<在本容器內叫什麼>
docker ps 查看端口號
引用時<別名>:<端口號>
數據卷的概念
主機中掛載到docker容器內的,任何修改都會保存的。
-v [主機(省略就會掛到/var/…docker)]:[容器內]
數據卷容器
docker run -i -t --volumes-from hello-volume(容器名) --name www
這樣那些數據卷就會自動掛載到這個容器www中了
創建基礎鏡像步驟
ubuntu
- 安裝bootstrap工具
sudo apt-get install debootstrap
sudo debootstrap trusty trusty #ubuntu版本代號 目錄
tar -C trusty -c . | sudo docker import - trusty
打包文件 並且 傳給 docker import
centos
省略
空鏡像
tar cv --files-from /dev/null | sudo dcoker import - scratch
打空包
Dockerfile
From scratch
ADD ./hello /hello
CMD ["/hello"]
ADD 鏡像中要包含的文件 <本地路徑> <鏡像路徑>