Docker build tag login push save load + kubectl命令

微软Docker仓库镜像源

  • FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
  • FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build

私有Docker仓库镜像源

  • FROM docker.***.net/dotnet/core/aspnet:3.1 AS base
  • FROM docker.***.net/dotnet/core/sdk:3.1 AS build

.net5的docker镜像源地址​:

https://hub.docker.com/_/microsoft-dotnet-aspnet/

https://hub.docker.com/_/microsoft-dotnet-sdk/

本地开发环境生成Docker镜像

# docker build -f ./MeShop.View.SSO/Dockerfile -t meshop.view.sso . #创建镜像文件
# docker build -f ./MeShop.View.API/Dockerfile -t meshop.view.api . #创建镜像文件

本地开发环境运行Docker镜像,-d 参数可加可不加,--rm 与 -d 参数不兼容

# docker run --rm --name meshop.sso -p 9999:9999 meshop.view.sso -it /bin/bash
# docker run --rm --name meshop.api -p 7777:7777 meshop.view.api -it /bin/bash
# docker ps #查看本机正在运行的Docker容器
# docker ps -a #查看本机所有的Docker容器

本地Docker镜像推到私有Docker仓库

# docker tag meshop.view.sso private-docker.tidebuy.net/meshop.view.sso #重命名镜像名
# docker tag meshop.view.api private-docker.tidebuy.net/meshop.view.api #重命名镜像名
# docker login private-docker.tidebuy.net -u rancher -p rancher --password-stdin #登录私有仓
# docker push private-docker.tidebuy.net/meshop.view.sso #推到私有仓
# docker push private-docker.tidebuy.net/meshop.view.api #推到私有仓

将本地Docker镜像里面的镜像保存到磁盘文件、从磁盘文件加载进本地Docker镜像里面

# docker save -o ./meshop.view.sso.tar meshop.view.sso:latest #保存image到本地,格式tar
# docker load --input meshop.view.sso.tar #将tar文件装入image里
# docker save -o ./meshop.view.api.tar meshop.view.api:latest #保存image到本地,格式tar
# docker load --input meshop.view.api.tar #将tar文件装入image里

本地开发环境,直接发布程序,生成Docker镜像,推到私有Docker仓库

复制代码
MESHOP_PROJECT_ABBREVIATION=crm 
MESHOP_PROJECT_PUBLISH_PATH=publish/${MESHOP_PROJECT_ABBREVIATION} 
MESHOP_PROJECT_NAME=MeShop.View.CRM 
CI_REGISTRY=私有仓库地址 
CI_REGISTRY_USER=用户名 
CI_REGISTRY_PASSWORD=密码 
image_version="${CI_APPLICATION_TAG:-$(date +%Y%m%d%H%M%S)}" 
image_name="${CI_REGISTRY}/meshop/shop/${MESHOP_PROJECT_ABBREVIATION}" 
dotnet publish meshop/${MESHOP_PROJECT_NAME}/${MESHOP_PROJECT_NAME}.csproj \
      --runtime linux-x64 -c Release -o ${MESHOP_PROJECT_PUBLISH_PATH} 
echo "${MESHOP_PROJECT_PUBLISH_PATH}" 
echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY" 
docker build -f .ci/Dockerfile \
      --build-arg APP_PATH="$MESHOP_PROJECT_PUBLISH_PATH" \
      --build-arg MAIN_DLL="$MESHOP_PROJECT_NAME.dll" \
      --build-arg PORT="8888" \
      --tag "$image_name:$image_version" .
docker push "$image_name:$image_version"
echo "${image_name}" 
echo "${image_version}" 
复制代码

将k8s里面某一个命名空间下面的某一个pod里面的某一个文件复制到本地磁盘中,反过来就是从本地磁盘往pod里面复制文件

kubectl get pod -n meshop   #获取某一个命名空间下面的pod信息
kubectl cp -n meshop meshop-sso-5b49bd7b9d-qrmzg:MeShop.Web.dll ./MeShop.Web.dll    #将某一个命名空间下面的某一个pod里面的某一个文件复制到本地磁盘中

神奇命令1:拉取api镜像版本3.0.1-alpha打标记为最新版到仿真私有仓里

IMAGE_NAME='api'  && \ 
IMAGE_TAG='3.0.1-alpha' && \
docker pull meshop/shop/$IMAGE_NAME &&\
IMAGE_ID=$(docker images 'meshop/shop/'$IMAGE_NAME':latest'  -q) &&\
docker tag $IMAGE_ID private-docker.runshopstore.com/meshop/shop/$IMAGE_NAME:$IMAGE_TAG &&\
docker push private-docker.runshopstore.com/meshop/shop/$IMAGE_NAME:$IMAGE_TAG &&\
docker rmi -f $IMAGE_ID

神奇命令2:让k8s-bj集群中所有的api容器全部重启(拉取指定alpha.20版本)(发布API-alpha.20版本到仿真环境)

复制代码
cat << EOF > api-version.json
[{"op": "replace", "path": "/spec/template/spec/containers/0/image","value": "docker.runshopstore.com/meshop/shop/api:1.0.0-alpha.20"}]
EOF
kubectl get deployment --all-namespaces=true \
--selector='app.kubernetes.io/name=meshop-api' --no-headers=true | \
awk '{print $2,$1}'| \
xargs -n2 \
sh -c ' echo "kubectl patch deployment $1 -n $2  --type json --patch \"\$(cat api-version.json)\""' _| \
sh
复制代码

神奇命令3:让k8s集群中所有的api容器全部重启(拉取最新代码)

复制代码
cat << EOF > api-version.json
[{"op": "replace", "path": "/spec/template/spec/containers/0/image","value": "docker.tidebuy.net/meshop/shop/api:latest"}]
EOF
kubectl get deployment --all-namespaces=true \
--selector='app.kubernetes.io/name=meshop-api' --no-headers=true | \
awk '{print $2,$1}'| \
xargs -n2 \
sh -c ' echo "kubectl patch deployment $1 -n $2  --type json --patch \"\$(cat api-version.json)\""' _| \
sh
复制代码

神奇命令4:让k8s集群中所有的api,front容器全部重启(拉取最新代码)

复制代码
appArray=("api","front");
appVersion="latest";
appDepository="docker.tidebuy.net";
for app in ${appArray};do \
  sh -c "echo 'kubectl get deployment --all-namespaces=true --field-selector=\"metadata.name=meshop-${app}\" --no-headers=true'" \
  | sh \
  | awk '{print $2,$1}' \
  | xargs -n2 sh -c ' echo "kubectl patch deployment $1 -n $2 --type json --patch '\''[{\"op\":\"replace\",\"path\":\"/spec/template/spec/containers/0/image\",\"value\":\"'${appDepository}/meshop/shop/${app}:${appVersion}'\"}]'\''"' _ \
  | sh \
;done
复制代码

设置本地开发环境,连接k8s的meshop-test命名空间里的mysql数据库

kubectl --namespace meshop-tester port-forward service/meshop-mysql 33306:3306   #指定命名空间,设置本地33306端口转发到k8s里面mysql的3306端口
kubectl config set-context --current --namespace=meshop-tester  #切换命名空间
kubectl port-forward service/meshop-mysql 33306:3306   #设置本地33306端口转发到k8s里面mysql的3306端口

alias kubectl='_kubectl_custom(){ if [[ "$1" == "project" && "$2" != "" ]]; then kubectl config set-context --current --namespace=$2; elif [[ "$1" == "projects" && "$2" == "" ]]; then kubectl get ns; elif [[ "$1" == "project" && "$2" == "" ]]; then kubectl config get-contexts | sed -n "2p" | awk "{print \$5}";  else kubectl $*; fi;}; _kubectl_custom'   #切换到当前所在的Context下

CMD方式删除k8s里面创建的店铺容器

kubectl delete ns meshop-wangyp1   #删除namespace=meshop-wangyp1的
kubectl delete ingress meshop-wangyp1 -n meshop-admin  #删除namespace=meshop-admin里面的ingress=meshop-wangyp1的

更新某一个店铺k8s命令

restartShopName="testernew|template2|template3|template4";
kubectl get ns -l 'k8s.meshopstore.com/name' -o custom-columns='Name:metadata.name,ShopName:metadata.labels.k8s\.meshopstore\.com/name' --no-headers |\
grep -E "\s+($restartShopName)$" |\
awk '{print $1}' |\
xargs -n1 sh -c ' echo "kubectl rollout restart deployment/meshop-shop -n $1"' _|sh

 

 
posted @   —八戒—  阅读(595)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示