Docker 容器 client 使用介绍。
docker images
Docker image 镜像采用联合加载 unit mount,存储位置 /var/lib/docker
docker info列出镜像
docker images [OPTSIONS] [REPOSITORY]
docker image list --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}"
docker image list --format "{{.Repository}}:{{.Tag}}"镜像的标签和仓库:
-
-a, –all=false
-
-f, –filter=[]
-
–no-trunc=false # 截断唯一 iD
-
-q,-quiet=false #
-
REPOSITORY # 仓库,一系列关联镜像的集合
-
REGISTRY # Docker 镜像的存储服务
导出/导入镜像
# 导出
docker save busybox > busybox.tar
docker save --output busybox.tar busybox
docker save -o busybox.tar busybox
docker save myimage:latest | gzip > myimage_latest.tar.gz
# 导入
docker load < busybox.tar.gz
docker load --input fedora.tar查看镜像
docker inspect [OPTIONS] container|image [container|image...]
-f, --format=""docker inspect ubuntu:14.01删除镜像
docker rmi [OPTIONS] IMAGRE [IMAGE...]- -f, –force=false 强力删除镜像
- –no-prune=false Donot delete untagged parents
docker rmi $(docker images -q ubuntu)
docker rm $(docker ps -a -q)
docker rmi $(docker images -a -q)dokcer push/pull
查找镜像
docker search [OPTIONS] term
--automated=false Only show automated builds
--no-trunc=false Don't truncate output
-s, --stars=0 Only displays with at least x stars
最多返回25个结果拉取镜像
docker pull [OPTION] NAME [:TAG]
-a, --all-tags=false Download all tagged images in the repository使用 --registry-mirror 选项
- 修改:/etc/default/docker
- 添加:
DOCKER_OPTS="--registry-mirror=http://mirror.addr"
推送镜像
docker push NAME [:TAG]docker push xiexianbin/nginx
dokcer run 启动容器
docker run IMAGE [COMMAND] [ARG...]run 在新容器中执行命令
docker run unbuntu echo "Hello world"- Windows 机器执行目录挂载,参考
# Issue in windows: the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'
echo "alias docker='winpty docker'" >> ~/.bashrc
docker run -it --rm \
-w "/go/src/github.com/cosmtrek/hub" \
-v ${pwd}:/go/src/github.com/cosmtrek/hub \
-p 8000:8000 \
cosmtrek/air- healthcheck
docker run -d \
--name=myweb \
--health-cmd="curl -fs http://localhost/ || exit 1" \
--health-interval=5s \
--health-retries=12 \
--health-timeout=2s \
nginx:1.23--env-file
docker run --env-file ...启动交互式容器
docker run -i -t IMAGE /bin/bash-i –interactive=true | false 默认是 false -t –tty=true | false 默认是 false
查看容器
docker ps [-a] [-l]
# 查看所有容器占的存储空间
docker ps -as
docker inspect id/name
# 仅查看容器ID
docker ps -a -q自定义容器名
docker run --name=自定义名 -t -i IMAGE /bin/bashdocker run --name=container01 -t -i unbunt /bin/bash
docker ps -l重新启动停止的容器
docker start [-i] ID/NAMEdocker rm ID/NAMEPS:仅能删除停止的容器
什么是守护式容器
- 能够长期运行
- 没有交互式会话
- 适合运行应用程序和服务
以守护形式运行容器
docker run -i -t IMAGE /bin/bashCtrl + P Ctrl + Q 组合键退出,不使用 exit
重庆进入:
docker attach ID/NAMEdocker ps 查看
启动守护式容器
docker run -d IMAGE [COMMAND] [ARG...]docker run --name dc1 -d unbunt /bin/sh -c "while true; do echo hello world; sleep 1; done"查看容器日志
docker logs [-f] [-t] [-tail] 容器名- -f –follows=true | false 默认为 false
- -t –timestamps=true | false 默认为 false
- –tail=“all”
docker logs -tf --tail 10 dc1查看容器中的进程
docker top dc1在运行的容器中启动新进程
docker exec [-d] [-i] [-t] 容器名 [COMMAND] [ARG...]docker exec -i -t dc1 /bin/bash# 使用容器内的变量
docker exec -e NEW_VAR=value <容器名> sh -c 'echo \${NEW_VAR}'docker top dc1- 指定 root 用户登录容器
docker exec -it -u root 容器名 /bin/bash停止守护式容器
docker stop 容器名 ## 发送终止信号,等待停止
docker kill 容器名 ## 直接kill使用 Docker 帮助文件
man docker-run
man docker-logs
man docker-top
man docker-execdocker context
- 管理 docker 环境的上小文
docker context use default
docker context inspect default
docker context ls在容器中部署静态网站
设置容器的端口映射
run [-P] [-p]
-P,--publish-all=true|false 默认为false
docker run -P -i -t ubuntu /bin/bash
-p --publish=[]
containerport
docker run -p 80 -i -t ubuntu /bin/bash # 宿主机端口随机映射
hostPort:containerPort
docker run -p 8080:8080 -i -t ubuntu /bin/bash # 宿主机端口与容器端口意义映射
ip::containerPort
docker run -p 0000:80 -i -t ubuntu /bin/bash # 指定容器端口
ip:hostPort:containerPort
docker run -p 0.0.0.0:8080:80 -i -t ubuntu /bin/bash # 指定host ip + 端口和容器端口docker port 容器名 # 查看端口映射情况docker exec web nginxdocker top webPS:停止容器并重新启动是,IP 映射会发生变化
启动应用
docker run -p 80 --name web -i -t ubuntu /bin/bash
apt-get install nginx磁盘使用
docker /var/lib/docker/overlay2 可能会占用很大的空间
- 查看情况
docker system df
docker system df -v- 清理 docker 未使用文件
docker system prune
docker system prune -f -a
docker system prune --force- 通过 overlay2 目录 uuid 反查容器:
cd /var/lib/docker/overlay2
# 按空间倒序,top 5
du -s * |sort -nr|head -n 5
# 查找对应的 Docker 容器
docker ps -q | xargs docker inspect --format ' {{.Id}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}' | grep <uuid>
<uuid>, <pod-name>, /var/lib/docker/overlay2/<uuid>/work高级使用
指定 GPU
# 使用需要为 1 的 GPU
docker run -it -e NVIDIA_VISIBLE_DEVICES=1 ...F&Q
docker 推送镜像时报错
file integrity checksum failed for "xxx"- 原因分析:删除过该镜像对应依赖镜像的文件,导致新镜像的
checksum不匹配,因此推送hub失败 - 解决方式:
docker rmi删除基础镜像后,重新获取
exec failed: unable to start container process: open /dev/pts/0: operation not permitted: unknown
$ docker exec -it <name> /bin/sh
OCI runtime exec failed: exec failed: unable to start container process: open /dev/pts/0: operation not permitted: unknown