docker中基本概念
Docker
一款輕量級容器管理引擎,由 Docker Daemon、Docker Client 組成。
Docker Daemon
Docker 架構中常駐後臺的系統進程,負責接收處理用戶發送的請求和管理所有的 Docker 容器,所謂的運行 Docker 即代表運行 Docker Daemon。Docker Client
Docker 架構中用戶與 Docker Daemon 建立通信的客戶端。Docker Machine
Docker 官方提供的部署工具。幫助用戶快速在運行環境中創建虛擬機服務節點,在虛擬機中安裝並配置 Docker,最終幫助用戶配置 Docker Client,使得 Docker Client 有能力與虛擬機中的 Docker 建立通信。Docker Compose
Docker 官方提供的容器編排工具。隨着服務的複雜度增長,容器管理過程的配置項將變得冗長,Compose 可有效幫助用戶緩解甚至解決容器部署的複雜性。
更改docker鏡像默認位置:
mkdir /newlocation
mv /var/lib/docker/* /newlocation/docker/
sudo mount -o bind /newlocation/docker /var/lib/docker
初識docker
1.安裝(參照官網https://docs.docker.com/userguide/)
2.docker引擎基礎是linux容器技術(lxc)。
3.docker鏡像是一個面向docker引擎的只讀模板,包含了文件系統。
4.docker運用容器來運行和隔離應用,容器是從鏡像創建的應用運行實例。容器是相互隔離,互不可見的。鏡像自身是隻讀的。容器從鏡像啓動事,docker會在鏡像的最上層創建一個可寫層。
5.docker倉庫集中存放鏡像文件
二。鏡像
1.鏡像是docker運行容器的前提,鏡像文件一般由若干層組成,層識AUFS(一種聯合文件系統)中的概念,識實現增量保存與更新的基礎
docker rmi Image Image可以爲標籤或者id
docker ps -a查看主機上所有的容器
如果強行刪除一個存在容器依賴的鏡像,會有問題。一般先刪除容器 docker rm id 然後刪除鏡像
2.存出和載入鏡像
如:存出uubuntu:14.04爲ubuntu——14.04.tar
docker save -o ubuntu——14.04.tar ubuntu:14.04
載入:
sudo docker load ubuntu——14.04.tar
3.test:latest添加標籤user/test:latest
docker tag test:latest user/test:latest
4.docker push會將本地鏡像上傳
三:容器
1.容器是鏡像的一個運行實例,但他帶有額外的可寫文件層。
2.docker run 等價於 docker create(創建容器)然後docker start(啓動容器)
3.終止容器:docker stop,此外當docker容器中;那個制定的應用終結時,容器也自動終止
docker ps -a -q查看處於終止狀態的容器id
處於終止狀態的容器,用docker start可以啓動
4.刪除容器:
docker rm刪除處於終止狀態的容器,docker rm -f 刪除運行中的容器
5.容器的導入導出(實現容器的遷移)
docker export 容器id>文件名
docker import
6.基於dockerfile製作鏡像
編寫 Dockerfile
選擇 Python 2.7 版本爲我們依賴的系統鏡像。
FROM python:2.7
因所有官方鏡像均位於境外服務器,爲了確保所有示例能正常運行,可以使用與官方鏡像保持同步的 DaoCloud 境內鏡像:FROM daocloud.io/python:2.7。
也推薦通過 DaoCloud Toolbox 極速下載官方鏡像!
設置鏡像的維護者,相當於鏡像的作者或發行方。
MAINTAINER Captain Dao [email protected]
向鏡像中添加文件並安裝依賴。
RUN mkdir -p /app
WORKDIR /app
ADD requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY docker-entrypoint.sh /usr/local/bin/
ADD 與 COPY 的區別
總體來說 ADD 和 COPY 都是添加文件的操作,其中 ADD 比 COPY 功能更多,ADD 允許後面的參數爲 URL,還有 ADD 添加的文件爲壓縮包的話,它將自動解壓。
使用 RUN 命令調用 pip 包管理器安裝 App 的依賴包
在編寫 Dockerfile 時儘量將安裝依賴的過程提前以提高鏡像層的複用率。
啓動應用進程
EXPOSE 8888
ENTRYPOINT [“docker-entrypoint.sh”]
CMD [“”]
通過 EXPOSE 指定該鏡像需要公開的端口。
ENTRYPOINT 與 CMD 的區別
ENTRYPOINT 指定了該鏡像啓動時的入口,CMD 則指定了容器啓動時的命令,當兩者共用時,完整的啓動命令像是 ENTRYPOINT + CMD 這樣。使用 ENTRYPOINT 的好處是在我們啓動鏡像就像是啓動了一個可執行程序,在 CMD 上僅需要指定參數;另外在我們需要自定義 CMD 時不容易出錯。
製作啓動腳本(docker-entrypoint.sh)
!/bin/bash
Strict mode
set -euo pipefail
Create the hash to pass to the IPython notebook, but don’t export it so it doesn’t appear
as an environment variable within IPython kernels themselves
HASH=
echo “========================================================================”
echo “You can now connect to this Ipython Notebook server using, for example:”
echo “”
echo ” docker run -d -p :8888 -e password= ipython/noetebook”
echo “”
echo ” use password: ${PASSWORD:-admin} to login”
echo “”
echo “========================================================================”
unset PASSWORD
ipython notebook –no-browser –port 8888 –ip=* –NotebookApp.password=”$HASH”
一般我們會將初始化應用的過程編寫成一個啓動腳本,在腳本里以環境變量或命令行參數的形式獲取應用初始化所必須的信息,然後配置並啓動應用。
啓動容器
有了 Dockerfile 以後,我們可以運行下面的命令構建 Python 應用鏡像並命名爲 ipython/notebook:
通過指令建立鏡像
docker build -t ipython/notebook .
-t來設置flag
通過以下指令啓動容器
docker run -d -p 8888:8888 -e PASSWORD=admin ipython/notebook
-e設置環境變量,-p映射端口
注意哦,我們將初始登錄密碼以環境變量的形式傳入容器並告知應用。
打開遊覽器,訪問 8888 端口,就可以看到 IPython Notebook 了。