docker本地化部署


cat /etc/redhat-release
uname -a
 

1、測試環境安裝docker

1.檢查linux內核版本,如果低於4.4,請執行步驟2升級系統,如果已經是4.4,請跳過步驟2

命令

 
uname -a

  

執行結果:
Linux xxxxx 4.4.138-1.el7.elrepo.x86_64 #1 SMP Sat Jun 16 09:57:50 EDT 2018 x86_64 x86_64 x86_64 GNU/Linux
 
2.升級Linux內核
升級系統請切換至root用戶,如果沒有root權限,請聯系值班運維協助升級:
suto su -
在root用戶下執行以下升級腳本:
注意: 升級系統會重啟虛擬機,如有應用在運行請留意
#!/bin/bash
cd /tmp && wget http://10.57.17.7/soft/kernel-lt-4.4.138-1.el7.elrepo.x86_64.rpm
cd /tmp && wget http://10.57.17.7/soft/kernel-lt-devel-4.4.138-1.el7.elrepo.x86_64.rpm
chattr -ai /boot/grub2/grub.cfg
cd /tmp && yum -y install kernel-lt-4.4.138-1.el7.elrepo.x86_64.rpm kernel-lt-devel-4.4.138-1.el7.elrepo.x86_64.rpm
awk -F\' '$1=="menuentry "{print $2}' /etc/grub2.cfg
grub2-set-default 0
chattr +ai /boot/grub2/grub.cfg
reboot
3.安裝docker
使用admin用戶登錄虛擬機,執行以下安裝腳本,腳本執行完后docker環境已經啟動 .
#!/bin/bash
 
yum install -y yum-utils device-mapper-persistent-data lvm2
 
echo "proxy=http://10.57.22.8:3128/" >> /etc/yum.conf
 
 
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 
yum makecache fast
 
yum install docker-ce -y
 
systemctl restart docker

2、初始化測試環境docker基礎鏡像

添加本機ssh key 至測試環境

驗證可登陸,並有admin權限
//remoteHost為測試環境機子ip
ssh ${remoteHost}
 
//例如
ssh admin@10.xx.xx.xx
 
注冊公司docker倉庫下載基礎鏡像

注冊公司docker參考

下載基礎鏡像(本地安裝docker ,下載上傳)
docker pull registry.xxx.me/library/centos7.2-java8-tomcat8:1.1.1
 注:必須采用1.1.1版本基礎鏡像,否則下面腳本會執行失敗
導出基礎鏡像至本地
命令 
docker save [OPTIONS] IMAGE [IMAGE...]

例如 

docker save registry.xxx.me/library/centos7.2-java8-tomcat8:1.1.1 > /Users/xxx/work/test/docker/base.tar.gz

 

初始化腳本initImages.sh

#!/bin/bash
 
export USER_HOME=`pwd`
 
FILE_HOME=${USER_HOME}
REMOTE_HOST=${1}
 
die() {
    if [ $# != 2 ] ; then
        echo " The first is return code,the second error message!"
        echo " e.g.: die 1 'error message'"
        exit 1;
    fi
    code=$1
    msg=$2
    echo "${msg}" && exit "${code}"
}
 
process(){
 
    #1、檢查是否含有base.tar.gz鏡像包
    cd "${FILE_HOME}" || die 2 "cd ${FILE_HOME} failed"
    if [ ! -f "./base.tar.gz" ]; then
        die 1 "init failed, not found base.tar.gz"
    fi
 
    #2、上傳至服務器
    scp ./base.tar.gz $REMOTE_HOST:/home/admin/ || die 3 "upload failed, check ssh is already linked"
 
    #3、登錄服務器並導入鏡像
    ssh $REMOTE_HOST "sudo cd /home/admin;sudo docker load < base.tar.gz;sudo rm -rf ./base.tar.gz;exit" || die 4 "load failed..."
 
}
 
 
check() {
    if [ -z "$REMOTE_HOST" ]; then
        die 5 "check failed,remote host param not input"
    fi
}
 
 
 
main() {
    check
    process
}
 
main

將initImages.sh放到導出鏡像目錄下執行

命令

//remoteHost為測試環境機子ip
sh initImages.sh ${remoteHost}
例如
sh initImages.sh admin@10.57.17.247
初始化成功返回示例
Loaded image: xxxxxxx
 

3、本地化部署項目改造

 

  • 文件添加

 

  • 項目根目錄添加env文件

 

  • env

 

ENV SHUTTER=10.x.xx.xxx:xxx
ENV CLUSTER=octopus-xxx
ENV GRAYLOG_HOST=10.x.x.xx
ENV GRAYLOG_PORT=80
ENV APP_PORT=8088
ENV ENV=test-xx
ENV APPNAME=octopus-xxx
ENV APP_RUN_MODE=fg
ENV LIMIT_CPU=2
ENV LIMIT_MEM=2
ENV CONSOLE_LEVEL=DEBUG
  • 注意:以上配置根據自身項目需要作出修,不可直接復制!!!!
  • 項目根目錄添加本地化部署build腳本
#!/bin/bash 
export APPNAME=`sed '/APPNAME/!d;s/.*=//' env | tr -d '\r'`
export USER_HOME=`pwd`
APP_HOME=${USER_HOME}
die() {
    if [ $# != 2 ] ; then
        echo " The first is return code,the second error message!"
        echo " e.g.: die 1 'error message'"
        exit 1;
    fi
    code=$1
    msg=$2
    echo "${msg}" && exit "${code}"
}
#初始化環境變量
init(){
    cp Dockerfile DockerfileBak
    sed -i "" "/^ENV.*/d" Dockerfile
    sed -i "" "2 r env" Dockerfile
}
# 編譯打包
build() {
    cd "${APP_HOME}" || die 2 "cd ${APP_HOME} failed"
    # 輸出commit id
    echo -n "$(git rev-parse HEAD|awk '{print substr($0,1,11)}')" > "${APP_HOME}/commit_id"
    mvn clean package -Dmaven.test.skip=true || die 301 "Failed compiling project"
    rm -rf output
    mkdir output
    tar czf "output/${APPNAME}-dist.tar.gz" commit_id deploy/tomcat/* deploy/target/*  start.shprestop.shstop.shvalidate.sh Dockerfile > /dev/null 2>&1 || die 301 "tar failed"
}
check() {
    cd "${APP_HOME}" || die 2 "cd ${APP_HOME} failed"
    if [ ! -f "./output/${APPNAME}-dist.tar.gz" ]; then
        die 1 "package not generated and build fail..."
    fi
    die 0 "package generated and build success..."
}
clean(){
    rm -rf Dockerfile
    rm -rf commit_id
    mv DockerfileBak Dockerfile
}
main() {
    init
    build
    clean
    check
}
main

  

 注:此文件直接復制,不用做任何更改
 

 

項目修改

 

 

說明
由於本地化部署打包文件保存至新文件夾output下,為了不上傳至gitlab,因此項目需要做小小的改動

 

 

最外層pom.xml中的clean插件中fileset添加
<fileset>
    <directory>output</directory>
    <includes>
        <include>**/*</include>
    </includes>
</fileset>

  .ignore文件添加output文件夾忽略

        output

 

4、用docker啟動項目

  • 將output下tar.gz包上傳服務器admin目錄下
    • 命令
      scp -r local_folder remote_ip:remote_folder
      

        

    • 舉例
      scp -r ./octopus-xxx-dist.tar.gz admin@10.x.x.xx:/home/admin/
      

        

  • 新建項目文件夾並將壓縮包
    cd /home/admin
    mkdir ${APP_NAME}
    tar zxf ${APP_NAME}-dist.tar.gz -C ./${APP_NAME/
    

      

  • 在解壓后的目錄下啟動docker
    • 命令
      //打包鏡像
      sudo docker build -t name:tag . 
      //啟動鏡像 
      docker run -d -p 8088:8088 name:tag
      

        

    • 注意:build語句最后面有個點
    • 舉例
      sudo docker build -t xxx:20190303 .
      sudo docker run -d -p 8088:8088 xxx:20190303
      

        

  • 驗證
    • 方法一
      • 命令
        sudo docker ps -a
        

          

      • 結果
        status      One of created, restarting, running, removing, paused, exited, or dead
        Up x seconds : 成功
        Exited x seconds: 停止
        

          

    • 方法二
      • 命令
        sudo docker exec -it ${containerId} /bin/bash
        

          

      • 結果
        //進入容器內部查看
        ps -ef | grep java
        

          

    • 方法三
      • 命令
        curl -I -m 10 -o /dev/null -s -w "%{http_code}" "http://127.0.0.1:${APP_PORT}/ok.htm"
        

          

  • 回滾、持續發布....
    • 待續...
  • docker 常用命令
查看鏡像 docker images
查看容器 docker ps -a
停止容器 docker stop container_id
運行容器 docker run -d -p name:tag
進入容器 sudo docker exec -it CONTAINER /bin/bash
執行容器命令 sudo docker exec -i CONTAINER /bin/bash  xxx.sh
構建Dockerfile docker build -t name:tag
 
啟動docker     systemctl start docker
守護進程重啟    sudo systemctl daemon-reload
重啟docker服務 systemctl restart  docker
重啟docker服務 sudo service docker restart
關閉docker     service docker stop  
關閉docker     systemctl stop docker

  

 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM