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 Hub
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"
# 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
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
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/bash
docker run --name=container01 -t -i unbunt /bin/bash
docker ps -l
重新启动停止的容器
docker start [-i] ID/NAME
docker rm ID/NAME
PS:仅能删除停止的容器
什么是守护式容器
以守护形式运行容器
docker run -i -t IMAGE /bin/bash
Ctrl + P Ctrl + Q 组合键退出,不使用 exit
重庆进入:
docker attach ID/NAME
docker 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 top dc1
docker exec -it -u root 容器名 /bin/bash
停止守护式容器
docker stop 容器名 ## 发送终止信号,等待停止
docker kill 容器名 ## 直接kill
使用 Docker 帮助文件
man docker-run
man docker-logs
man docker-top
man docker-exec
docker context
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 nginx
docker top web
PS:停止容器并重新启动是,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 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
F&Q
docker 推送镜像时报错
file integrity checksum failed for "xxx"
- 原因分析:删除过该镜像对应依赖镜像的文件,导致新镜像的
checksum
不匹配,因此推送 hub
失败 - 解决方式:
docker rmi
删除基础镜像后,重新获取