Docker命令
1. 基础命令
# 启动docker
systemctl start docker
# 关闭docker
systemctl stop docker
# 开机自启动docker
systemctl enable docker
2. 镜像
● 拉取centos镜像
docker pull 镜像名[:tag]
示例:docker pull centos:centos7
● 查看本地主机所有镜像
docker images
● 删除镜像
docker rmi [REPOSITORY]:[TAG]
#删除一个
docker rmi -f 镜像名/镜像ID
#删除多个 其镜像ID或镜像用空格隔开即可
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID
#删除全部镜像 -a 意思为显示全部, -q 意思为只显示ID
docker rmi -f $(docker images -aq)
#强制删除镜像
docker image rm 镜像名称/镜像ID
● 搜索可用镜像
docker search [镜像名称]
示例:
● 上传镜像
用于将本地的镜像上传到镜像仓库,要先登陆到镜像仓库。
sudo docker push [镜像名称]:[TAG版本号]
示例:docker push myapache:v1
向指定远程仓库推送镜像
docker login --username=[用户名] -p=[密码] 远程ip:端口
docker tag [镜像id:标签] [远程ip:端口/自定义路径/*]:[版本号]
docker push [远程ip:端口/自定义路径/*]:[版本号]
● 提交镜像
docker commit -m=“提交信息” -a=“作者信息” 容器名/容器ID 提交后的镜像名:Tag
● 拉取镜像
docker pull [镜像名称]:[TAG版本号]
● 保存镜像(将我们的镜像保存为tar 压缩文件 这样方便镜像转移和保存)
docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
示例:docker save tomcat -o /myimg.tar
● 加载镜像(任何装 docker 的地方加载镜像保存文件,使其恢复为一个镜像)
docker load -i 镜像保存文件位置
示例:docker load -i /myimg.tar(然后用docker images命令即可看到已加载该镜像了)
● 查看镜像的构建过程
docker history kibana:7.9.3
docker history kibana:7.9.3 --no-trunc
3. 容器
● 删除容器
docker rm [容器ID]
● 启动容器
docker start [容器ID]
● 停止容器
docker stop [容器ID]
● kill 容器
docker kill [容器ID/容器名]
● 重启容器
#重启所有容器
docker restart $(docker ps -a -q)
#重启所有运行中的容器
docker restart $(docker ps -q)
● 进入容器
- docker exec -it 容器名/容器ID /bin/bash 【推荐】
示例: docker exec -it mysql /bin/bash
Docker exec 适用于在容器中执行一次性命令、执行后台任务或运行容器内的辅助进程。这就是说,通过Docker exec,可以在容器中【启动一个新的进程】,并与它进行交互,而【不会打断之前运行的主进程】。通常用于在容器中执行一些命令或启动其他程序。这可以用于在容器中运行后台任务、调试容器中特定进程的问题等。
- docker attach 容器名/容器ID
Docker attach 适用于需要与容器内主进程进行实时交互的场景,比如在终端运行的应用程序或交互式调试。通常用于与正在运行的容器中的主要应用程序进行交互。例如,如果容器中运行着一个正在读取标准输入的交互式应用程序(如终端),那么可以使用Docker attach来连接到容器并与该应用程序进行交互。
● 退出容器
#exit 停止并退出容器(后台方式运行则仅退出)
#Ctrl+P+Q 不停止容器退出
● 查看容器进程信息
docker top id或名
● 查看容器元数据
docker inspect id或名
● 更换容器名
docker rename 容器ID/容器名 新容器名
● 开机自启动容器
启动容器时,使用docker run命令时 添加参数–restart=always 便表示,该容器随docker服务启动而自动启动
● 运行容器
docker run [可选参数] image
示例:docker run -itd --name centos-test centos:centos7
参数说明:
-d 后台运行,退出容器时候容器继续运行
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-i 以交互模式运行容器,通常与 -t 同时使用;
-p 指定容器的端口
(
-p ip:主机端口:容器端口 配置主机端口映射到容器端口
-p 主机端口:容器端口
-p 容器端口
)
-P 随机指定端口(大写的P)
--name 容器命名
docker run 命令
4. 推送到远程仓库
docker tag local-image:tagname new-repo:tagname
docker push new-repo:tagname
查看日志
5. 容器文件拷贝
#从容器内 拷出
docker cp 容器ID/名称: 容器内路径 容器外路径
#从外部 拷贝文件到容器内
docker cp 容器外路径 容器ID/名称: 容器内路径
示例:
- 从容器复制到主机
docker cp mycontainer:/path/to/file /host/path/to/file
- 从主机复制到容器
docker cp /host/path/to/file mycontainer:/path/to/file
- 复制文件并保留元数据
# -a 或 –archive:复制文件或文件夹的元数据,包括文件所有权、文件权限等信息
docker cp -a mycontainer:/path/to/file /host/path/to/file
- 复制符号链接指向的真实文件
# -L 或 –follow-link:如果源路径或者目标路径包含符号链接,那么复制的将是链接所指向的真实文件或者文件夹
docker cp -L mycontainer:/path/to/symbolic/link /host/path/to/file
6. 查看运行日志
docker logs [–tail number] 容器id或容器名 #num为要显示的日志条数
docker logs -f kibana
7. 数据挂载
简单来讲,就是将容器内的数据与外部宿主机文件绑定起来,类似一个双持久化,当容器删除时,宿主机文件数据目录仍在,下次启动容器只要将数据目录指向宿主机数据所在位置即可恢复!
格式:-v 宿主机文件存储位置:容器内文件位置
示例
# 运行一个docker redis 容器 进行 端口映射 两个数据卷挂载 设置开机自启动
docker run -d -p 6379:6379 --name redis505 --restart=always -v /var/lib/redis/data/:/data -v /var/lib/redis/conf/:/usr/local/etc/redis/redis.conf redis:5.0.5 --requirepass "password"
● --volumes-from
–volumes-from是Docker提供的一个非常有用的命令行选项,它允许我们在创建新的容器时共享一个或多个已存在的容器的卷。通过使用–volumes-from,我们可以轻松地将卷【从一个容器“挂载”到另一个容器中】,从而【实现容器之间的数据共享】。这在构建复杂的应用程序架构时非常有用,因为它允许我们将数据存储与应用程序逻辑分开。
示例:
docker run -it/-d -p 主机端口:容器端口 --name=容器名称 ----volumes-from 数据卷容器ID/数据卷容器名称 生成数据卷容器的镜像ID/镜像名称[:版本号]
# 基于父容器,生成子容器,子容器生成数据可在父容器中查看
# 删除父容器,子容器数据依然保留
# 注:这个我还没实践过,先抄过来 - 20231118
docker run -it --name=son-centos --volumes-from father-centos new-centos
PS
文档将自己以前的笔记,通过网络搜索整合而来,内容是多篇博文的综合