前言
最近感觉docker真的很方便,部署开源项目,下载配置什么环境都很方便,刷了会课学了docker,简单做个笔记,方便查阅
废话不多说,正文开始
Docker 笔记
docker重点概念
- Docker 镜像(Image):Docker 镜像是一个轻量级的、可执行的独立软件包,包含运行某个软件所需的所有内容,包括代码、运行时环境、库、环境变量和配置文件。
- Docker 容器(Container):容器是镜像的运行实例。它可以被启动、停止、暂停和删除。每个容器都是隔离的、安全的,并且是一个完整的操作系统平台。
- Dockerfile:Dockerfile 是一个文本文件,其中包含了一系列用户可以调用的命令,用于自动化创建 Docker 镜像。Dockerfile 中的命令包括复制文件、安装应用、暴露端口等。
- Docker 仓库(Repository):Docker 仓库是用于存储和分发 Docker 镜像的地方。可以是公开的也可以是私有的。Docker Hub 是 Docker 的公开仓库,用户可以在上面发布和下载镜像。
- Docker Compose:Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,你可以使用 YAML 文件来配置应用程序的服务,然后使用一个命令来创建和启动所有服务。
- Docker Swarm:Docker Swarm 是 Docker 的原生集群管理和编排工具,用于创建和管理 Docker 集群。
- Docker 网络:Docker 网络允许你定义自己的网络和网络拓扑,使得容器可以相互通信。
- Docker 卷(Volume):Docker 卷是持久化数据存储的最佳方式。卷完全由 Docker 管理,可以在容器之间共享和重用。
基础命令
镜像相关操作命令
- 从云端拉取镜像
docker pull
- 查看所有镜像
docker image
- 删除镜像
docker rmi
- 推送镜像
docker push
- 打包镜像
- 先编写
dockerfile
文件 - 运行
docker build
- 此时可以通过
docker save
打包成压缩包,别人可以通过docker load
来加载镜像 - 一般情况都是使用
docker push
推送到云端,然后通过docker pull
拉取
- 先编写
容器相关命令
-
docker run -d -p 8080:80 --name my_container my_image
- 这个命令会启动一个名为
my_container
的新容器,使用my_image
镜像,将容器的 80 端口映射到主机的 8080 端口,并在后台运行-d
或--detach
:在后台运行容器,并返回容器 ID-i
或--interactive
:以交互模式运行容器,通常与-t
一起使用-t
或--tty
:为容器重新分配一个伪输入终端,通常与-i
一起使用--name
:为容器指定一个名称-p
或--publish
:将容器的端口映射到主机上。格式为<host-port>:<container-port>
-P
或--publish-all
:将容器的端口所有映射到主机上-v
或--volume
:挂载主机上的一个数据卷到容器内。格式为<host-dir>:<container-dir>
-e
或--env
:设置环境变量。格式为<key>=<value>
--rm
:容器退出时自动删除容器--restart
:设置容器的重启策略。可选的值有no
、on-failure
、always
、unless-stopped
- 这个命令会启动一个名为
-
docker stop
用来停止运行中的容器docker stop my_container
- 这个命令会停止名为
my_container
的容器 <container>
: 容器的 ID 或名称。你可以指定一个或多个容器来停止它们-t
或--time
: 在发送 SIGKILL 信号前等待容器停止的秒数。默认是 10 秒
-
docker start
用于启动一个或多个已停止的 Docker 容器docker start my_container
- 这个命令会启动名为
my_container
的容器 <container>
: 容器的 ID 或名称。你可以指定一个或多个容器来启动它们-a
或--attach
: 附加 STDOUT/STDERR 并转发信号-i
或--interactive
: 附加容器的 STDIN
-
docker ps
用于列出当前正在运行的 Docker 容器-a
或--all
: 显示所有的容器(包括已经停止的)-q
或--quiet
: 只显示容器的编号-s
或--size
: 显示总文件大小--no-trunc
: 不截断输出-f
或--filter
: 根据条件过滤输出
-
docker rm
用于删除一个或多个 Docker 容器<container>
: 容器的 ID 或名称。你可以指定一个或多个容器来删除它们-f
或--force
: 强制删除一个正在运行的容器-v
或--volumes
: 删除与容器关联的卷
-
docker logs
用于获取 Docker 容器的日志<container>
: 容器的 ID 或名称。你需要指定一个容器来获取它的日志--follow
或-f
: 跟踪实时日志--tail
: 显示最后 N 行日志--since
: 显示自某个时间点以来的日志--timestamps
或-t
: 在日志中显示时间戳
-
docker exec
用于进入在运行的 Docker 容器内部<container>
: 容器的 ID 或名称,你需要指定一个容器来在其中执行命令-d
或--detach
: 在后台运行-i
或--interactive
: 保持 STDIN 开启,即使没有附加-t
或--tty
: 分配一个伪终端
-
docker inspect
查看容器详情
数据卷的概念
- Docker 数据卷(Docker Volume)是 Docker 提供的一种数据持久化的解决方案。数据卷是在 Docker 主机上创建的特殊目录,可以被 Docker 容器挂载并使用。数据卷可以在容器之间共享和重用,而且对数据卷的修改会立即生效,无论是在容器内还是在 Docker 主机上。
- Docker 数据卷的主要特点包括:
- 数据持久化:即使容器被删除,卷中的数据也会保留下来。这对于保护你的数据非常重要,因为 Docker 容器的文件系统是暂时的,当容器被删除时,所有未保存在数据卷中的数据都会丢失。
- 数据共享:数据卷可以在多个容器之间共享和重用。例如,你可以创建一个包含数据文件的数据卷,然后将其挂载到多个容器中。
- 数据迁移:数据卷可以帮助你在不同的 Docker 主机之间迁移数据。你可以通过备份、恢复或者迁移数据卷来实现这一点。
- 性能优化:数据卷在 Docker 主机上的性能通常比容器的文件系统更好。因此,对于 I/O 敏感的应用,使用数据卷可以提高性能。
- 与主机系统隔离:数据卷在 Docker 主机上是以一个特殊的目录存在的,这个目录是直接由 Docker 管理的,而不是挂载到 Docker 主机的文件系统中。这样可以提高数据的安全性和隔离性。
数据卷操作
docker volume create
创建数据卷docker volume ls
查看所有数据卷docker volume rm
删除指定数据卷docker volume inspect
查看某个数据卷的详情docker volume prune
清除无用数据卷
docker网络互连
docker 默认创建虚拟网桥172.17.0.1/16 ,容器启动的时候会自动加入网桥并分配虚拟ip,使得可以相互访问,但是因为随机分配所以不固定,需要自建自定义网络来实现互联
网络基础命令
docker network create
创建一个网络docker network ls
查看所有网络docker network rm
删除指定网络docker network prune
清除未使用的网络docker network connect
使指定容器链接加入到某网络docker network disconnect
使指定容器离开某网络docker network inspect
查看网络详细信息