zoukankan      html  css  js  c++  java
  • 使用docker制作zookeeper镜像

    https://www.cnblogs.com/erlou96/p/13803188.html

    一.准备基础环境

    1.jdk 

    链接:https://pan.baidu.com/s/1OZx40UEaH0vv4EW4B8dXfQ 提取码:ualu

    2.zookeeper 自行下载

    3.将这些包都放在/opt/docker 目录下,这个目录后续作为Dockerfile的启动目录

    二.安装docker

    1安装docker

    yum install docker

    2 更改DOCKER 存储目录

    因为后续还要制作别的镜像,根目录容量不够,需要修改docker的挂载路径

      解决方法:参考https://blog.csdn.net/justlpf/article/details/103716138

    根据docker服务的安装配置文件进行修改

    vi /usr/lib/systemd/system/docker.service

    在ExectStart=xxx 中添加属性

    ExecStart=xxx --graph /data/lib/docker

    重新更新一下docker服务

    systemctl disable docker systemctl enable docker systemctl daemon-reload systemctl start docker

    三.下载基础镜像

    1.下载centos7.2的基础镜像

    docker pull docker pull docker.io/centos:centos7.2.1511

    四.制作zookeeper环境包

    1.解压文件

    这里我下载的介质目录如下所示:

    进入zookeeper 目录 ,创建zoo.cfg文件

    tar -zxvf zookeeper-3.3.4.tar.gz

    mv zookeeper-3.3.4 zookeeper

    cd zookeeper/

    cd conf/

    cp /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg

    5.修改配置文件zoo.cfg的内容

    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/opt/zookeeper/data
    clientPort=2181

    2.创建一个启动zookeeper的脚本

    vim start.sh

    #!/bin/bash
    export ZOOKEEPER_HOME=/opt/zookeeper
    #mkdir -p /opt/zookeeper/data
    ${ZOOKEEPER_HOME}/bin/zkServer.sh start-foreground

    这里一定要加上前台启动命令,否则docker会异常退出Docker容器启动web服务时,都指定了前台运行的参数,例如apache:

    ENTRYPOINT [ "/usr/sbin/apache2" ]

    CMD ["-D", "FOREGROUND"]

    又例如nginx:

    ENTRYPOINT [ "/usr/sbin/nginx", "-g", "daemon off;" ]

    因为Docker容器仅在它的1号进程(PID为1)运行时,会保持运行。如果1号进程退出了,Docker容器也就退出了。
    一定要注意daemon off ;分号不能去掉!否则失败!!

    接下来将start.sh拷贝到zookeeper的目录下

    cp /opt/docker/start.sh /opt/docker/zookeeper

    6.将修改后的zookeeper文件重新打成tar包

    tar -czvf zookeeper.tar zookeeper

    将这个包放到/opt/docker目录下。 到此:zookeeper的基础包就制作好了

    五.制作jdk环境包

    1.安装jdk

     将这个包放到/opt/docker目录下。到此:jdk的环境包准备好了

    六.编写Dockerfile文件

    vim /opt/docker/Dockerfile

    # FROM命令 定义基础包
    FROM docker.io/centos:centos7.2.1511
    # ADD命令 将打包文件上传到镜像的根目录/ ,会自动解压
    ADD zookeeper.tar /opt
    ADD jdk.tar /opt
    # WORKDIR命令 定义工作目录
    WORKDIR /opt
    # ENV命令 设置环境
    ENV JAVA_HOME /opt/jdk
    ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV PATH $JAVA_HOME/bin:$PATH
    # RUN命令 执行制作镜像过程,一个RUN对应一层
    #RUN yum clean all \
    RUN rm -vf /etc/localtime \
    #&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime\
    #&& rm -rfv /usr/share/backgrounds/* \
    #&& rm -rfv /usr/share/doc/* \
    #&& rm -rfv /usr/share/man/* \
    #&& cd /usr/share/zoneinfo/ && ls |grep -v "Asia"|xargs rm -rfv \
    #&& rm -rfv /var/cache/yum/* \
    #&& rpm --rebuilddb \
    && chmod 755 /opt/zookeeper/start.sh
    ENTRYPOINT /opt/zookeeper/start.sh
    ~

    镜像说明: docker.io/centos:centos7.2.1511是一个基础镜像,后面的操作等于我们登录到了centos操作系统上面执行后续的操作,

    ADD镜像拷贝,add默认会有个自动解压的操作,copy不会默认自动解压。COPY命令用于将于Dockerfile所在目录中的文件在镜像构建阶段从宿主机拷贝到镜像中,对于文件而言可以直接将文件复制到镜像中,add除了copy的作用还有自动对tar进行解压

    默认的workdir是centos的根目录,上面的dockfile中指定work_path为 /opt,后续所有命令的执行都是在workdir目录/opt该目录下执行的,WORKDIR指令设置Dockerfile中的任何RUN,CMD,ENTRPOINT,COPY和ADD指令的工作目录。

    单个Dockerfile可以使用多次WORKFDIR。如果提供一个相对路径,当前的工作目录将于上个WORKDIR指令相关。如:

    WORKDIR /a

    WORKDIR b

    WORKDIR c

    RUN pwd

    pwd命令的输出/a/b/c

    执行命令执行命令docker exec的时候,就会去读取容器的那个workdir,进入到该容器的worddir目录,这里一定要注意

    ENV JAVA_HOME 在容器中定义一个环境变量,等容器启动之后,你可以使用echo输出改环境变量的值

    EXPOSE 2181定义容器启动之后容器的端口是2181

    CMD $ZOOKEEPER_HOME/bin/zkServer.sh start-foreground  cmd命令表示容器启动之后执行的命令,将zookeeper启动起来

    RUN表示在centos镜像中执行的一系列命令操作,如果要执行多个命令需要使用&&,如下面所示

    接下来讲解下容器启动的过程中CMD和ENTRYPOINT的区别

    https://blog.csdn.net/thedarkclouds/article/details/81982338

    https://blog.csdn.net/u010900754/article/details/78526443

    有几个关键点的结论:

    上面的zookeeper我们是作为应用程序的一个服务或者进程,我们要采用ENTRYPOINT的形式,我们自己编写一个启动脚本作为ENTRYPOINT的形式进行启动

    七.构建镜像

    1.在/opt/docker目录下构建镜像

    docker image build -t zookeeper_cool:v1.0 .

    2.查看镜像

    3.启动容器:映射端口,并且将Docker挂载本地目录及实现文件共享,这样重启容器,zk的数据不会丢失

    需要创建这个目录:/opt/docker/zookeeper/data

    docker run --rm --name coolsummer -p 2181:2181 -v /opt/docker/zookeeper/data:/opt/zookeeper/data -d zookeeper_cool:v

     这样容器就启动成功了

    接下来我们进入到容器内部

    八.验证zk是否启动成功

    zkCli.sh -server 127.0.0.1:2181

    启动成功,问题解决

     

  • 相关阅读:
    Oracle——Hint
    Oracle——package....包的概念和定义
    Oracle——sql语句执行步骤以及提高sql基本查询效率
    Oracle函数之捡漏篇
    Oracle 分析函数Over(partition by...)以及开窗函数
    初尝RabbitMQ消息队列
    Gerrit部署成功后project下不显示clone地址
    jenkins打包iOS 报错:error: exportArchive: The data couldn’t be read because it isn’t in the correct format.
    gerrit 版本下载
    grep -w ,grep -e,grep -v的使用
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/15736069.html
Copyright © 2011-2022 走看看