建立鏡像的方法有三種,分別是基於已有的鏡像建立、基於本地模板建立、基於Dockerfile 建立,下面着重介紹這三種建立鏡像的方法。html
- -m:說明信息
- -a:做者信息
- -p:生成過程當中中止容器的運行
# docker create -it nickistre/centos-lamp /bin/bash //將lamp鏡像加載到容器 # docker ps -a //查看容器 # docker commit -m "new" -a "zkc" 74f40e743fe3 lamp:test //建立新的鏡像lamp:test # docker images //查看鏡像
下面以debian模板壓縮包導入爲本地鏡像的例子。linux
# wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz # cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new # docker images | grep new
FROM 鏡像 : 指定新的鏡像所基於的鏡像
MAINTAINER 名字 :說明新鏡像的維護人
RUN 命令 : 在所基於的鏡像上執行命令,並提交到新的鏡像中
CMD ["要運行的程序","參數1","參數2"] : 指定啓動容器時要運行的命令或腳本
EXPOSE端口號 : 指定新鏡像加載到Docker時要開啓的端口
ENV環境變量 變量值 : 設置一個環境變量的值,會背後面的RUN用到
ADD源文件/目錄 目標文件/目錄 :將源文件複製到目標文件 ,源文件和Dockerfile位於同一目錄
COPY源文件/目錄 目標文件/目錄 :將本地主機的源文件複製到目標目錄,源文件和Dockerfile位於同一目錄
VOLUME["目錄"] : 在容器中建立一個掛載點
USER 用戶名 /UID :指定運行容器時的用戶
WORKDIR路徑 : 爲後續的RUN 、CMD、ENTRYPOINT 指定工做目錄
ONBUILD命令 : 指定所生成的鏡像做爲一個基礎鏡像時所要運行的命令。web
# mkdir apache # cd apache # vim Dockerfile //編寫Dokcerfile文件
#基於的基礎鏡像
FROM centos
#維護鏡像的用戶信息
MAINTAINER The porject <cloud-ops@centos.org>
#鏡像操做指令安裝apache軟件
RUN yum -y update
RUN yum -y install httpd
#開啓 80 端口
EXPOSE 80
#複製網站首頁文件
ADD index.html /var/www/html/index.html
#將執行腳本複製到鏡像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#啓動容器時執行腳本
CMD ["/run.sh"]docker
# vim run.sh //編寫執行腳本
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUNDapache
使用docker buil生成鏡像 -t 指定鏡像的標籤信息json
# echo "web test" > index.html //建立測試頁 # docker build -t httpd:centos . //生成鏡像 (注意別忘了末尾有".")
-p :實現從本地端口5000到容器中80端口的映射。vim
# docker run -d -p 5000:80 httpd:centos
# docker pull registry
# vim /etc/docker/daemon.json { "insecure-registries":["192.168.200.132:5000"]} # systemctl restart docker.service # docker create -it registry /bin/bash # docker ps -a # docker start f98557ba50af # docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry 爲registry鏡像啓動一個容器 - v :宿主機的/data/registry自動建立掛載容器中的/tmp/registry使用 # docker tag nickistre/centos-lamp 192.168.200.132:5000/lamp 更改要上傳鏡像的標記爲192.168.200.132:5000/lamp # docker push 192.168.200.132:5000/lamp //上傳 獲取私有倉庫列表 # curl -XGET http://192.168.200.132:5000/v2/_catalog