jay's blog
docker 常用命令记录
  • 宿主机与容器之间copy文件 docker cp mycontainer:/opt/file.txt /tmp/
  • alpine安装telnet apk add busybox-extras
  • alpine增加用户RUN addgroup -g 1000 admin && echo "admin:x:1000:1000:Linux User,,,:/home/admin:/bin/ash" >> /etc/passwd
  • 修改镜像地址 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
#!/usr/bin/env bash
repoHost="qqopp.ga"
appName="app-center"
tag=1.0.0-`date '+%Y%m%d%H%M%S'`
pkgName=""
imgURL="${repoHost}/adp-7adf1ca0a5/${appName}"
curtdir=`dirname $0`

if [ $curtdir == '.' ]; then
  curtdir=$(pwd)
fi

while true; do
  read -r -p "请输入包名: " pkgName
  if [ "${pkgName}" != "" ]; then
    break
  else
    continue
  fi
done


while true; do
  echo -e "仓库:\e[1;31m ${repoHost}\e[0m"
  echo -e "包名: \e[1;31m ${pkgName}\e[0m"
  read -r -p "确认以上信息是否正确?按 y 回车确认请输入: " confirmyes
  if [ "${confirmyes}" == "y" ]; then
    break
  elif [ "${confirmyes}" == "" ]; then
    continue
  else
    echo "输入不是y,安装退出"
    exit 0
  fi
done

if [ ! -f ${curtdir}/packages/${pkgName} ]; then
  echo -e "\e[1;31m文件不存在:${curtdir}/packages/${pkgName}, 打包退出\e[0m"
  exit 0
fi

echo -e "\n\n\n\n"
echo "开始打包....."
docker build --build-arg repoHost=${repoHost} --build-arg pkgName=${pkgName} -t "${imgURL}:${tag}" -f Dockerfile ./
#docker push ${imgURL}:${tag}
echo "打包完成:$imageURL:$tag"

echo -e "\n\n\n\n"
echo "开始安装..."
echo "${appName}当前运行的镜像信息如下: "
kubectl get sts $appName -o wide | grep $appName| xargs echo
echo "开始更新镜像..."

kubectl set image sts $appName $appName="${imgURL}:${tag}"
echo "镜像更新完成."

preStatus=""
while true; do
  status=`kubectl get pods |grep $appName|awk '{print $3}'`
     if [ $status != "Running" ]; then
       echo -e "启动中,当前状态:\e[1;33m${status}\e[0m"
     fi
     preStatus=$status
  fi

  if [ $status == "Running" ]; then
     echo -e "\e[1;32m启动完成\e[0m"
     break
  fi
  sleep 1
done

echo -e "\e[1;32m安装完成\e[0m"

  • Dockerfile文件命名的规范:https://lark.alipay.com/aone/docker/rm2g1d 不懂的用docker command –help 来看使用办法
  • docker exec -it 2b1b7a428627 /bin/bash
  • docker run -i -t ubuntu:15.10 /bin/bash -c “while true; do echo hello world; sleep 1; done”
    • 启动一个镜像。各个参数解析:
      • -t: 在新容器内指定一个伪终端或终端。
      • -i: 允许你对容器内的标准输入 (STDIN) 进行交互。
      • -d后台运行
  • docker logs 2b1b7a428627 可以查看容器对外输出的日志
  • docker start 2b1b7a428627 启动容器
  • docker restart 2b1b7a428627 重启容器
  • docker stop 2b1b7a428627 重启容器
  • docker stats 2b1b7a428627 查看状态
    • Usage: docker stats [OPTIONS] [CONTAINER…] Display a live stream of container(s) resource usage statistics
    • Options:
      • -a, –all Show all containers (default shows just running)
      • –format string Pretty-print images using a Go template
      • –no-stream Disable streaming stats and only pull the first result
      • –no-trunc Do not truncate output
  • dockerps -a 可以查看容器
    • 容器状态:
      • created(已创建)
      • restarting(重启中)
      • running 或 Up(运行中)
      • removing(迁移中)
      • paused(暂停)
      • exited(停止)
      • dead(死亡)

docker run ubuntu:15.10 /bin/echo “Hello world”

  • 参数解释

    • docker: Docker 的二进制执行文件。
    • run: 与前面的 docker 组合来运行一个容器。
    • ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
    • /bin/echo “Hello world”: 在启动的容器里执行的命令
  • 导出和导入容器

    • 导出:docker export 1e560fca3906 > ubuntu.tar
    • 导入:cat docker/ubuntu.tar | docker import - test/ubuntu:v1 或者 docker import http://example.com/exampleimage.tgz example/imagerepo

docker run -d -v /mnt/yoda/disk-1/images/http:/usr/share/nginx/html:ro -p 40001:80 nginx:1.21.6-alpine

docker load < ./registry.tar

docker run -d \
  --restart=always \
  --name registry \
  -v /mnt/yoda/disk-0/docker/registry:/var/lib/registry \
  -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
  -p 5000:5000 \
  registry:2

cat >> /etc/docker/daemon.json <<EOF
{
    "registry-mirrors": ["http://registry.ppp.com:5000"],
    "insecure-registries": ["http://registry.ppp.com:5000"]
}
EOF

systemctl daemon-reload
systemctl restart docker


# tar cvzf images.tar.gz docker
tar -zxvf images.tar.gz -C /mnt/registry

最后修改于 2021-10-16