待整理

1 基础命令

  • 显示docker相关信息
docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.10.4
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.17.2
    Path:     /usr/libexec/docker/cli-plugins/docker-compose
  scan: Docker Scan (Docker Inc.)
    Version:  v0.23.0
    Path:     /usr/libexec/docker/cli-plugins/docker-scan

Server:
 Containers: 6
  Running: 6
  Paused: 0
  Stopped: 0
 Images: 6
 Server Version: 23.0.2
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file # 表示存在本地, 是可以让他存放在远端的
 Cgroup Driver: cgroupfs # 限制与隔离的驱动
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive  # 编排工具, 不开启
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 2806fc1057397dbaeefbea0e4e17bddfbd388f38
 runc version: v1.1.5-0-gf19387a
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: builtin
 Kernel Version: 5.4.0-146-generic
 Operating System: Ubuntu 20.04.6 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 3.84GiB
 Name: ubtest
 ID: fb514c1e-58bd-4be0-ad81-c8d7c4413f53
 Docker Root Dir: /var/lib/docker  # 数据存放的位置
 Debug Mode: false
 Registry: https://index.docker.io/v1/ 
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false  #热更新 生产环境 设置为true ,表示重启docker ,容器不会重启
  • 查看版本
docker version
Server: Docker Engine - Community
 Engine:
  Version:          23.0.2
  API version:      1.42 (minimum version 1.12)
  Go version:       go1.19.7
  Git commit:       219f21b
  Built:            Mon Mar 27 16:16:18 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.20
  GitCommit:        2806fc1057397dbaeefbea0e4e17bddfbd388f38
 runc:
  Version:          1.1.5
  GitCommit:        v1.1.5-0-gf19387a
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

2 镜像操作

2.1 搜索

docker search nginx

2.2 拉取

# 默认拉取最新版
docker pull nginx
# 等价于这个
docker pull nginx:latest
# 拉取某个 sha256的版本
docker pull nginx@sha256:1195d1c1cd901058d1f059f2e31e17b559f51a03e093bf0a774c9304aebb5c36

2.3 查看

# 查看本地下载的所有镜像
docker images
# 查看镜像有几层 (看dockerfile后就明白了)
docker history image_id

2.4 标签

# docker tag 镜像id或者镜像名:版本  新的...
docker images
    REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
    nginx        latest    0e901e68141f   3 days ago   142MB
docker tag 0e901e68141f nginx:v1.0
# 或
docker tag nginx:latest nginx:v1.0

# 查看 ,原来的还在的, 另外一个并不会占用空间的.
docker images
    REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
    nginx        v1.0      0e901e68141f   3 days ago   142MB
    nginx        latest    0e901e68141f   3 days ago   142MB

docker rmi nginx:latest # 相当于删除标签

2.5 登录和推送

docker login  #默认登录官方的 hub库
docker login hub.yy.com # 登录自己的镜像仓库. hub.yy.com 自己弄去
# 登录你的aliyun 的 仓库. 
docker login --username=...  register.cn-hz-aliyuncs.com
# 将你的镜像tag 改成你的 仓库名. myhub是你的仓库名
docker tag 0e901e68141f myhub/nginx:latest

# 推送镜像
docker image push myhub/nginx:latest
#等价与
docker push myhub/nginx:latest

2.6 删除

# 如果镜像正在被容器使用, 是无法删除的
docker rmi image_id
# 等价
docker image rm image_id

# 删除所有的镜像
docker image prune

2.7 编译打包

# 根据dockerfile 打包镜像
# -t 表示 镜像的tag, . 是dockerfile所在路径
docker build -t nginx:123 .

2.8 save && load

!!! tip 当你镜像不能通过仓库进行分享或传输, 我们本地保存然后给其他人.

docker save nginx -o nginx.tar
# 其他人使用的时候
docker load < nginx.tar

3 容器操作

3.1 创建,启动,停止

# 创建
docker create -it --name nginx nginx:latest
docker ps # 没有看到, 只是创建了.
# 启动容器, 使用容器名或容器id
docker start nginx
docker ps
# 优雅停止, 使用容器名或容器id
docker stop nginx
# 强制停止, 使用容器名或容器id
docker kill nginx
# 停止容器里的进程
docker pause nginx
docker ps # 查看, 容器还是运行的, status 显示 pause
  CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS                  PORTS     NAMES
  316e566c99fa   nginx:latest   "/docker-entrypoint.…"   4 minutes ago   Up 7 seconds (Paused)   80/tcp    nginx
docker unpause nginx # 重新启动进程

3.2 运行

!!! tip 相比较前面的 create start 这个更常用, 直接就创建并且启动了容器


#交互的,直接进入该容器,如果退出exit,该容器就退出了
# -it  交互式 前台, 运行bash 命令 ,-i=--interactive -t=tty
# nginx:latest 镜像名, 先会查看本地有没有这个镜像,如果没有则从 docker.io上拉取
# --name 容器名
docker run -it --name abc nginx:latest bash
# 后台 -d
docker run -itd nginx:latest
# 端口映射,将容器里的80端口映射到本机的8080端口
docker run -itd -p 8080:80 nginx:latest

# 退出会自动删除容器
docker run -it --rm nginx:latest

3.3 commit


docker pull centos
docker run -it centos
#这个时候已经直接进去该容器的bash了
yum install vim -y #我们安装一个vim
#exit #然后退出
#可以查看一下该容器的信息
#将该容器commit 成一个image 下面的:latest 是tag 可以不设置,默认就是latest
docker commit -m 'install vim' 容器名 自己设置的image名(test/centos-vim:latest)

3.4 exec 执行指令

# 执行容器里的bash , 这个实际就是进入了容器, 执行了bash ,前台
docker exec -it nginx bash
# 进入容器运行指令后直接退出
docker exec -it nginx ls /var/log/nginx
  # access.log  error.log

3.5 查看容器进程信息

# 查看容器里的运行的进程
docker top nginx
# 查看容器里进程的资源使用情况, 会前台执行一直
docker stats nginx
# 输出一次就退出
docker stats nginx --no-stream

3.6 重命名

docker rename nginx nginx_new

3.7 控制cpu的使用的运行

docker run -itd --name=nginx --cpu-period=100000 --cpu-quota=10000 nginx

3.8 加入其他容器的net ns

docker run -it --net container:4ddf4638572d busybox ifconfig

3.9 带上数据持久化的运行

#将本地的/home/html目录映射到容器中的/usr/share/nginx/html
#这样本地做什么修改,容器就修改,通过容器修改,本地也就修改了
docker run -d --name nginx01 -v /home/html:/usr/share/nginx/html nginx

docker volume ls

3.10 查看运行的容器

#显示当前正在运行的容器
docker ps
docker container ls #等价于上面的
# 查看 状态是退出的容器
docker ps -f 'status=exited'
# 比如你创建了一个名字为go-web 的容器, 你想要看这个容器 包含关系
docker ps -f name=go
docker ps -l # 最新创建的一个容器
#显示所有的容器,包括已经退出的
docker ps -a
docker container ls -a
# 查看运行的容器的id (简化输出)
docker ps -q
# 所有容器的id
docker ps -aq

3.11 删除

# 这个默认就是删除容器
# id 只要前面几位就行,能区别其他的容器就ok
# 容器正在运行 这个命令会报错
docker rm 容器id
docker container rm 容器id
# 强制删除, 不管是否在运行
docker rm -f 容器id

# 删除所有的容器,强制的. 注意操作.
docker rm -f $(docker ps -aq)
# 只删除已经退出的容器
docker rm $(docker ps -f 'status=exited' -q)
# 删除已经退出的容器
docker container prune

3.12 查看容器运行日志

# 假如你的容器里的日志是写在文件里的, 那么这里就看不到 容器的日志了
# 我们自己开发的镜像 运行后  应该将日志显示在前台. 控制台, 才能看到日志
docker logs -f  容器id
docker logs -f  容器id  --tail 1

3.13 容器与主机的文件传输

# nginx 是容器名  ~/ 是主机的目录
docker cp nginx:/app.c ~/
# nginx: 表示容器名, text.txt 是主机的文件
docker cp text.txt nginx:/

3.14 排查 容器的操作记录

# 查看从昨天开始到现在的 docker的操作记录
docker events --since=$(date -d "1 day ago" +%s)
docker events --since=$(date -d "2 day ago" +%s) --until=$(date -d "1 day ago" +%s)

4 inspect 获取容器/镜像的元数据

docker inspect 容器id/容器名/镜像名/镜像id
Back to top