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
- docker
ps -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