Docker常用命令学习

52 阅读4分钟

常用命令

基本

# 查看当前docker版本
docker -v
docker verison

# 查看docker系统信息
docker info

开发常用

# 列出容器 -- 仅运行的容器
docker ps 
# 列出容器 -- 包含停止的容器
docker ps -a

# 查看当前本地所有镜像
docker images

# 搜索镜像
docker search 镜像
# 获取镜像
docker pull 镜像仓库地址
# 上传镜像
docker push 镜像仓库地址

# 运行容器
# –name 定义一个容器的名字,如果在执行docker run时没有指定Name,那么deamon会自动生成一个随机数字符串当做UUID。
# -d 标识是让 docker 容器在后台运行。
# -p 标识通知 Docker 将容器内部使用的网络端口映射到我们使用的主机上。
# -m 限制容器内存100m
docker run --name nginx -d -p 8080:80 -m 100m nginx:1.24.1

# 停止容器 
docker stop 容器ID/容器名
# 启动容器
docker start 容器ID/容器名
# 重启容器
docker restart 容器ID/容器名

# 杀掉一个运行中的容器
docker kill -s KILL 容器ID/容器名

# 删除容器
docker rm 容器ID/容器名
# 删除一个或多少容器。-f :通过SIGKILL信号强制删除一个运行中的容器-l :移除容器间的网络连接,而非容器本身-v :-v 删除与容器关联的卷
docker rm -f xx、xx2

# 删除镜像 【 顺序:停止镜像里的容器,再删除容器,最后再删除镜像 】
docker rmi 镜像id/镜像名


# 进入容器
docker exec -it 容器ID/容器名 /bin/bash
# 以交互模式启动一个容器,在容器内执行/bin/bash命令
docker run -i -t 容器ID/容器名 /bin/bash


# 查看容器日志 -t:显示时间戳
docker logs -f -t 容器ID/容器名
docker logs -fn10 -t 容器ID/容器名


# 构造镜像
# 用法 docker build -t 镜像名称 .
docker build -t docker_demo .

容器信息

# 查看 容器/镜像 元数据
docker inspect 容器ID/容器名
# 查询容器内部ip地址
docker inspect 容器ID/容器名 | grep IPAddress
# 查看日志文件路径
docker inspect --format='{{.LogPath}}' 容器ID/容器名
# 查看容器在 `/var/lib/docker/overlay2/` 下的数据目录
docker inspect -f '{{ .GraphDriver.Data.MergedDir }}' 容器ID/容器名
# 查看容器映射的数据存放目录 -- 主要是看Mounts节点信息
docker inspect -f '{{ .Mounts }}' 容器ID/容器名

运维常用

# 列出所有的容器 ID
docker ps -aq
# 停止所有的容器
docker stop $(docker ps -aq)
# 删除所有的容器
docker rm $(docker ps -aq)
# 删除所有的镜像
docker rmi $(docker images -q)

# 停止并删除指定容器
docker ps -a | grep 容器ID/容器名 | awk '{print $1}' | xargs -i docker stop {} | xargs -i docker rm {}

# 删除镜像
# docker images 获取所有images
# grep -E "xxxxx" 筛选到特定的images
# awk '{print $3}' 打印第三列 即image id
# uniq 检查及删除文本文件中重复出现的行列
# xargs -I {} 多行转单行
# docker rmi --force {} 删除所有指定镜像id
docker images | grep -E "镜像id/镜像名" | awk '{print $3}' | uniq | xargs -I {} docker rmi --force {}
# ex: 删除镜像 `nginx:latest`
docker images | grep -E nginx | grep latest| awk '{print $3}' | uniq | xargs -I {} docker rmi --force {}

# 清理 Docker 系统中不再使用的资源,包括未使用的容器、镜像、网络和数据卷等。其作用是释放磁盘空间并减少不必要的资源占用,从而提高系统性能和效率。

docker system prune 
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache
## 但是务必慎重使用该命令,了解即可,不建议作为常用命令去使用吧。可以使用下述几个命令去清除指定对象

# 删除所有停止的容器
docker container prune

# 删除所有不使用的镜像
docker image prune --force --all
# 
docker image prune -f -a

#删除所有不在使用的网络
docker network prune

# 查看容器运行内存信息  【参数`mem_limit: 300m` # 最大使用内存】
docker stats nginx
# CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT   MEM %     NET I/O     BLOCK I/O     PIDS
# 385a15a9724d   nginx     0.00%     1.961MiB / 100MiB   1.96%     656B / 0B   0B / 8.19kB   3

其它

# 查看镜像的创建历史
docker history 镜像仓库地址

docker 登陆认证私有仓库

# 登陆认证
docker login -u 用户名 -p 密码 私有仓库地址
ex:阿里云仓库
# docker login -u xxxx registry.cn-shanghai.aliyuncs.com
ex:harbor私服
# docker login -u admin -p admin123456 harbor.xxx.com

查看密码

每次我们登陆一个私有仓库后,其实账号密码都会保存在了家目录下的一个隐藏目录下了。

config.json 它就是负责记录登陆之后的用户名和密码,只是base64加密之后的账密。
#查看密码
cat ~/.docker/config.json
# ex:
{
        "auths": {
                "ccr.ccs.tencentyun.com": {
                        "auth": "TMAxxx1Ng=="
                },
                "registry.cn-hangzhou.aliyuncs.com": {
                        "auth": "emhxxxnLg=="
                },
                "harbor.zhengqingya.com:11000": {
                        "auth": "YWRtaW46SGFyYm9yMTIzNDU="
                }
        }
}

解密

按照上面给出的示例,我们来解下明文密码到底是什么。
echo "YWRtaW46SGFyYm9yMTIzNDU="|base64 --decode
#2个-
admin:Harbor12345

移除登陆凭证/信息

docker logout 仓库地址
# ex:移除阿里云认证
docker logout registry,cn-shanghai.aliyuncs.com

从这里就可以看到这种保存的账密手段安全等级较低,所以增强服务器的安全性很有必要,当然如果你想要探索使用PASS保护你的仓库登陆账密也是可以的。

这里不做过多解释,可以浏览 Pass: The Standard Unix Password Manager (passwordstore.org)