參加工作以來,經歷的第二家公司,用心的記錄用到的技術。
Docker是一個改進的容器技術。具體的“改進”體現在,Docker為容器引入了鏡像,使得容器可以從預先定義好的模版(images)創建出來,并且這個模版還是分層的。
Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。Docker 容器通過 Docker 鏡像來創建。容器與鏡像的關系類似于面向對象編程中的對象與類。
Docker? 面向對象
?容器? ? ? ? 對象
?鏡像? ? ? 類
Docker技術的基礎
namespace,容器隔離的基礎,保證A容器看不到B容器. 6個名空間:User,Mnt,Network,UTS,IPC,Pid
cgroups,容器資源統計和隔離。主要用到的cgroups子系統:cpu,blkio,device,freezer,memory
unionfs,典型:aufs/overlayfs,分層鏡像實現的基礎
Docker組件
docker Client客戶端————>向docker服務器進程發起請求,如:創建、停止、銷毀容器等操作
docker Server服務器進程—–>處理所有docker的請求,管理所有容器
docker Registry鏡像倉庫——>鏡像存放的中央倉庫,可看作是存放二進制的scm
一個完整的Docker有以下幾個部分組成:
dockerClient客戶端
Docker Daemon守護進程
Docker Image鏡像
DockerContainer容器
典型的場景
使應用的打包與部署自動化
創建輕量、私密的PAAS環境
實現自動化測試和持續的集成/部署
部署與擴展webapp、數據庫和后臺服務
Dockerfile
Dockerfile是docker構建鏡像的基礎,也是docker區別于其他容器的重要特征,正是有了Dockerfile,docker的自動化和可移植性才成為可能。
不論是開發還是運維,學會編寫Dockerfile幾乎是必備的,這有助于你理解整個容器的運行。
一般的,Dockerfile 分為四部分:基礎鏡像信息、維護者信息、鏡像操作指令和容器啟動時執行指令。’#’ 為 Dockerfile 中的注釋。先看下面一個小例子:
#基礎鏡像
FROM? <image> 或者 FROM <image>:<tag>
#維護者信息
MAINTAINER <somebodyname>
#ENV 設置環境變量
ENV? PATH /usr/local/nginx/sbin:$PATH
#COPY :復制本地主機的 (為 Dockerfile 所在目錄的相對路徑)到容器中的
#ADD 文件放在當前目錄下,拷過去會自動解壓
ADD nginx-1.8.0.tar.gz? /usr/local/
ADD epel-release-latest-7.noarch.rpm /usr/local/
#RUN 在鏡像中要執行的命令 格式為RUN 或 RUN ["executable", "param1", "param2"]
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd-s/sbin/nologin -M www
#WORKDIR 指定當前工作目錄,相當于cd,可以有多個
WORKDIR /usr/local/nginx-1.8.0
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
RUN echo"daemon off;">> /etc/nginx.conf
#EXPOSE 指定容器要打開的端口號,映射端口
EXPOSE 80
#CMD 運行以下命令
CMD ["nginx"]