微软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:///_/microsoft-dotnet-aspnet/

https:///_/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='/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='/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
















