docker 命令大全

本文详细介绍了Docker的基本命令,包括构建、导出导入镜像,启动、停止和管理容器,以及数据卷和网络的使用。重点讲解了如何实现Docker的开机自启和容器之间的网络通信,特别是通过别名进行访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

持续更新,用到哪里更新哪里

参考学习文档

Docker基础学习:https://docs.docker.com/
Docker基础命令学习:https://docs.docker.com/engine/reference/commandline/cli/

部署流程使用的Docker命令

# 打包命令
docker build -t <image-name> .
#导出镜像
docker save -o xxx.tar <image-name>
#导入镜像
docker load-i xxx.tar 
#启动命令
docker run

#后台运行
-d

# 绑定数据卷  /var/logs:/var/logs
-v

# 启动名称 
--name

# 绑定端口 参数格式 8080:8080
-p

# 网络模式
--net 
`docker --net` 是 Docker 命令中的一个选项,用于指定容器的网络模式。
常见的网络模式包括:

- `bridge`(默认模式):Docker 会为容器创建一个新的网络栈,并连接到 Docker 内部的默认网桥。
    - 示例:`docker run --net bridge my_image`
- `host`:容器将直接使用主机的网络栈,与主机共享网络。
    - 比如:`docker run --net host my_image` 
    - 这种模式下,容器可以直接访问主机的网络资源,端口也会与主机共用。也可以使用host文件中的内容
- `none`:容器将没有任何网络连接。
    - 例如:`docker run --net none my_image` 
    - 这种模式常用于需要完全自定义网络配置的场景。
选择合适的网络模式取决于您的具体需求和应用场景。
比如,如果您希望容器与主机网络完全融合,方便访问主机的网络资源,就可以选择 `host` 模式;
如果希望容器有独立的网络环境且与其他容器隔离,默认的 `bridge` 模式可能更合适;
而 `none` 模式则适用于对网络有特殊定制需求的情况。

# 指定启动平台
--platform
Docker 支持使用 --platform 选项来指定镜像的目标平台,从而在不同平台上运行容器。
例如,如果你想要在一个x86_64架构的系统上运行一个为ARM64架构构建的容器,你可以使用如下命令:
--platform=linux/arm64 
这里的 linux/arm64 是目标平台的标识符,表示容器运行在基于Linux的ARM64架构上。
请确保你的Docker版本至少为19.03,这是添加对多平台构建支持的版本。
如果你的Docker版本较旧,可能需要更新到一个支持多平台构建的版本。
构建不同平台架构用docker 官方提供的构建工具buildx组件,下面有详细的介绍

# 查看镜像支持平台
docker inspect --format='{{.Os}}/{{.Architecture}}'  <image-name>

buildx组件

Docker Buildx 是 Docker 官方提供的一个构建工具,它可以帮助用户快速、高效地构建 Docker 镜像,并支持多种平台的构建。使用 Buildx,用户可以在单个命令中构建多种架构的镜像,例如 x86 和 arm 架构,而无需手动操作多个构建命令。此外,Buildx 还支持 Dockerfile 的多阶段构建和缓存,这可以大大提高镜像构建的效率和速度。

  • 下图显示了涉及 Buildx 和 BuildKit 的示例构建序列。
    在这里插入图片描述

以下是使用 Docker Buildx 的一般步骤:

启用 Buildx

Docker 18.06 及之后的版本中,Buildx 插件直接集成到了 Docker 中,但它仍处于实验状态,需要显式开启。有临时激活和配置文件激活两种方式:

  • 临时激活:在执行构建命令前添加环境变量DOCKER_BUILDKIT=1,例如DOCKER_BUILDKIT=1 docker buildx build -t 镜像:标签 --platform linux/arm64
  • 配置文件激活:编辑/etc/docker/daemon.json文件,添加配置{ "experimental":true }

安装 qemu-user-static

qemu-user-static 用于模拟多平台环境,它依赖于 binfmt-support,所以需要安装这两者。例如在 Ubuntu 系统中,可以使用以下命令安装:sudo apt install -y qemu-user-static binfmt-support

通知 Docker 使用 qemu

执行命令docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

创建 buildx 构建容器

docker buildx create --name mybuilder
docker buildx use mybuilder
docker buildx inspect --bootstrap

当初始化成功,会拉下来 moby/buildkit:buildx-stable-1 的镜像,并启动构建容器。

调整 Dockerfile 接收平台相关参数

为确保构建容器能拉取到正确平台的基础镜像,可显式在FROM后指定平台参数targetplatformbuildplatform,由 Buildx 自动传递。例如:FROM --platform=$targetplatform 基础镜像名:tag

构建并推送镜像

可以选择构建并直接推送到指定仓库,或构建并导出到本地 Docker 镜像中。

  • 构建并直接推送到指定仓库:docker buildx build -t 镜像仓库地址/镜像名:标签 --platform linux/amd64,linux/arm64 --push
  • 构建并导出到本地:docker buildx build -t 镜像仓库地址/镜像名:标签 --platform linux/arm64 --load。注意,命令中的点表示构建上下文位置为当前目录。另外,导出到本地只能构建一个镜像,本地不支持同时导出 manifest lists。导出的镜像如果与当前运行环境平台不同,是无法直接启动的,可以导出(docker save)传输到合适的平台上运行。

Buildx 的应用场景包括但不限于以下几个方面:

  • 跨平台开发:可以在一个构建过程中同时构建多个平台的镜像,方便开发人员在不同平台上进行开发和测试。
  • 跨平台部署:能够将多个平台的镜像一次性推送到 Docker 仓库,简化了跨平台部署的过程。
  • 节省存储空间:避免为每个平台单独创建和推送镜像,节省了存储空间和带宽。

常用命令

命令说明
docker pull拉取镜像
docker push推送镜像到DockerRegistry
docker images查看本地镜像
docker rmi删除本地镜像
docker rmi -f $(docker image -a -q)删除本地全部镜像
docker run创建并运行容器(不能重复创建)
docker stop停止指定容器
docker start启动指定容器
docker restart重新启动容器
docker rm删除指定容器
docker ps查看容器
docker logs查看容器运行日志
docker exec进入容器
docker save保存镜像到本地压缩文件
docker load加载本地压缩文件到镜像
docker inspect查看容器详细信息

用一副图来表示这些命令的关系:
在这里插入图片描述
默认情况下,每次重启虚拟机我们都需要手动启动Docker和Docker中的容器。通过命令可以实现开机自启:

# Docker开机自启
systemctl enable docker

# Docker容器开机自启
docker update --restart=always [容器名/容器id]

数据卷相关命令

命令说明
docker volume create创建数据卷
docker volume ls查看所有数据卷
docker volume rm删除指定数据卷
docker volume inspect查看某个数据卷的详情
docker volume prune清除数据卷

网络相关命令

Docker 网络命令相关文档:https://docs.docker.com/engine/reference/commandline/network/

常见命令有:

命令说明
docker network create创建一个网络
docker network ls查看所有网络
docker network rm删除指定网络
docker network prune清除未使用的网络
docker network connect使指定容器连接加入某网络
docker network disconnect使指定容器连接离开某网络
docker network inspect查看网络详细信息
# 1.首先通过命令创建一个网络
docker network create hmall

# 2.然后查看网络
docker network ls
# 结果:
NETWORK ID     NAME      DRIVER    SCOPE
639bc44d0a87   bridge    bridge    local
403f16ec62a2   hmall     bridge    local
0dc0f72a0fbb   host      host      local
cd8d3e8df47b   none      null      local
# 其中,除了hmall以外,其它都是默认的网络

# 3.让db和mysql都加入该网络,注意,在加入网络时可以通过--alias给容器起别名
# 这样该网络内的其它容器可以用别名互相访问!
# 3.1.mysql容器,指定别名为db,另外每一个容器都有一个别名是容器名
docker network connect hmall mysql --alias db
# 3.2.db容器,也就是我们的java项目
docker network connect hmall db

# 4.进入dd容器,尝试利用别名访问db
# 4.1.进入容器
docker exec -it db bash
# 4.2.用db别名访问
ping db
# 结果
PING db (172.18.0.2) 56(84) bytes of data.
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=1 ttl=64 time=0.070 ms
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=2 ttl=64 time=0.056 ms
# 4.3.用容器名访问
ping mysql
# 结果:
PING mysql (172.18.0.2) 56(84) bytes of data.
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=1 ttl=64 time=0.044 ms
64 bytes from mysql.hmall (172.18.0.2): icmp_seq=2 ttl=64 time=0.054 ms

总结:

  • 在自定义网络中,可以给容器起多个别名,默认的别名是容器名本身
  • 在同一个自定义网络中的容器,可以通过别名互相访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值