1 Docker设置
1.1 Docker的启动与关闭
## 使用systemctl命令
# ***********************************
# 启动Docker服务
systemctl start docker
# 设置开机自动启动
systemctl enable docker
# 取消开机自动启动
systemctl disable docker
# ***********************************
## 使用systemctl命令
# ***********************************
# 启动 Docker 服务
service docker start
# 停止 Docker 服务
service docker stop
# ***********************************
# 重启docker服务
service docker restart
# ***********************************
1.2 Docker修改容器默认挂载分区
此操作适合在新安装Docker后未创建容器时使用,如在已正常使用的环境下操作,务必做好数据的备份;
在使用docker时,经常会遇到磁盘空间占满的情况。多数情况下,是由于在安装docker时候,默认将overlay2安装在/var/lib/docker下面。随着,docker的使用,overlay2将根目录占满,导致一些程序异常。以下可以解决这个问题。
安装docker后,docker默认将文件及其容器放置在了系统盘的挂载区内,这时我们需要将其挪至外挂磁盘上。数据转移前需要将已有的容器备份,(如果容器的重要数据挂载在本机目(Volume),也可重新构建容器,指定挂载目录)。随后,我们服务器中,配置docker服务信息,将docker的"data-root"修改到到指定位置,重启Docker后,即可解决。
# 停止容器
systemctl stop docker
# 修改容器配置,如果daemon.json不存在,新建即可。
vi /etc/docker/daemon.json
{
"data-root": "/data/docker-data",
"storage-driver": "overlay2"
}
# 启动容器
systemctl start docker
systemctl enable docker
2 镜像操作
# 拉取镜像
docker pull 镜像名称
# 查看镜像
docker images
# 删除镜像(删除镜像的时候,需要删除该镜像的所有容器)
docker rmi 镜像id
# 修改镜像名称
docker tag 镜像id 新镜像名称:版本
3 容器操作
docker run
和 docker build
Docker 命令行工具中的两个主要命令,用于运行和构建 Docker 容器。
3.1 docker run
命令
用于运行已存在的 Docker 镜像,并在其中创建一个新的容器。它接受一个或多个镜像作为参数,并根据镜像的定义来创建一个运行的容器实例。你可以使用 docker run
命令指定容器的名称、运行的命令、环境变量、端口映射等选项。
例如,以下命令使用 docker run
运行 Ubuntu 镜像,并在容器中执行 bash
命令:
docker run -it ubuntu:latest /bin/bash
在这个例子中,-it
选项表示交互模式,使得你能够在容器中获得一个交互式的 Bash 会话。
docker run 命令参数详解:
docker run
命令是在 Docker 中创建和运行容器的主要命令。它提供了许多参数,用于配置和自定义容器的行为。以下是常用的docker run
命令的参数:
-d, --detach
:在后台运行容器,即以守护进程方式运行。
--name
:为容器指定一个名称。
-p, --publish
:将容器的端口映射到主机的端口,格式为<主机端口>:<容器端口>
。
-v, --volume
:将主机的目录或文件挂载到容器中,格式为<主机路径>:<容器路径>
。
-e, --env
:设置环境变量,格式为<变量名>=<值>
。
-it
:以交互模式运行容器,并分配一个伪终端(TTY)。
--rm
:容器退出后自动删除容器。
--network
:指定容器使用的网络模式,如bridge
、host
、none
等。
--link
:链接到其他容器,格式为<容器名称或ID>:<别名>
。
--restart
:指定容器在退出后的重启策略,如no
、always
、on-failure
等。
--privileged
:以特权模式运行容器,获取主机的所有权限。
--user
:指定以哪个用户身份运行容器。
--cpu-shares
:设置容器的 CPU 分配比例。
--memory
:限制容器的内存使用。
--entrypoint
:覆盖容器默认的入口点命令。
3.2 docker build
命令
用于从 Dockerfile 文件构建新的 Docker 镜像。Dockerfile 是一个文本文件,其中包含了构建镜像所需的指令和配置。通过使用docker build
命令,你可以将 Dockerfile 中的指令转换为实际的镜像。
例如,以下命令使用 docker build
从名为 Dockerfile的文件构建一个新的镜像:
docker build -t myimage:latest .
在这个例子中,-t
选项用于指定新镜像的名称和标签,而 .
表示当前目录,即 Dockerfile 所在的位置。
总的来说,docker run
用于运行已有的 Docker 镜像并创建容器,而 docker build
用于根据 Dockerfile 构建新的 Docker 镜像。通过组合使用这两个命令,你可以在 Docker 环境中创建、运行和管理容器化应用程序。
Dockerfile 是用于定义 Docker 镜像的文本文件。它包含了一系列的指令(Instructions),用于告诉 Docker 如何构建镜像。通过编写 Dockerfile,你可以定义镜像的操作系统、软件环境、依赖项和配置等内容。
Dockerfile 是一个纯文本文件,通常以名为Dockerfile
的文件名保存。它可以包含多个指令,每个指令占据一行,并按照顺序逐行执行。
以下是一个简单的 Dockerfile 示例:
# 使用基础镜像
FROM ubuntu:latest
# 设置工作目录
WORKDIR /app
# 复制应用程序文件到镜像中
COPY . .
# 安装依赖
RUN apt-get update && apt-get install -y python3
# 运行命令
CMD ["python3", "app.py"]
在上述示例中,Dockerfile 定义了以下指令:
FROM
:指定了基础镜像,本例中使用了最新版的 Ubuntu 镜像作为基础。WORKDIR
:设置了工作目录为/app
。COPY
:将当前目录中的所有文件复制到镜像的/app
目录下。RUN
:执行了一个命令,更新包管理器并安装了 Python 3。CMD
:设置了容器启动时默认执行的命令,本例中运行了一个 Python 应用程序。
通过运行docker build
命令并指定 Dockerfile 的路径,Docker 将根据 Dockerfile 构建一个镜像。例如:
docker build -t myapp .
上述命令将在当前目录下的 Dockerfile 中构建名为myapp
的镜像。
Dockerfile 提供了一种可重复、可扩展和可自动化的方式来构建 Docker 镜像,并且可以通过版本控制系统进行管理和共享。
3.3 容器的自启动
docker run -d --restart=always --name 设置容器名 使用的镜像
(上面命令 --name后面两个参数根据实际情况自行修改)
# Docker 容器的重启策略如下:
--restart具体参数值详细信息:
no // 默认策略,容器退出时不重启容器;
on-failure // 在容器非正常退出时(退出状态非0)才重新启动容器;
on-failure:3 // 在容器非正常退出时重启容器,最多重启3次;
always // 无论退出状态是如何,都重启容器;
unless-stopped // 在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器。
# 修改已有容器的自启动策略
docker update --restart=always 容器ID(或者容器名)
(容器ID或者容器名根据实际情况修改)
3.4 查看容器的运行日志
要查看 Docker 容器的运行日志,您可以使用 docker logs
命令。docker logs
命令用于获取容器的标准输出(stdout)和标准错误(stderr)日志。
以下是使用 docker logs
命令查看容器运行日志的基本用法:
docker logs <容器名称或容器ID>
将 <容器名称或容器ID>
替换为您要查看日志的容器的名称或容器ID。执行上述命令后,将输出容器的日志内容。
以下是一些常用的 docker logs
命令选项:
-f, --follow
:实时跟踪日志输出,类似于tail -f
命令。--tail <行数>
:只显示最后指定行数的日志,默认为所有日志。--since <时间戳>
:只显示指定时间戳之后的日志。时间戳可以是绝对时间(如2023-01-01
)或相对时间(如2h30m
)。--until <时间戳>
:只显示指定时间戳之前的日志。--timestamps
:显示日志的时间戳。--details
:显示日志的额外详细信息。
以下是一些示例命令:
# 查看名为 mycontainer 的容器日志
docker logs mycontainer
# 实时跟踪名为 mycontainer 的容器日志
docker logs -f mycontainer
# 只显示名为 mycontainer 的容器最后 100 行日志
docker logs --tail 100 mycontainer
# 显示名为 mycontainer 的容器从指定时间戳之后的日志
docker logs --since 2023-01-01 mycontainer
请注意,docker logs
命令默认只会输出容器的标准输出和标准错误日志。如果容器应用程序将日志输出到其他文件或位置,你可能需要进一步查看容器内部的文件系统或使用相关工具来获取这些日志。
3.5 进入容器
docker exec
命令允许您在运行的容器中执行命令。您可以使用该命令进入容器的交互式终端。
以下是使用 docker exec
命令进入容器的基本用法:
docker exec -it <容器名称或容器ID> <命令>
将 <容器名称或容器ID>
替换为您要进入的容器的名称或容器ID。-it
参数用于以交互模式进入容器,并分配一个伪终端(TTY)。<命令>
参数是可选的,如果您不指定命令,则默认进入容器的默认终端。
以下是一些示例命令:
# 进入名为 mycontainer 的容器的默认终端
docker exec -it mycontainer /bin/bash
# 进入名为 mycontainer 的容器的交互式 Python shell
docker exec -it mycontainer python
# 在名为 mycontainer 的容器中执行命令并退出
docker exec mycontainer ls -l
使用 docker exec
命令进入容器时,您可以执行任意命令,并与容器进行交互。
4 容器导入与导出
当您需要在 Docker 中导入和导出容器时,可以使用 Docker 提供的导入(import)和导出(export)功能。导入和导出容器可以帮助您在不同的 Docker 环境之间迁移和共享容器。
下面是有关如何导入和导出 Docker 容器的详细介绍:
4.1 导出容器(Export)
导出容器是将一个已经存在的容器打包成一个可传输的文件(称为导出文件),该文件包含容器的文件系统和元数据。导出容器时,容器必须是停止状态。
要导出容器,请执行以下步骤:
停止容器:
在导出容器之前,确保容器已停止运行。使用以下命令停止容器:
docker stop <容器名称或容器ID>
导出容器:
使用以下命令导出容器:
docker export <容器名称或容器ID> > container.tar
上述命令将容器导出并保存到名为 container.tar
的文件中。
完成导出:
导出过程完成后,将在当前工作目录中生成名为 container.tar
的导出文件。您可以将此文件传输到其他 Docker 环境,并进行导入操作。
4.2 导入容器(Import)
导入容器是将之前导出的容器文件(导出文件)导入到 Docker 中,以创建一个新的容器。
要导入容器,请执行以下步骤:
传输导出文件:
将之前导出的容器文件(container.tar
)传输到目标 Docker 环境中,确保该文件位于目标环境的合适位置。
导入容器:
在目标 Docker 环境中,使用以下命令导入容器:
docker import container.tar <新容器名称>
# 上述命令将导出文件导入,并创建一个新的 Docker 镜像。
创建容器:
使用新创建的镜像,使用以下命令创建一个新的容器:
docker run -it <新容器名称> /bin/bash
# 运行上述命令后,将创建一个新的容器,并进入到容器的交互式终端。
通过上述步骤,您可以将之前导出的容器在新的 Docker 环境中导入并创建新的容器。
请注意,导出的容器文件(导出文件)只包含容器的文件系统和元数据,而不包含与容器相关的卷数据(Volume)。如果容器中使用了卷,请确保在导出和导入容器时正确挂载卷数据。