Docker的安裝及鏡像、容器的基本操做詳見博客https://blog.51cto.com/11134648/2160257
下面介紹Docker建立鏡像和建立私有倉庫的方法,詳細以下:html
建立鏡像的方法有三種,分別是基於已有鏡像建立、基於本地鏡像模板建立以及基於Dockfile建立。下面介紹這三種鏡像的方法web
實質就是把一個容器裏面運行的程序以及該程序的運行環境打包起來生成新的鏡像。docker
命令格式:docker commit [選項] 容器ID/名稱 倉庫名稱:標籤
(1)首先須要查看啓動已有鏡像的容器的ID號shell
docker ps -a
(2)以後使用docker commit命令建立一個新鏡像apache
命令格式:docker commit [選項] 容器ID/名稱 倉庫名稱:標籤 經常使用選項: -m 說明信息 -a 做者信息 -p 生成過程當中中止容器的運行
(3)建立完成後會返回新建立鏡像的ID號json
docker images | grep daoke
經過導入操做系統模板文件能夠生成鏡像,模板文件能夠從OPENVZ開源項目下載,下載地址爲http://download.openvz.org/template/precreated。vim
(1)下載模板文件centos
wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
(2)使用docker導入命令導入爲本地鏡像緩存
cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new
(3)導入完成後會返回生成鏡像的ID信息bash
docker images | grep new
Dockfile是由一組指令組成的文件,其中每條指令對應Linux中的一條命令,Docker程序將讀取Dockfile中的指令生成指定鏡像。
- Dockfile結構大體分爲四部分:基礎鏡像信息、維護者信息、鏡像操做指令和容器啓動時執行指令。
- Dockfile每行支持一條指令,每條指令可攜帶多個參數,支持使用」#「號開頭的註釋。
Dockerfile有十幾條命令可用於構建鏡像,其中常見的指令以下:
指令 | 含義 |
---|---|
FROM 鏡像 | 指定所建立鏡像的基礎鏡像 |
MAINTAINER 名字 | 指定維護者信息 |
RUN 命令 | 在所基於鏡像上執行命令 |
CMD ["要運行的程序",「參數1」,「參數2」] | 指定啓動容器時默認執行的命令 |
LABEL | 指定生成鏡像的元數據標籤信息 |
EXPOSE 端口號 | 指定新鏡像加載到Docker時要開啓的端口 |
ENV 環境變量 變量值 | 設置一個環境變量的值,會被後面的RUN使用 |
ADD < src > <dest> | 賦值指定的< src > 路徑下的內容到容器中的<dest>路徑下,<src>能夠爲URL;,<src>要與Dockerfile位於相同目錄;若是爲tar文件,會自動解壓到<dest>路徑下 |
COPY < src > <dest> | 複製本地主機的<src>路徑下的內容到鏡像中的<dest>路徑下;通常狀況下推薦使用COPY,而不是ADD |
ENTRYPOINT | 指定鏡像的默認入口 |
VOLUME ["目錄"] | 在容器中建立數據卷掛載點 |
USER 用戶名/UID | 指定運行容器時的用戶名或UID |
WORKDIR 路徑 | 爲後續的RUN、CMD、ENTRYPOINT指定工做目錄 |
ARG | 指定鏡像內使用的參數(例如版本號信息等) |
ONBUILD 命令 | 配置當前所建立的鏡像做爲其餘鏡像的基礎鏡像時,所執行的建立操做指令 |
STOPSIGNAL | 容器退出的信號值 |
HEALTHCHECK | 如何進行健康檢查 |
SHELL | 指定使用shell時默認shell類型 |
例如基於Dockerfile建立httpd鏡像,步驟以下:
(1)創建目錄,做爲生成鏡像的工做目錄
mkdir apache cd apache
(2)建立並編寫Dockerfile文件
vim Dockerfile #基於的基礎鏡像 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"]
(3)編寫執行腳本內容
vim run.sh #!/bin/bash rm -rf /run/httpd/* #清理httpd緩存 exec /usr/sbin/apachectl -D FOREGROUND #啓動apache服務
(4)建立測試頁面
echo "web test" > index.html
須要注意的是Dockerfile文件、須要運行的腳本文件以及要複製到容器中的文件都必須在工做目錄下同一級。
(5)使用Dockfile生成鏡像
命令格式:docker build [選項] 路徑 經常使用選項: -t 指定鏡像的標籤信息
docker build -t httpd:centos . #注意別忘了末尾有"."
(6)使用新的鏡像運行容器
docker run -d -p 1216:80 httpd:centos #其中-p選項實現從本地端口1216到容器中的80端口的映射
能夠看到該鏡像已在容器中加載運行
本機的ip地址是192.168.100.138,訪問容器中的Apache服務。
firefox http://192.168.100.138:1216
使用registry鏡像來搭建本地私有倉庫。
docker pull registry
vim /etc/docker/daemon.json { "insecure-registries":["192.168.100.138:5000"]}
systemctl start daemon-reload systemctl restart docker.service
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
docker tag httpd:centos 192.168.100.138:5000/httpd
docker push 192.168.100.138:5000/httpd
curl -XGET http://192.168.100.138:5000/v2/_catalog curl -XGET http://192.168.100.138:5000/v2/httpd/tags/list
docker rmi 192.168.100.138:5000/httpd docker images
docker pull 192.168.100.138:5000/httpd
能夠看出下載速度明顯很快