Docker 服务容器化部署的利器

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker 可以为应用开发人员提供一套构建与共享的标准, 支持在任何基础架构中都能实现简洁、敏捷的开发方式,从而可以更快速的部署应用。


初步了解下Docker

先到官网查看Docker的一些基本概念,然后获取安装Docker-Desktop;

Docker架构

Docker采用的是client-server的架构方式,client与docker-server的守护进程交换,守护进程负责构建、运行和分发我们的应用容器。client和server可以部署在同一台机器上,也可以用本地的一个client去连接远端的server, 二者通过socket进行通信交互;
在这里插入图片描述

Docker的一些常用命令

  1. 查询本地images
    docker images

  2. 根据image id删除image
    docker image rm 42f819fec197

  3. 构建image, 在一个包含Dockerfile的目录下执行
    docker build -t healthapp-product-admin-rpc .

  4. 根据一个image, 启动一个容器(应用)
    docker run -d -e ENV=DEV -p 30000:20880 -e DUBBO_IP_TO_REGISTRY=10.1.0.54 -e DUBBO_PORT_TO_REGISTRY=30000 -e JAVA_OPTS='' healthapp-product-admin-rpc

  5. 查看本地正在运行的容器
    docker ps

  6. 查看所有容器,包含停掉的(启动失败)
    docker ps -a

  7. 查看容器日志(标准输出),需要是正在运行的容器
    docker logs --since="2020-01-04" --tail=10 457898765456

  8. 将容器中的文件copy出来
    docker cp 4bba6d6692a9:/app/logs ./infos

  9. 将本地的文件copy到容器中出来
    docker cp hh.txt 4bba6d6692a9:/app/logs/

  10. 连接进入到一个容器里面
    docker exec -it 7734dea48de8 /bin/sh

  11. 手动停止容器
    docker stop 873f9147382f

  12. 打tag重命名image
    docker tag ccr.ccs.tencentyun.com/doctorwork/jre:8-centos7 jre:8-centos7

  13. 批量删除已经existed的容器

docker ps -a | grep Exited | cut -d ' ' -f 1 | xargs docker rm
or
docker rm `docker ps -a | grep Exited | awk '{print $1}'`
  1. 批量删除名称或标签为none的镜像
docker rmi -f  `docker images | grep '<none>' | awk '{print $3}'`

自动化构建

在整个CI,CD过程中,如果我们使用jenkins进行项目的编译打包,那同时这里我们就能直接生成image, 并push到docker-image-hub中去;
在jenkins的Build流程后添加一个Post Steps,内容如下

#定义app_name,根据实际项目修改
app_name='dubbo-admin-web'

#获取编译的分支
branch=`echo ${GIT_BRANCH} | awk -F'/' '{print $NF}'`

#镜像仓库信息
image_registry="ccr.ccs.tencentyun.com"
image_namespace="hinsteny_hub"

#定义镜像tag
image_tag="${branch}-${BUILD_NUMBER}-$(date +%F)"
image_url="${image_registry}/${image_namespace}/${app_name}:${image_tag}"

#进入到包含Dockerfile文件的目录
cd dubbo-admin-distribution/

#开始构建、上传和删除本地镜像
docker build -t ${image_url} .
#push本地构建好的image到远端
docker push ${image_url}
#删除本地image
docker image rm ${image_url}

其他

1、Docker容器中,如何通过监听容器关闭的信号,实现一些在服务退出前的收尾操作;

比如我们的应用是Dubbo应用,想着服务停止前调用QOS-shutdown实现优雅停服,避免出现直接down机而导致的服务调用异常问题

1.1 首先我们在Dockerfile里声明的容器启动指令一定要采用ENTRYPOINT的方式, 为监听系统信号打下基础;

ENTRYPOINT ["/app/docker_start.sh"]

1.2 在上面触发执行的脚本里面声明信号监听及收到信号时的处理逻辑

#!/bin/bash
#监听信号
trap 'stop' SIGTERM SIGINT SIGKILL

#app stop hook
stop() {
  echo "[hit enter key to exit]"
  # 停止应用
  sh /app/boot.sh --jar-file=/app/app.jar --stop
  exitSingal=-1
}

# 启动应用
echo "[execute app starting]"
#Execute app start file
sh /app/boot.sh --jar-file=/app/app.jar --start

#Judge app start result
if [ $? -eq 0 ]; then
    touch /app/null
		# wait forever
		tail -f /app/null
else
    echo "ERROR[start][app started error]"
fi
2. 设置容器的时区
  1. 方式一:启动容器时通过环境变量 TZ 设定时区(image内包含了tzData工具)
# docker容器方式启动
docker run -it -e TZ=Asia/Shanghai aapache/skywalking-oap-server
# k8s启动, 可以在deployment中添加环境变量
- env:
   - name: TZ
     value: Asia/Shanghai
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值