参加工作以来,经历的第二家公司,用心的记录用到的技术。
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"]