Docker 服务容器化部署的利器
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker 可以为应用开发人员提供一套构建与共享的标准, 支持在任何基础架构中都能实现简洁、敏捷的开发方式,从而可以更快速的部署应用。
初步了解下Docker
先到官网查看Docker的一些基本概念,然后获取安装Docker-Desktop;
Docker架构
Docker采用的是client-server的架构方式,client与docker-server的守护进程交换,守护进程负责构建、运行和分发我们的应用容器。client和server可以部署在同一台机器上,也可以用本地的一个client去连接远端的server, 二者通过socket进行通信交互;
Docker的一些常用命令
-
查询本地images
docker images
-
根据image id删除image
docker image rm 42f819fec197
-
构建image, 在一个包含Dockerfile的目录下执行
docker build -t healthapp-product-admin-rpc .
-
根据一个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
-
查看本地正在运行的容器
docker ps
-
查看所有容器,包含停掉的(启动失败)
docker ps -a
-
查看容器日志(标准输出),需要是正在运行的容器
docker logs --since="2020-01-04" --tail=10 457898765456
-
将容器中的文件copy出来
docker cp 4bba6d6692a9:/app/logs ./infos
-
连接进入到一个容器里面
docker exec -it 7734dea48de8 /bin/sh
-
手动停止容器
docker stop 873f9147382f
-
打tag重命名image
docker tag ccr.ccs.tencentyun.com/doctorwork/jre:8-centos7 jre:8-centos7
-
批量删除已经existed的容器
docker ps -a | grep Exited | cut -d ' ' -f 1 | xargs docker rm
or
docker rm `docker ps -a | grep Exited | awk '{print $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}
其他
推荐阅读