Docker的容器

Docker的容器

一.容器

容器是一种轻量级的虚拟化技术。它有效的将单个操作系统的资源划分到各独立的组中,以便更好的平衡这些独立的组之间资源的使用。

容器主要包含了命名空间 (Namespaces)和cgroup(Control Groups)两大核心技术。

  1. 命名空间:Namespace是将全局系统资源隔离成独立的视图,使得在不同 Namespace 中运行的进程看到的资源是不同的。每个Namespace都有一份独立的资源,不同的进程在各自的Namespace内对同一种资源使用时不会互相干扰。
  2. cgroup:是用于限制和隔离一组进程对系统资源的使用,这些资源主要包括CPU、内存、磁盘I/O和网络带宽等。

二.Docker中的容器

容器是Docker的另一个核心概念,它是镜像的一个运行实例。在我们学习的面向对象语言中,镜像可以理解为面向对象中的类,而容器则可以看作是从镜像这个"类"实例化出来的一个个对象。

Docker容器一个轻量级的、独立的、可移植的运行环境,是架设在操作系统之上的一种轻量级的虚拟化技术。

Docker容器由于可以包含了运行某个软件所需要的所有资源,包括代码、运行时环境、库、环境变量和配置文件等。因此Docker容器就像一个"软件包装盒",它可以将应用及其运行环境一起打包,使得应用的运行不再受限于特定的系统和环境。

Docker容器跳出了系统和环境的限制,使开发的应用程序可以在任何宿主机上以相同的方式运行。

一个镜像可以创建出多个容器。当Docker创建一个容器时,它会在加载镜像文件的所有只读层基础上再添加一个容器层。而这个容器层是可读可写的。

三.Docker容器的生命周期

Docker容器在运行的过程中,容器生命周期可能会处于已创建(Created)、运行中(Running)、停止(Stopped)、暂停中(Paused)以及删除(Deleted)等几种状态。

Docker容器的生命周期涵盖了七个关键阶段,每个阶段都有其特定的目标和操作。这七个阶段的概述如下:

  1. 已创建(Created):在容器的生命周期中,创建是第一个关键阶段。在这个阶段,我们选择适当的 Docker 镜像作为容器的基础,并使用 Docker 命令来创建容器实例。容器的配置选项和环境变量设置也在这个阶段完成。
  2. 启动(Start):一旦容器被成功创建,就可以进入启动阶段。启动已创建的容器,使其处于运行状态。
  3. 运行(Run):容器的运行阶段是其生命周期的核心。在此阶段,在容器中运行应用程序,处理请求等。
  4. 暂停:在某些情况下,我们可能需要暂停容器的运行,而不是完全停止它。暂停容器会冻结其状态,包括应用程序的进程。容器的资源消耗会暂时减少,但状态仍然保留在内存中。
  5. 继续:当需要时,我们可以将容器从暂停状态切换回运行状态,使应用程序继续处理请求。
  6. 停止(Stop):停止正在运行的容器,但并不会删除它。在停止阶段,容器会被正常关闭,应用程序会完成清理工作并释放资源。
  7. 删除(Delete):当我们确定不再需要特定容器时,可以从系统中删除已停止的容器实例。

四.Docker容器命令详解

1.docker create

docker create命令用于创建一个新容器但并不启动它。

命令格式:

bash 复制代码
docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]

命令别名:

bash 复制代码
docker create

参数选项:

  • --name:设置容器的名称;
  • -i,--interactive:保持标准输入打开,通常与-t同时使用;
  • -t,--tty:分配一个伪终端;
  • -p,--publish:指定容器和宿主机的端口映射,格式为:主机(宿主)端口:容器端口;
  • -P,--publish-all:将容器内部的随机端口映射到宿主机的端口;
  • --add-host:在容器内添加一个主机名到IP地址的映射关系;
  • -h,--hostname:设置容器主机名;
  • -e,--env:设置环境变量;
  • --env-file:设置读取环境变量到容器内的文件;
  • -m,--memory:限制容器内应用使用的内存;
  • --link:添加指向另一个容器的链接;
  • --network:指定容器的网络连接类型;
  • --restart:设置容器退出时的重启策略;
  • --rm:设置容器退出时自动删除容器以及关联的匿名卷;
  • -v,--volume:绑定挂载一个卷;
  • -w,--workdir:设置容器的默认工作目录;
  • -a, --attach:是否绑定到标准输入(STDIN)、输出(STDOUT)或错误(STDERR) ;
  • --device:映射物理机上的设备到容器内;
  • --dns:设置自定义DNS服务器;
  • --dns-option:设置自定义DNS选项;
  • --dns-search:设置自定义DNS搜索域;
  • --domainname:设置容器NIS域名;
  • --entrypoint:定义新的命令覆盖镜像存在的入口命令;
  • --expose:设置容器暴露出来的端口或端口范围;
  • --ip:设置容器的IPv4地址;
  • --ip6:设置容器的IPv6地址;
  • -l,--label:设置容器元数据标签信息;
  • --privileged:授予容器内进程对宿主机系统的更高权限;
  • --mount:挂载文件系统到容器;
  • --cap-ad:添加Linux功能;
  • --cap-drop:删除Linux功能;
  • --cidfile:指定容器ID写入的文件。

示例:

bash 复制代码
docker create -it --name busybox-container hub.c.163.com/library/busybox:1.27-uclibc

2.docker start

docker start [OPTIONS] CONTAINER [CONTAINER...] 命令是用于启动一个已经停止的容器。

命令格式:

bash 复制代码
docker container start [OPTIONS] CONTAINER [CONTAINER...]

命令别名:

bash 复制代码
docker start

参数选项:

  • -i,--interactive:保持标准输入打开,通常与-t同时使用;
  • -a, --attach:是否绑定到标准输入(STDIN)、输出(STDOUT)或错误(STDERR) 。

示例:

bash 复制代码
docker start busybox-container

我们使用docker start命令启动了1小结中刚刚创建的名称为" busybox-container"的容器。启动了完成后,再通过docker ps命令就可以查看刚刚启动的容器。

3.docker run

docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 命令是从指定的镜像创建一个容器并将容器启动,它相当于先执行docker [container] create命令,然后再执行docker [container] start命令。

命令格式:

bash 复制代码
docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

命令别名:

bash 复制代码
docker run

参数选项:

  • -d,--detach:在后台运行容器并打印容器的ID;
  • --name:设置容器的名称;
  • -i,--interactive:保持标准输入打开,通常与-t同时使用;
  • -t,--tty:分配一个伪终端;
  • -p,--publish:指定容器和宿主机的端口映射,格式为:主机(宿主)端口:容器端口;
  • -P,--publish-all:将容器内部的随机端口映射到宿主机的端口;
  • --add-host:在容器内添加一个主机名到IP地址的映射关系;
  • -h,--hostname:设置容器主机名;
  • -e,--env:设置环境变量;
  • --env-file:设置读取环境变量到容器内的文件;
  • -m,--memory:限制容器内应用使用的内存;
  • --link:添加指向另一个容器的链接;
  • --network:指定容器的网络连接类型;
  • --restart:设置容器退出时的重启策略;
  • --rm:设置容器退出时自动删除容器以及关联的匿名卷;
  • -v,--volume:绑定挂载一个卷;
  • -w,--workdir:设置容器的默认工作目录;
  • -a, --attach:是否绑定到标准输入(STDIN)、输出(STDOUT)或错误(STDERR) ;
  • --device:映射物理机上的设备到容器内;
  • --dns:设置自定义DNS服务器;
  • --dns-option:设置自定义DNS选项;
  • --dns-search:设置自定义DNS搜索域;
  • --domainname:设置容器NIS域名;
  • --entrypoint:定义新的命令覆盖镜像存在的入口命令;
  • --expose:设置容器暴露出来的端口或端口范围;
  • --ip:设置容器的IPv4地址;
  • --ip6:设置容器的IPv6地址;
  • -l,--label:设置容器元数据标签信息;
  • --mount:挂载文件系统到容器;
  • --privileged:授予容器内进程对宿主机系统的更高权限;
  • --cap-ad:添加Linux功能;
  • --cap-drop:删除Linux功能;
  • --cidfile:指定容器ID写入的文件。

当我们使用docker [container] run命令来创建并启动一个容器时,Docker在后台会进行如下的标准操作:

  1. 先检查本地是否存在指定的镜像,如果不存在的话就从公有仓库下载镜像;
  2. 使用镜像新建一个容器,并且启动这个容器;
  3. 分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层;
  4. 从宿主主机配置的网桥接口中桥接一个虚拟网络接口到容器中去;
  5. 从网桥的地址池中配置一个IP地址给容器;
  6. 执行用户指定的应用程序;
  7. 应用程序执行完毕后容器或被自动终止。

示例:

bash 复制代码
docker run -p 9292:9191 -it --name busybox-container hub.c.163.com/library/busybox:1.27-uclibc

示例的docker run命令使用hub.c.163.com/library/busybox:1.27-uclibc镜像创建了一个名称为"busybox-container"的容器。-p命令参数将容器的9292端口映射到宿主机的9191端口,而-it命令参数会让容器创建了一个交互式的终端会话,这个终端可以让我们直接在容器内的命令行界面输入命令。

docker [container] run命令中有一个-d参数,它可以让创建的容器在后台以守护态(Daemonized)形式运行,命令执行成功后会返回容器的ID。

示例:

bash 复制代码
docker run --name busybox-container-d -d hub.c.163.com/library/busybox:1.27-uclibc sh -c "while true; do $(echo date); sleep 1; done"

4.docker logs

docker logs [OPTIONS] CONTAINER命令是获取容器的日志。

命令格式:

bash 复制代码
docker container logs [OPTIONS] CONTAINER

命令别名:

bash 复制代码
docker logs

参数选项:

  • -d,--detach:在后台运行容器并打印容器的ID;
  • --details:显示日志的详细信息;
  • -f,--follow:持续跟踪日志输出;
  • --since:显示自某个时间戳开始以后的日志;
  • -n,--tail:仅显示最近N条容器日志内容;
  • -t,--timestamps:显示时间戳;
  • --until:显示自某个时间戳之前的日志。

示例:

bash 复制代码
docker logs busybox-container-d

示例的docker logs命令查看了" busybox-container-d"容器的日志。这个容器会不断循环的每隔1秒钟就输出当前系统的时间。

5.docker pause

docker pause CONTAINER [CONTAINER...]命令是暂停一个或多个容器内的所有进程。该命令会挂起指定容器中的所有进程。

命令格式:

bash 复制代码
docker container pause CONTAINER [CONTAINER...]

命令别名:

bash 复制代码
docker pause

示例:

bash 复制代码
docker pause busybox-container-d

在示例中我们使用docker pause命令对第3节的新建并启动运行的" busybox-container-d"容器来进行暂停操作。暂停后的容器就处于"Paused"的状态。

6.docker unpause

docker unpause CONTAINER [CONTAINER...]命令是恢复一个或多个容器内暂停的所有进程。该命令会恢复指定容器中的所有挂起的进程。

命令格式:

bash 复制代码
docker container unpause CONTAINER [CONTAINER...]

命令别名:

bash 复制代码
docker unpause

示例:

bash 复制代码
docker unpause busybox-container-d

在示例中我们使用docker unpause命令对第5节中已经暂停的" busybox-container-d"容器来进行恢复操作。

7.docker stop

docker stop [OPTIONS] CONTAINER [CONTAINER...]命令是用来停止一个或多个正在运行的容器。

命令格式:

bash 复制代码
docker container stop [OPTIONS] CONTAINER [CONTAINER...]

命令别名:

bash 复制代码
docker stop

参数选项:

  • -s,--signal:发送到停止容器的信号;
  • -t,--time:停止容器前等待的时间,单位为秒。

示例:

bash 复制代码
docker stop busybox-container-d

对于已经处于终止状态的容器,我们可以通过docker start命令来将它重新启动。

8.docker restart

docker restart [OPTIONS] CONTAINER [CONTAINER...]命令是用于重新启动一个或多个容器,该命令对正在运行的容器,会先终止后再重新启动。

命令格式:

bash 复制代码
docker container restart [OPTIONS] CONTAINER [CONTAINER...]

命令别名:

bash 复制代码
docker restart

参数选项:

  • -s,--signal:发送到停止容器的信号;
  • -t,--time:停止容器前等待的时间,单位为秒。

示例:

bash 复制代码
docker restart busybox-container-d

9.docker rm

docker rm命令是移除一个或多个已停止的容器。

命令格式:

bash 复制代码
docker container rm [OPTIONS] CONTAINER [CONTAINER...]

命令别名:

bash 复制代码
docker container remove或docker rm

参数选项:

  • -f,--force:使用SIGKILL信号强制移除正在运行的容器;
  • -l,--link:删除指定的链接;
  • -v,--volumes:移除与容器关联的匿名卷。

示例:

bash 复制代码
docker rm busybox-container

10.docker ps

docker ps命令是列出容器信息。

命令格式:

bash 复制代码
docker container ls [OPTIONS]

命令别名:

bash 复制代码
docker container list或docker container ps 或 docker ps

参数选项:

  • -a,--all:显示所有的容器(默认只显示运行的);
  • -f,--filter:根据提供的过滤条件来输出内容;
  • --format:使用自定义模板格式来设置输出;
  • -n,--last:显示最近创建的n个容器(包括所有状态的);
  • --no-trunc:不截断输出;
  • -q,--quiet:静默模式,仅显示容器ID;
  • -s,--size:显示文件总大小。

示例:

bash 复制代码
docker ps

11.docker attach

docker attach命令是进入到正在运行中的容器。当使用该命令进入到容器后,就好像在自己的终端以交互式的方式,来对容器输入命令并查看命令输出。

命令格式:

bash 复制代码
docker container attach [OPTIONS] CONTAINER

命令别名:

bash 复制代码
docker attach

参数选项:

  • --no-stdin:是否关闭标准输入,默认是保持打开;
  • --sig-proxy:是否将所有接收到的信号代理到应用进程,默认为true。

示例:

bash 复制代码
docker attach busybox-container

12.docker exec

docker exec命令是在一个运行中的容器中执行命令。

命令格式:

bash 复制代码
docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]

命令别名:

bash 复制代码
docker exec

参数选项:

  • -d,--detach:在容器后台运行命令;
  • -e,--env:设置环境变量;
  • --env-file:设置读取环境变量到容器内的文件;
  • -i,--interactive:保持标准输人打开接受用户输人命令,默认值为false;
  • --privileged:是否给执行的命令扩展权限,默认值为false;
  • -t,--tty:分配一个伪终端;
  • -u,--user:指定执行命令的用户名或用户ID,组名或组ID;
  • -w,--workdir:设置执行命令的默认工作目录。

示例:

bash 复制代码
docker exec -it busybox-container echo 'hello word!'

13.docker stats

docker stats命令是实时显示容器资源使用情况的统计信息,包括:CPU、内存、网络I/O等。

命令格式:

bash 复制代码
docker container stats [OPTIONS] [CONTAINER...]

命令别名:

bash 复制代码
docker stats

参数选项:

  • -a,--all:显示所有容器的资源使用情况(默认是只显示运行容器的);
  • --format:使用自定义模板格式来设置输出;
  • --no-stream:只展示当前最新的一条容器资源使用情况,不再实时更新;
  • --no-trunc:不截断输出(如:容器ID会全部显示)。

示例:

bash 复制代码
docker stats busybox-container

14.docker container inspect

docker container inspect命令是显示一个或多个容器的详细信息。

命令格式:

bash 复制代码
docker container inspect [OPTIONS] CONTAINER [CONTAINER...]

参数选项:

  • -f,--format:使用自定义模板格式来设置输出;
  • -s,--size:显示文件的总大小。

示例:

bash 复制代码
docker container inspect busybox-container

15.docker kill

docker kill命令是强制退出正在运行的容器。

命令格式:

bash 复制代码
docker container kill [OPTIONS] CONTAINER [CONTAINER...]

命令别名:

bash 复制代码
docker kill

参数选项:

  • -s,--signal;发送到容器的信号。

示例:

bash 复制代码
docker kill busybox-container

16.docker container prune

docker container prunee命令是移除所有已经停止的容器。

命令格式:

bash 复制代码
docker container prune [OPTIONS]

参数选项:

  • --filter:提供过滤的筛选值;
  • -f,--force:不提示是否进行确认。

示例:

bash 复制代码
docker container prune

17.docker commit

docker commit命令是根据容器的更改来创建一个新的镜像。

命令格式:

bash 复制代码
docker container commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

命令别名:

bash 复制代码
docker commit

参数选项:

  • -a,--author:提交的镜像作者;
  • -c,--change:使用Dockerfile指令来创建的镜像;
  • -m,--message:提交时的注释文字说明;
  • -p,--pause:执行commit命令时,是否将容器暂停,默认值是true。

示例:

bash 复制代码
docker commit container_busybox image_busybox
相关推荐
七夜zippoe3 小时前
压缩与缓存调优实战指南:从0到1根治性能瓶颈(四)
运维·docker·容器
java_logo5 小时前
Docker 部署 MinerU 教程:打造你的本地 PDF 智能处理中心
linux·运维·人工智能·docker·ai·容器·aigc
LCG元5 小时前
Docker容器化实战:将你的SpringBoot应用一键打包部署(三)-配置告警和自动扩缩容
后端·docker
技术杠精6 小时前
Docker Swarm之Java 应用部署与平滑更新
java·docker·容器
三口吃掉你16 小时前
Docker安装Elasticsearch、kibana、IK分词器
elasticsearch·docker·kibana·ik分词器
fly五行17 小时前
Windows 系统下使用 Docker 安装 Milvus 向量数据库
windows·docker·milvus
爱宇阳17 小时前
离线环境下运行 Docker 容器编排指南
docker·容器·eureka
Java陈序员19 小时前
免费开源!一款操作 MySQL 和 MariaDB 的 Web 界面工具!
mysql·docker·php·mariadb
梁正雄19 小时前
9、dockerfile
docker·dockerfile·dockerfile基础用法
panplan.top19 小时前
Tornado + Motor 微服务架构(Docker + 测试 + Kubernetes)
linux·python·docker·微服务·k8s·tornado