个人常用命令
# 删除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 容器服务的名称和功能。例如:
redis
、nginx
、mysql
、backend
等。每个服务使用的 Docker 镜像及其版本。例如,
redis:7.4.2
、nginx: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 配置,以下是你可以提供的信息:
Redis 使用
redis:7.4.2
,端口映射6379:6379
,挂载数据卷/data/redis:/data
。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 有用的链接
菜鸟教程:https://www.runoob.com/docker/docker-container-usage.html
dockerHub: https://hub-stage.docker.com
- 这篇文章的来源:Docs