前言
环境及相关软件:CentOS、docker-ce。
一、Docker信息
1、显示 Docker 系统信息
docker info # 显示 Docker 系统信息,包括镜像和容器数
2、显示 Docker 版本信息
docker version # 显示 Docker 版本信息
二、本地镜像管理
1、列出本地镜像
docker images
2、删除本地一个或多个镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]
# 或
docker image rm [OPTIONS] 镜像名标签或者ID
# OPTIONS: -f :强制删除 --no-prune :不移除该镜像的过程镜像,默认移除;
例:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-18.04 docker_V5 c4321ebafada 20 hours ago 897MB
ubuntu-18.04 docker_V4 f5010437cbf8 24 hours ago 897MB
<none> <none> 5bf8c451761b 25 hours ago 897MB
$ docker image rm -f 5bf8c451761b
Deleted: sha256:5bf8c451761b07b28989d72266283064fc2666d0c315a58f3f5e6d8930e00482
Deleted: sha256:0a4de1ff4cb00ce7deb0399144af2c816475b2c5c361cb6e3b38a895083bd98b
3、镜像导入与导出
## 方法一:
# 或 docker save -o xxx.tar image:tag
# -o :输出到的文件
docker save image:tag > xxx.tar # save导出.tar
# 或 docker load -i xxx.tar
# --input , -i : 指定导入的文件,代替 STDIN
# --quiet , -q : 精简输出信息
docker load < xxx.tar # load导入镜像
## 方法二:
docker export image > xxx.tar # export导出成.tar
cat xxx.tar | sudo docker import - image:tag # import导入镜像
注:两种方法不可混用
4、镜像制作
## 方法1(容器rootfs命令中):
# 保持 container 的当前状态到image后,然后生成对应的 image
docker commit
## 方法2:
# 使用dockerfile 文件自动化制作 image
docker build
5、标记本地镜像
# 标记本地镜像,将其归入某一仓库。
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
例:
$ docker tag ubuntu-18.04:compile_V2 10.27.170.21:80/ubuntu-18.04:compile_V2
6、查看指定镜像的创建历史
docker history [OPTIONS] IMAGE
## OPTIONS说明:
# -H :以可读的格式打印镜像大小和日期,默认为true;
# --no-trunc :显示完整的提交记录;
# -q :仅列出提交记录ID。
三、容器生命周期管理
1、运行容器
docker run -it ubuntu-18.04:build_V1 /bin/bash
# -d: 后台运行容器 -i:以交互模式运行容器 -t:为容器重新分配一个伪输入终端 -it常一起使用
# -p: 指定端口映射,格式为:主机(宿主)端口:容器端口 --name="nginx-lb":为容器指定一个名称
# -v: 挂载目录 -e username="ritchie":设置环境变量 -env-file=[]:从指定文件读入环境变量 -m :设置容器使用内存最大值
# --rm: 在容器退出时能够自动清理容器内部的文件系统,--rm 选项不能与 -d 同时使用(或者说同时使用没有意义),即只能自动清理 foreground 容器,不能自动清理detached容器,其等价于在容器退出后,执行 docker rm -v
2、启动一个或多个已经被停止的容器
docker start 容器名或ID
3、停止运行中的容器
docker stop 容器名或ID
4、重启容器
docker restart 容器名或ID
5、杀掉运行中的容器
docker kill -s KILL 容器名或者ID
# -s :向容器发送一个信号
6、删除容器
docker rm 容器名或ID
# -f :通过 SIGKILL 信号强制删除一个运行中的容器 -l :移除容器间的网络连接,而非容器本身 -v :删除与容器关联的卷。
7、暂停容器中所有进程
# 暂停数据库容器db01提供服务:
docker pause db01
8、恢复容器中所有的进程
# 恢复数据库容器db01提供服务:
docker unpause db01
9、创建一个新的容器但不启动它
# 语法同docker run
docker create 镜像名或ID
例:(使用docker镜像nginx:latest创建一个容器,并将容器命名为myrunoob)
docker create --name myrunoob nginx:latest
10、在运行的容器中执行命令
docker exec -it 容器名或ID /bin/bash
# -d:分离模式,在后台运行 -i:即使没有附加也保持打开 -t:分配一个伪终端
四、容器操作
1、列出容器
docker ps
# -a:显示所有的容器 -f:根据条件过滤显示 -l:显示最近创建的容器
# -q:静默模式,只显示容器编号 -s:显示总的文件大小。
2、获取容器/镜像的元数据
# 显示容器的IP
docker inspect 容器名或ID | grep IPAddress
# -f :指定返回值的模板文件 -s :显示总的文件大小 --type :为指定类型返回JSON
3、获取容器的日志
docker logs
# -f:跟踪日志输出 --since:显示某个开始时间的所有日志 -t:显示时间戳 --tail:仅列出最新N条容器日志
4、查看容器中运行的进程信息,支持 ps 命令参数
容器运行时不一定有/bin/bash终端来交互执行top命令,而且容器还不一定有top命令,可以使用docker top来实现查看container中正在运行的进程。
docker top 容器名或ID
5、查看容器的端口映射情况
docker port 容器名或ID
6、显示容器资源的使用情况
docker stats [OPTIONS] [CONTAINER...]
# --all , -a :显示所有的容器,包括未运行的 --format :指定返回值的模板文件 --no-stream :展示当前状态就直接退出了,不再实时更新 --no-trunc :不截断输出
输出详情介绍:
CONTAINER ID 与 NAME: 容器 ID 与名称。
CPU % 与 MEM %: 容器使用的 CPU 和内存的百分比。
MEM USAGE / LIMIT: 容器正在使用的总内存,以及允许使用的内存总量。
NET I/O: 容器通过其网络接口发送和接收的数据量。
BLOCK I/O: 容器从主机上的块设备读取和写入的数据量。
PIDs: 容器创建的进程或线程数。
7、将文件系统作为一个tar归档文件导出到STDOUT
docker export [OPTIONS] CONTAINER
# -o :将输入内容写到文件
例:(将id为a404c6c174a2的容器按日期保存为tar文件)
docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2
五、容器rootfs命令
1、从容器创建一个新的镜像
docker commit -a "作者" -m "说明文字" 容器名或ID 镜像名:标签
# -a :提交的镜像作者 -c :使用Dockerfile指令来创建镜像 -m :提交时的说明文字 -p :在commit时,将容器暂停。
2、容器与主机之间数据拷贝
# 主机拷贝到容器内,容器ID通过docker ps查询
docker cp ~/work/docker-img/ d4526b4d855b:/home/mysql-20220601.tar.gz
# 容器内文件拷贝到主机
docker cp d137b99b2472:/public/work/mysql-2021.12.1.tar.gz ~/work/docker-img
# -L :保持源目标中的链接
3、检查容器中文件结构的更改
# 查看容器mymysql的文件结构更改
docker diff mymysql
六、镜像仓库
1、登陆到Docker镜像仓库
docker login -u 用户名 -p 密码 # 登陆到Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库Docker Hub
2、登出Docker镜像仓库
docker logout # 登出Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
3、从镜像仓库拉取镜像
docker pull java:latest # 拉去镜像库最新的java镜像
4、将镜像上传到镜像仓库
docker push 10.76.10.25:80/ubuntu-18.04:build_V2
5、从Docker Hub查找镜像
docker search
# --automated:只列出 automated build类型的镜像 --no-trunc :显示完整的镜像描述 -s :列出收藏数不小于指定值的镜像 -f <过滤条件>:列出收藏数不小于指定值的镜像
例:(从 Docker Hub 查找所有镜像名包含 java,并且收藏数大于 10 的镜像)
$ docker search -f stars=10 java
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
java Java is a concurrent, class-based... 1037 [OK]
anapsix/alpine-java Oracle Java 8 (and 7) with GLIBC ... 115 [OK]
develar/java 46 [OK]
isuper/java-oracle This repository contains all java... 38 [OK]
lwieske/java-8 Oracle Java 8 Container - Full + ... 27 [OK]
nimmis/java-centos This is docker images of CentOS 7... 13 [OK]
参数说明:
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。