@GEEKO
2018-12-12T09:15:18.000000Z
字数 5663
阅读 737
部署
注意事项
* 用root用户替换默认的Jenkins用户
* 切换为国内源,加快构建速度
* 在镜像里面安装docker-compose
* curl 命令无法再Dockerfile文件里执行,需要在docker run的镜像里执行,这个后续看怎么解决
FROM jenkins
USER root
#清除了基础镜像设置的源,切换成腾讯云的jessie源
#使用非腾讯云环境的需要将 aliyun 改为 aliyun
RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \
&& echo "deb http://mirrors.aliyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \
&& echo "deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \
&& echo "deb http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list
#更新源并安装缺少的包
RUN apt-get update && apt-get install -y libltdl7 && apt-get update
ARG dockerGid=999
RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group
# 安装 docker-compose 因为等下构建环境的需要
curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
RUN chmod +x /usr/local/bin/docker-compose
# 测试docker-compose安装是否成功
# docker-compose --version
# 构建
docker build -t mkm-jenkins .
#创建容器
docker run --name jenkins -p 8085:8080 -p 50000:50000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /wdc/docker/jenkins/jenkins_home:/var/jenkins_home \
-d d1cf34ad7a7f
参考文档:https://gitee.com/help/articles/4193
down 命令详解
Usage: down [options]
Options:
--rmi type 删除镜像,类型必须是:
'all': 删除compose文件中定义的所以镜像.
'local': 删除镜像名为空的镜像
--volumes 删除卷
attached to containers.
--remove-orphans Remove containers for services not defined in the
file
停止和删除容器、网络、卷、镜像,这些内容是通过docker-compose up命令创建的. 默认值删除 容器 网络,可以通过指定 rmi volumes参数删除镜像和卷
# Tweb 测试环境
# !/bin/bash
# 获取短版本号
GITHASH=`git rev-parse --short HEAD`
echo ---------------Remove-Orphans------------------
docker-compose -f ./docker-compose.yml -f ./docker-compose.override.yml -p ${GITHASH} down --rmi local --remove-orphans
echo ---------------Publishing...------------------
docker-compose -f "./docker-compose.yml" -f "./docker-compose.override.yml" -p ${GITHASH} up -d --build
echo ----------------Clear-Images...------------------
docker rmi $(docker images -f "dangling=true" -q)
# Proc 测试环境
# !/bin/bash
# 获取短版本号
GITHASH=`git rev-parse --short HEAD`
echo ---------------Remove-Orphans------------------
docker-compose -f ./docker-compose.yml -p ${GITHASH} down --rmi local --remove-orphans
echo ---------------Publishing... override是里面是针对测试环境 ------------------
docker-compose -f "./docker-compose.yml" -f -p ${GITHASH} up -d --build
echo ----------------Clear-Images...------------------
docker rmi $(docker images -f "dangling=true" -q)
Docker-compose命令详解
http://www.cnblogs.com/liubin0509/p/6178351.html
Docker Compose 之进阶篇
http://www.cnblogs.com/sparkdev/p/9803554.html
整理一、
# !/bin/bash
# 获取短版本号
GITHASH=`git rev-parse --short HEAD`
# 新的镜像名称
containerName='jinri.gateway.weixin.dev'
# 备份当前正在运行的容器
bakcontainerName='jinri.gateway.weixin.dev.bak'
echo ---------------stop and rename container------------------
docker stop ${containerName}
# 判断当前停止和重命名的容器是否存在,如果不存在抛出异常,则对异常进行处理,然后继续下面的操作
catch=$?
echo $catch
echo $catch -eq 0
isCatch=false
if [ $catch -eq 0 ]
then
# 重命名老的容器名称,docker container rename CONTAINER NEW_NAME
docker rename ${containerName} ${bakcontainerName}
echo ${containerName} container has stopped and has rename: ${bakcontainerName}
else
isCatch=true
echo ${containerName} container does not exist,No deletion and renaming
fi
# 执行docker-compose 生成并运行镜像
echo ---------------Remove-Orphans------------------
docker-compose -f ./docker-compose.yml -f ./docker-compose.override.yml -p ${GITHASH} down --rmi local --remove-orphans
echo ---------------Publishing...------------------
docker-compose -f ./docker-compose.yml -f docker-compose.override.yml -p ${GITHASH} up -d --build
# 清除None 无用镜像
echo ----------------Clear-Images...------------------
docker rmi $(docker images -f "dangling=true" -q)
if [ $? -eq 1 ]
then
echo 'current images has no None image'
fi
# 如果之前停止的容器存在,则删除备份容器
if [ $isCatch == false ]
then
docker rm ${bakcontainerName}
echo ---------------the old back container ${bakcontainerName} has deleted------------------
fi
整理二、
# !/bin/sh
# 获取git短版本号
GITHASH=`git rev-parse --short HEAD`
# 环境变量
#environment='Development'
environment='Production'
# 是否推送镜像到远程仓储服务器
isPush=false
local_image='jinri.gateway.weixin'
remote_image='jinri.gateway.weixin:1.0'
# 远程仓储信息
registry_url='registry.jinri.cn:5000'
registry_username='guda'
registry_password='guda@123'
echo '----------git short:' ${GITHASH}
if [ $environment == 'Development' ]
then
echo '--------Current Environment: Development--------'
echo '--------Remove-Orphans---------'
docker-compose -f ./docker-compose.yml -f ./docker-compose.override.yml -p ${GITHASH} down --rmi local --remove-orphans
echo '--------Publishing---------'
docker-compose -f ./docker-compose.yml -f ./docker-compose.override.yml -p ${GITHASH} up -d --build
echo ----------------Clear None Images...------------------
docker rmi $(docker images -f "dangling=true" -q)
elif [ $environment == 'Production' ]
then
echo '--------Current Environment: Production--------'
# git 拉取最新代码
echo 'start git pull code from remote registry'
git pull origin master
echo '--------the last push info---------'
git log -2 --pretty=format:"%h %an %d %s" --graph
echo '--------Remove-Orphans---------'
docker-compose -f ./docker-compose.yml -f ./docker-compose-proc.yml -p ${GITHASH} down --rmi local --remove-orphans
echo '--------Publishing---------'
docker-compose -f ./docker-compose.yml -f ./docker-compose-proc.yml -p ${GITHASH} up -d --build
echo ----------------Clear None Images...------------------
docker rmi $(docker images -f "dangling=true" -q)
if [ $isPush == true ]
then
echo '-----------image start pushing....-------------'
echo '-----------login remote docker registry-------------'
docker login --username=$registry_username --password=$registry_password $registry_url
echo '-----------update image tag-------------'
docker tag ${local_image} $registry_url/${remote_image}
echo '-----------push to remote docker registry-------------'
docker push $registry_url/${remote_image}
echo '-----------image pushed-------------'
fi
else
echo 'None of the Environment'
fi