Docker鏡像創建及建立私有倉庫
阿新 • • 發佈:2018-08-14
tar.gz 分別是 system ffffff .tar.gz 通過 用戶 apache -o Docker鏡像創建方法
創建鏡像的方法有三種,分別是基於已有的鏡像創建、基於本地模板創建、基於Dockerfile 創建,下面著重介紹這三種創建鏡像的方法。
?
基於已有鏡像創建
- 首先將鏡像加載到容器,將容器裏面運行的程序及運行環境打包起來生成新的鏡像,需要記住該容器的ID號。
- 命令格式: docker commit 【選項】 容器ID/名稱 倉庫名稱:【標簽】
- 常用選項:
- -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 //查看鏡像
?
基於本地模板創建
- 通過導入系統模板文件可以生成鏡像,模板可以從OPENVZ開源項目下載
- 下載地址為:http://download.openvz.org/template/precreated
-
下面以debian模板壓縮包導入為本地鏡像的例子。
# 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
?
基於Dockerfile創建
- Dockerfile是由一組指令組成的文件,每條指令對應linux中一條命令,Docker程序將讀取Dockerfile中的指令生成指定鏡像。
- Dockerfile大致結構:基礎鏡像信息、維護者信息、鏡像操作指令、容器啟動時執行指令。每行支持一條指令,每條指令可以攜帶多個參數,支持以 # 開頭的註釋。
- Dockerfile操作指令:
FROM 鏡像 : 指定新的鏡像所基於的鏡像
MAINTAINER 名字 :說明新鏡像的維護人
RUN 命令 : 在所基於的鏡像上執行命令,並提交到新的鏡像中
CMD ["要運行的程序","參數1","參數2"] :指定啟動容器時要運行的命令或腳本
EXPOSE端口號 : 指定新鏡像加載到Docker時要開啟的端口
ENV環境變量 變量值 : 設置一個環境變量的值,會背後面的RUN用到
ADD源文件/目錄 目標文件/目錄 :將源文件復制到目標文件 ,源文件和Dockerfile位於同一目錄
COPY源文件/目錄 目標文件/目錄 :將本地主機的源文件復制到目標目錄,源文件和Dockerfile位於同一目錄
VOLUME["目錄"] : 在容器中創建一個掛載點
USER 用戶名 /UID :指定運行容器時的用戶
WORKDIR路徑 : 為後續的RUN 、CMD、ENTRYPOINT 指定工作目錄
ONBUILD命令 : 指定所生成的鏡像作為一個基礎鏡像時所要運行的命令。
?
Dockerfile案例
# mkdir apache
# cd apache
# vim Dockerfile //編寫Dokcerfile文件
#基於的基礎鏡像
FROM centos
#維護鏡像的用戶信息
MAINTAINER The porject <[email protected]>
#鏡像操作指令安裝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"]
# vim run.sh //編寫執行腳本
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND
-
使用docker buil生成鏡像 -t 指定鏡像的標簽信息
# echo "web test" > index.html //創建測試頁 # docker build -t httpd:centos . //生成鏡像 (註意別忘了末尾有".")
? - 將新鏡像加載到容器中運行(5000端口自己指定)
-
-p :實現從本地端口5000到容器中80端口的映射。
# docker run -d -p 5000:80 httpd:centos
- 測試
- 在瀏覽器輸入docker服務器IP和指定的端口: http://192.168.200.132:5000/
?
?
-
私有倉庫建立
-
在構建私有倉庫的服務器上下載registry鏡像
# 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
Docker鏡像創建及建立私有倉庫