Docker

发布于:2025-07-30 ⋅ 阅读:(19) ⋅ 点赞:(0)

个人常用命令


# 删除docker 守护进程,除非你docker死的不能再死,否则别执行这条命令 sudo rm -f /Library/PrivilegedHelperTools/com.docker.socket docker search mysql # 搜索镜像(必须开vpn,它好像不会走代理) # 启动容器 -P:将容器内部使用的网络端口随机映射到我们使用的主机上。 docker run --name redis-zpf -d -p 6379:6379 redis:latest #redis-cli -h localhost -p 637 docker run --name {容器 ID} -d -p {本机端口:容器端口} {image_name:img_version} docker exec -it <容器名称或容器ID> <命令> #docker exec -it redis-zpf bash # start stop restart 最好是使用 容器ID # 容器:Docker 容器使用 | 菜鸟教程 docker rm {容器 ID} # 删除一个或多个 容器 docker rm n1 n2 n3 docker rmi {image_nam} # 删除一个或多个镜像 -f 删除正在运行的容器 docker export 24cda4ef2b30 > zpf-ubuntu.tar # 导出容器 # 导入容器 将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1 cat zpf-ubuntu.tar | docker import - test/ubuntu:v1 docker-compose up #启动多容器应用 从 docker-compose.yml docker-compose down #停止并删除由 docker-compose 启动的容器、网络等 docker stats # 显示容器的实时资源使用情况 如何让容器和容器之间互相通信? 先创建网络:docker network create test-net;然后起动run各个容器的时候通过 --network test-net来把各个容器的网络加入在同一个,之后就可以互相连接啦。 # 推送镜像到dockerhub上面,前提是要进行登录 docker push zpf/ubuntu:18.04 docker push {image_name:image_version} #Docker File 不会写?看不懂别人写的?找 ai DockerFile指令:  Docker Dockerfile | 菜鸟教程  注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大 # 利用DockerFile来构建镜像 . 代表的是上下文路径 # 注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。 docker build -t zpf0000/nginx:v1 . # 构建一个本地镜像 zpf0000/nginx 版本为 v1 # 长久的运行容器 --restart always 让运行docker守护进程时,总是重新启动该容器 docker run --name {容器名} --restart always -d {redis:6.2} # 镜像,如果不带:,则默认是 latest # 注意: --restart 只能在创建容器时使用,start容器时候不支持这个参数 ×:docker run --name redis-zpf -d -p 6379:6379 redis:latest --restart always 这样写的话是错的,放在最后面代表是运行容器时候执行的命令,而redis没有这个restart命令,因此加参数所放 的位置也是至关重要。

Docker_Volume 卷

在 Docker 中,卷(Volumes) 是用来持久化和共享数据的机制。卷使得容器的数据在容器生命周期之外得以保存,即使容器停止或被删除,数据仍然存在。使用卷,可以确保容器之间共享数据,或者将数据保存在本地系统或外部存储中。

1. 卷的概念

  • 卷(Volume) 是 Docker 提供的一种存储机制,它允许数据存储在容器外部,从而在容器停止或删除时不丢失数据。

  • 卷有自己的生命周期,它独立于容器。当容器删除时,卷可以保留,方便在新的容器中重新使用。

2. 卷的类型

在 Docker 中,主要有两种类型的存储方式:

  • 数据卷(Volumes):通过 Docker 管理的数据存储区域,存储在 Docker 的默认路径(通常在 /var/lib/docker/volumes/ 下)。它可以由容器挂载使用,并且容器可以共享这些卷。

  • 绑定挂载(Bind Mounts):将主机文件系统中的目录挂载到容器内。这种方式允许你访问和修改主机上的文件,但也需要注意文件权限和路径的一致性。

3. 如何创建和使用卷

3.1 创建卷

你可以使用 docker volume create 命令创建卷。例如:


docker volume create my_volume

这将创建一个名为 my_volume 的卷。

3.2 在容器中挂载卷

你可以使用 -v--mount 标志在容器中挂载卷。通过这种方式,容器可以使用卷中的数据,并将数据保存在卷中,容器的生命周期结束后,数据仍然存在。

例子 1:使用 docker run 命令挂载卷

docker run -d -v my_volume:/data redis

这个命令做了以下几件事:

  • 启动一个 Redis 容器。

  • 将本地卷 my_volume 挂载到容器内的 /data 目录。

  • Redis 数据库可以将数据存储在 /data 目录中,并且这些数据会存储在 my_volume 卷中。

例子 2:使用 docker-compose.yml 文件挂载卷

在 Docker Compose 文件中,定义卷的方式如下:


version: '3.8' services: redis: image: redis volumes: - my_volume:/data volumes: my_volume:

  • 在上面的例子中,定义了一个名为 my_volume 的卷,并在 redis 服务中将它挂载到 /data 目录。

3.3 挂载目录到容器

除了使用卷,你还可以将主机上的目录挂载到容器中。这通常称为 绑定挂载(Bind Mounts)


docker run -d -v /host/path:/container/path redis

  • -v /host/path:/container/path 将主机 /host/path 目录挂载到容器的 /container/path 目录。这种方式不使用 Docker 卷,而是直接将主机上的目录共享给容器。

4. 管理卷

4.1 查看卷

你可以使用以下命令查看所有的 Docker 卷:


docker volume ls

4.2 查看卷的详细信息

要查看卷的详细信息,可以使用以下命令:


docker volume inspect my_volume

这将显示卷的具体路径、驱动程序等信息。

4.3 删除卷

当你不再需要一个卷时,可以通过以下命令删除它:


docker volume rm my_volume

注意,如果某个卷正在被容器使用,Docker 会阻止你删除该卷,直到容器停止并删除。

4.4 清理未使用的卷

如果你有一些不再使用的卷,可以通过以下命令清理它们:


docker volume prune

这将删除所有未被任何容器使用的卷。

5. 卷与容器的生命周期

  • 容器的数据持久化:容器中的数据通常是临时的,如果容器停止或删除,数据会丢失。使用卷可以持久化数据,确保容器删除后数据仍然存在。

  • 数据共享:多个容器可以挂载同一个卷,允许它们共享数据。例如,如果你有一个数据库容器和一个应用容器,你可以将数据库的数据存储在卷中,应用容器可以访问这些数据。

6. 卷的好处

  • 数据持久化:容器生命周期结束后,数据不会丢失。

  • 共享数据:多个容器可以共享同一个卷,适用于需要共享文件的场景。

  • 备份和迁移:可以轻松备份、迁移卷中的数据,而无需担心容器的具体实现。

7. 卷和绑定挂载的区别

  • 卷(Volumes):由 Docker 管理,通常用于持久化数据,存储在 Docker 默认位置,适合跨容器共享数据。它们更易于移植和备份。

  • 绑定挂载(Bind Mounts):直接将主机的目录挂载到容器中。适用于需要频繁更新或直接访问主机文件系统的场景,但更依赖于主机的文件路径和权限。

总结

  • 卷(Volumes) 是一种用于持久化和共享数据的机制,通常用于确保数据在容器生命周期之外的持久化。

  • 可以使用卷来存储数据库文件、应用数据等,而不会受到容器删除的影响。

  • 与绑定挂载相比,卷更适用于跨容器共享数据,并且 Docker 管理卷的存储和生命周期,使得卷更易于备份和迁移。

DockerCompose

为了编写一个完整的 Docker Compose 文件,以下是一些关键的需求和信息,你需要提供给我:

1. 服务(Services)

  • 你需要的 Docker 容器服务的名称和功能。例如:redisnginxmysqlbackend 等。

  • 每个服务使用的 Docker 镜像及其版本。例如,redis:7.4.2nginx:latest

  • 服务的配置(例如,环境变量、端口映射、挂载的卷等)。

2. 端口映射

  • 容器内的端口与主机之间的端口映射。例如:6379:6379(容器的 6379 端口映射到主机的 6379 端口)。

  • 如果有多个服务,它们可能会使用不同的端口。

3. 卷(Volumes)

  • 是否需要挂载本地目录或数据卷到容器内。比如数据库的数据存储,或配置文件等。

  • 举例:将本地的 /data/mysql 目录挂载到容器内的 /var/lib/mysql

4. 环境变量(Environment Variables)

  • 是否需要设置环境变量,例如数据库连接配置、应用程序密钥等。

5. 网络配置

  • 是否需要自定义网络或使用默认的网络设置。例如,是否需要将服务连接到特定的自定义网络。

6. 重启策略(Restart Policy)

  • 容器的重启策略。例如,是否需要容器在系统重启时自动启动,或发生故障时自动重启。

7. 依赖关系(Depends On)

  • 是否有服务之间的依赖关系。例如,backend 服务依赖于 database 服务。

8. 其他自定义配置

  • 任何额外的配置,如日志驱动、限制资源(CPU、内存限制)等。


示例信息:

假设你需要一个包含 Redis 和 Nginx 的 Docker Compose 配置,以下是你可以提供的信息:

  1. Redis 使用 redis:7.4.2,端口映射 6379:6379,挂载数据卷 /data/redis:/data

  2. Nginx 使用 nginx:latest,端口映射 80:80,并且它依赖于 Redis 服务。

基于这些信息,我可以为你生成以下 Docker Compose 文件:


version: '3.8' # 这个字段告知 Docker Compose 使用的语法版本,以及支持的功能和选项。 #不同的版本对应不同的功能和语法,通常版本号越高,支持的功能越多,但也可能需要更高版本的 Docker Engine 来支持。 3.8是一个比较常见的版本,支持的比较多。 # 如果不指定 version,Docker Compose 会根据你使用的 Docker 引擎的版本选择一个合适的格式 # 在许多情况下,如果你的功能不依赖于特定的高级特性,Docker Compose 会自动处理并选择适当的版本 services: redis: image: redis:7.4.2 container_name: redis-container ports: - "6379:6379" volumes: - /data/redis:/data restart: always nginx: image: nginx:latest container_name: nginx-container ports: - "80:80" depends_on: - redis restart: always 


总结:

为了编写 Docker Compose 文件,你可以提供以下信息:

  • 每个服务的名称、镜像、版本、端口、卷、环境变量等。

  • 服务之间的依赖关系和重启策略。

  • 其他任何特定的配置需求。

Docker 代理配置:


{ "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "experimental": false, "features": { "buildkit": true }, "registry-mirrors": [ "https://dockerpull.org", "https://docker.1panel.dev", "https://docker.foreverlink.love", "https://docker.fxxk.dedyn.io", "https://docker.xn--6oq72ry9d5zx.cn", "https://docker.zhai.cm", "https://docker.5z5f.com", "https://a.ussh.net", "https://docker.cloudlayer.icu", "https://hub.littlediary.cn", "https://hub.crdz.gq", "https://docker.unsee.tech", "https://docker.kejilion.pro", "https://registry.dockermirror.com", "https://hub.rat.dev", "https://dhub.kubesre.xyz", "https://docker.nastool.de", "https://docker.udayun.com", "https://docker.rainbond.cc", "https://hub.geekery.cn", "https://docker.1panelproxy.com", "https://atomhub.openatom.cn", "https://docker.m.daocloud.io", "https://docker.1ms.run", "https://docker.linkedbus.com" ] }

Docker 有用的链接

  1. 菜鸟教程:https://www.runoob.com/docker/docker-container-usage.html

  2. dockerHub: https://hub-stage.docker.com

  3. 这篇文章的来源:Docs


网站公告

今日签到

点亮在社区的每一天
去签到