• 从0开始搭建自动部署环境


    从0开始搭建自动部署环境

    前言

    从Docker改变使用动态库后,DooD不再可行,而Dind依然可行。针对此改变,重新整理并记录自动部署环境配置步骤。

    此环境是实现微服务自动部署的基础,使用jenkins持续集成工具,并内置了java和maven,并实现了容器内运行Docker命令的功能。

    软件环境

    • 宿主机win10
    • 虚拟机CentOS-7-x86_64-Minimal-1708
    • Docker 17.09.0-ce
    • apache-maven-3.5.2
    • jdk 1.8.0_151
    • jenkins 2.73.3

    虚拟机安装配置

    1. 安装Docker

    参考官方教程Get Docker CE for CentOS
    可选项:更换源。官方源下载Docker可能很慢,更换成国内的Docker源,比如阿里云的Docker源https://download.docker.com/linux/centos/docker-ce.repo

    2. 启动Docker并设置开机自启

    $ sudo service docker start
    $ sudo chkconfig docker on
    

    3. 更换Docker镜像源

    从Docker官方源下载镜像可能很慢,更换成阿里云的源即可。阿里云专属加速器地址。教程照搬一下,方便查阅。

    安装/升级你的Docker客户端

    推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce

    如何配置镜像加速器

    针对Docker客户端版本大于1.10.0的用户

    您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://a2srrwpd.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    容器安装配置

    1. 创建Dockerfile

    该Dockerfile已实现:

    1. 安装openjdk1.8、maven、jenkins、git
    2. maven配置阿里云镜像源
    3. jenkins自启
    4. 时区调整成中国上海

    Dockerfile内容如下:

    FROM centos:centos7.4.1708
    
    MAINTAINER "Simon Sun"<simon.sun.dev@hotmail.com>
    
    ADD http://www-us.apache.org/dist/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz /opt
    
    USER root
    
    RUN tar -zxvf /opt/apache-maven-3.5.2-bin.tar.gz -C /opt 
    && yum install -y wget 
    && yum install -y initscripts 
    && yum install -y sudo 
    && yum install -y java-1.8.0-openjdk 
    && yum install -y java-1.8.0-openjdk-devel 
    && yum install -y git
    
    # install jenkins
    RUN wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo 
    && rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key 
    && yum install -y jenkins
    
    # install docker with aliyun mirror source
    RUN yum install -y yum-utils 
      device-mapper-persistent-data 
      lvm2 
    && yum-config-manager 
        --add-repo 
        https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
    && yum-config-manager --disable docker-ce-edge 
    && yum install -y docker-ce
    
    RUN chmod a+x /opt/apache-maven-3.5.2/bin/mvn
    
    # add user jenkins and add user jenkins to group docker
    # set root password to root
    RUN echo "jenkins ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers 
    && gpasswd -a jenkins docker 
    && echo "root:root" | chpasswd
    
    ENV JAVA_HOME /usr/lib/jvm/java
    ENV PATH $JAVA_HOME/bin:$PATH
    ENV MAVEN_HOME /opt/apache-maven-3.5.2
    ENV PATH $MAVEN_HOME/bin:$PATH
    
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    # add aliyun maven mirror source
    RUN sed -i '/</mirrors>/i<mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>central</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>' /opt/apache-maven-3.5.2/conf/settings.xml
    
    USER jenkins
    
    CMD sudo service jenkins start && tail -F /var/log/jenkins/jenkins.log
    

    2. 编译Dockerfile

    docker build -t jeesun/java-jenkins .
    

    3. 启动容器

    docker run --privileged -i -t -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 jeesun/java-jenkins
    

    此时我已经使用jenkins账户登录到容器中,根据Dockerfile,此时jenkins已经自启,且目前正在运行命令tail -F /var/log/jenkins/jenkins.log

    1. Ctrl+P+Q退出bash。命令Ctrl+P+Q保证退出容器不关闭容器。
    2. 访问http://localhost:8080。当然,因为我装的是minimal版的CentOS,没有图形界面,只能在宿主机上通过http://虚拟机ip:8080来访问。可使用命令ip addr查看虚拟机ip地址。
    3. 使用docker ps查看CONTAINER ID。
    4. 使用docker exec -it container_id /bin/bash进入容器。
    5. 首次访问该地址需要使用/var/lib/jenkins/secrets/initialAdminPassword中的初始管理员密码来解锁jenkins。 执行cat /var/lib/jenkins/secrets/initialAdminPassword就可以知道密码了。
    6. 按照页面指示继续,jenkins会推荐下载一些插件。我默认都安装了。如果安装失败重试即可。然后就是填入新的管理员账号密码。完成后正式进入jenkins管理页面。

    5. 测试

    选择新建,填入项目名称,选择构建一个自由风格的软件项目。
    构建——》增加构建步骤——》Execute shell——》填入docker run hello-world——》保存。选择立即构建。如果不报错,气球为蓝色,说明成功。

    报错解决

    1. 错误1

    错误内容

    Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.34/version: dial unix /var/run/docker.sock: connect: permission denied
    

    解决方案

    1. 优先参考官方Manage Docker as a non-root user

    2. 关闭虚拟机的selinux(可能有用)。参考查看 SELinux状态及关闭SELinux

    3. 在虚拟机中修改/var/run/docker.sock的权限。(很危险!!!)

    $ sudo chmod 777 /var/run/docker.sock
    

    2. 错误2

    错误内容

    Failed to get D-Bus connection: Operation not permitted
    

    解决方案

    忽略。

    3. 错误3

    错误内容

    Couldn't connect to Docker daemon at http+unix://var/run/docker.sock - is it running?
    

    解决方案

    权限问题。解决办法同错误1。

    参考内容

    1. https://askubuntu.com/questions/477551/how-can-i-use-docker-without-sudo
    2. Docker in Docker
    3. DooD(不再有用,因为新版Docker使用了动态库)
    4. Dockerfile: ADD vs COPY
    5. Maven镜像更换为阿里云中央仓库(精)
    6. tailf、tail -f、tail -F三者区别
    7. How to automatically start a service when running a docker container?
  • 相关阅读:
    【ARM-Linux开发】Linux下查看机器的CPU负载
    【ARM-Linux开发】Linux下查看机器的CPU负载
    【ARM-Linux开发】ARM7 ARM9 ARM Cortex M3 M4 有什么区别
    【ARM-Linux开发】ARM7 ARM9 ARM Cortex M3 M4 有什么区别
    【miscellaneous】使用Google语音识别引擎(Google Speech API)[3月5日修改]
    【miscellaneous】使用Google语音识别引擎(Google Speech API)[3月5日修改]
    【miscellaneous】语音识别工具箱综述和产品介绍
    【miscellaneous】语音识别工具箱综述和产品介绍
    【FFMPEG】【ARM-Linux开发】 ffmpeg 静态库使用,undefined reference错误
    【CDN】海外免费加速CDN:Incapsula,CloudFare
  • 原文地址:https://www.cnblogs.com/rainmer/p/7899582.html
Copyright © 2020-2023  润新知