Docker(三) 容器管理

1 容器管理概述

Docker 的容器管理可以通过 Docker CLI 命令行工具来完成。Docker 提供了丰富的命令,用于管理容器的创建、启动、停止、删除、暂停、恢复等操作。

以下是一些常用的 Docker 容器命令:

1、docker run:用于创建并启动一个容器。使用 docker run 命令时,可以指定容器名称、镜像名称、启动命令、挂载数据卷、网络配置等,以满足不同使用需求。

2、docker start/stop/restart:用于启动/停止/重启一个已经创建的容器。

3、docker rm:用于删除一个或多个容器。可以使用 docker rm -f 命令强制删除正在运行的容器。

4、docker pause/ unpause:用于暂停/恢复一个容器。

5、docker stats:用于查看正在运行的容器的资源使用情况。

6、docker inspect:用于查看容器信息。

7、docker exec:用于在正在运行的容器中执行命令。

8、docker cp:用于从宿主机拷贝文件到容器中,或者从容器中拷贝文件到宿主机。

2 创建容器

docker run 命令是 Docker 最重要的命令之一,用于创建并启动一个新的 Docker 容器。

docker run 命令首先在指定的镜像上创建一个可写的容器层,然后使用指定的命令启动它。也就是说,docker run 相当于 API /containers/create 然后 /containers/(id)/start。

下面是 docker run 命令的主要语法:

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

其中:

  • IMAGE:指定要使用的 Docker 镜像的名称或 ID
  • TAG:指定要使用的镜像的标签,默认为 latest
  • DIGEST:指定要使用的镜像的数字摘要
  • COMMAND:覆盖容器默认的启动命令
  • ARG:覆盖容器默认的启动命令的参数

OPTIONS 包含多种参数和选项,可用于指定容器运行时的各种属性和配置,常用的参数和选项有:

  • -d, --detach:在后台运行容器
  • -it:在容器内部启动一个交互式终端
  • -p, --publish:将容器的端口发布到主机的端口
  • -v, --volume:将主机的目录或文件挂载到容器的目录
  • --name:指定容器的名称
  • -h, --hostname:可指定容器的主机名
  • -e, --env:该选项可将环境变量传递给容器,例如配置数据库密码等

3 创建和删除容器示例

启动一个tomcat容器,在后台运行,并查看本机中正在运行的容器:

docker run -d tomcat

停止容器:

docker stop ff89 # 容器名称/ID

此时docker ps无法查询到容器信息。可以使用docker ps -a查看包含已停止容器在内的全部容器信息。

可以使用docker rm命令删除一个已停止的容器:

4 进入容器的方法

容器是一个相对隔离的运行管径,就像住宅中的一个房间,进入容器就是进入这个容器的运行环境。

Docker提供了多种进入容器的方法:

1、docker exec 命令:可以在运行中的容器中启动一个新进程。这种方式对于多个用户协作进行调试非常方便,也不需要停止容器,推荐使用这种方式。

2、docker attach 命令:可以连接到后台运行的容器的标准输入、输出、错误流。attach命令可能导致docker容器意外关闭,不推荐使用。

3、docker run 命令:可以在创建一个新的容器时启动交互终端,但是退出交互终端默认会关闭容器,需要使用特殊的命令退出才行。

5 网络端口映射

Docker的网络端口映射是将宿主机的一个端口映射到Docker容器的一个端口,此时宿主机的这个端口就可以访问容器中运行的应用程序了。

Docker的端口映射有两种方式:随机端口映射和固定端口映射。

1、随机端口映射:在启动容器时可以使用-P命令配置随机端口映射,Docker会随机映射一个49000~49900的端口到内部容器开放的网络端口。

docker run -d -P tomcat # 使用-P命令需要镜像支持

2、固定端口映射:可以在启动容器时指定宿主机端口映射到容器的端口。

docker run -d -p 8080:80 tomcat

其中 -p 参数代表端口映射,冒号前面的数字表示宿主机端口号,冒号后面的数字表示容器端口号。

Docker 的端口映射可以方便地在宿主机上访问容器内的应用程序,是 Docker 中非常实用的网络功能之一。

6 进入容器和网络端口映射示例

本示例启动一个tomcat容器,并实现外部对该tomcat服务器的访问。

首先,启动一个tomcat容器,将容器的8080端口绑定到宿主机的8080端口。

docker run --name some-tomcat -d -p 8080:8080 tomcat

Tomcat镜像默认将欢迎页面等资源放在内部的webapps.dist文件夹中,无法被用户直接访问,需要手动进行修改。

进入some-tomcat容器。

docker exec -it some-tomcat /bin/bash

在容器中,将webapps.dist文件夹下的全部内容复制到webapps文件夹下。

cp -r webapps.dist/* webapps/

然后,退出容器。

exit

接下来,需要开放主机的8080端口,在本机使用浏览器访问主机的8080端口,查看能否看到Tomcat服务器的首页。

7 数据卷的管理

Docker容器卷是一种用于在Docker容器和主机之间共享数据的机制。它们可以将主机文件系统的目录或文件夹挂载到容器的特定路径中,以便容器可以访问这些文件和目录。

Docker容器卷可以通过以下方式进行管理:

1、创建卷:可以使用docker volume create命令创建一个卷,并指定名称和其他选项。例如:docker volume create my-volume可以创建名为my-volume的空卷。

2、挂载卷:可以使用-v选项将主机文件夹或卷挂载到容器中。例如:docker run -v /host/folder:/container/folder my-image可以将主机上的/host/folder目录挂载到容器中的/container/folder路径。

3、查看卷:可以使用docker volume ls命令列出所有当前可用的卷,也可以使用docker volume inspect命令获取有关特定卷的详细信息。

4、删除卷:可以使用docker volume rm命令删除特定的卷。例如:docker volume rm my-volume可以删除名为my-volume的卷。请注意,您不能删除当前正在使用的卷,必须首先从所有容器中卸载卷。

5、自动删除卷:如果需要,您可以创建自动删除的卷。这些卷将在其中没有容器使用它们的情况下自动删除。要创建这些卷,您可以使用docker run命令的--rm选项或在docker create命令中指定--rm选项。

8 数据卷示例

本示例演示两种较为常见的使用卷的方法:

1、启动容器时创建挂载卷

2、先创建卷后挂载

接下来演示启动容器时创建挂载卷。

首先,关闭并删除之前创建的Tomcat容器。

然后,使用如下命令创建Tomcat容器,并将宿主机的/opt/html文件夹挂载到Tomcat容器的/usr/local/tomcat/webapps/ROOT文件夹。

docker run --name some-tomcat -d -p 8080:8080 -v /opt/html:/usr/local/tomcat/webapps/ROOT tomcat

接下来,在宿主机的/opt/html文件夹下新建mypage.html。

echo 'Hello Docker!' > /opt/html/mypage.html

使用curl命令访问宿主机的8080端口,查看能否访问到mypage.html中的内容。

接下来演示先创建卷后挂载。

首先,关闭并删除之前创建的Tomcat容器。

然后,创建卷:

docker volume create demo-vo # demo-vo是卷的名称

查看卷列表:

docker volume ls

查看卷详细信息:

docker volume inspect demo-vo

可以看到实际的存储位置:

使用卷创建容器:

docker run -d -p 8080:8080 -v demo-vo:/usr/local/tomcat/webapps/ROOT tomcat

创建测试mypage.html:

echo 'Hello' > /var/lib/docker/volumes/demo-vo/_data/mypage.html

测试:

curl localhost:8080/mypage.html

9 将容器保存为镜像

在 Docker 中,将容器保存为镜像是非常有用的功能。这允许用户将现有的容器转换为可重用的镜像,进行分发、共享和部署。

Docker commit命令用于将一个正在运行的容器保存为一个新的镜像。它会记录容器中的当前状态并创建一个增量镜像层,新的镜像将包含原容器中的所有修改。Docker commit 命令的语法如下:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS: 可选参数。常见参数如下:

  • -a, --author: 镜像作者
  • -c, --change: 指定容器创建时的修改项
  • -m, --message: 提交镜像时的提交消息
  • -p, --pause: 在提交时暂停容器运行

CONTAINER: 必需,容器的名称或 ID。

REPOSITORY: 镜像仓库名称。

TAG: 镜像版本号。

10 容器保存为镜像示例

本示例演示创建一个安装了JDK8的rockylinux镜像。

首先,拉取rockylinux镜像:

docker pull rockylinux:9.0

然后,基于镜像启动容器:

docker run -it rockylinux:9.0 /bin/bash

在容器中使用yum命令安装JDK8:

yum install -y java-17-openjdk-devel

exit离开容器。

使用commit命令创建本地镜像:

docker commit 6906 rockylinux-java17 # 其中3a38是容器的简写id

查看本地镜像:

docker images

使用新镜像创建容器,并在容器中执行java -version命令:

docker run rockylinux-java17 java -version

相关推荐
2301_819287121 小时前
ce第六次作业
linux·运维·服务器·网络
CIb0la1 小时前
GitLab 停止为中国区用户提供 GitLab.com 账号服务
运维·网络·程序人生
武汉联从信息1 小时前
如何使用linux日志管理工具来管理oracle osb服务器日志文件?
linux·运维·服务器
天天进步20151 小时前
STUN服务器实现NAT穿透
运维·服务器
PieroPc2 小时前
Python 自动化 打开网站 填表登陆 例子
运维·python·自动化
VinciYan2 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
冷曦_sole3 小时前
linux-19 根文件系统(一)
linux·运维·服务器
AI大模型学徒3 小时前
Linux(二)_清理空间
linux·运维·服务器
tntlbb3 小时前
Ubuntu20.4 VPN+Docker代理配置
运维·ubuntu·docker·容器
Gabriel_liao3 小时前
Docker安装Neo4j
docker·容器·neo4j