Docker容器
Docker容器是一种轻量级、可移植且隔离的执行环境,其中应用程序及其依赖被打包为一个独立的单元,并可以在不同的计算机上进行部署和运行。
1.容器基础
容器的存在的意义就是为其中的应用提供运行环境;容器运行的意义就是为了运行其中的应用,让应用对外提供服务。
所以启动容器的目的就是为了启动并运行容器中的应用。
所以容器中的应用运行完毕后,容器就会自动终止。
2.容器创建并启动命令
理解docker run
命令用于创建容器并启动容器,同时其会运行容器中指定的应用。说一下这个指定的意思:
- 通过docker run中的【command】指令
- 通过容器镜像的DockerFile中的CMD指令指定。
容器的两种启动方式:
- 交互模式 -it
- 分离模式 -d
-
分离模式:
- 在守护进程模式下,容器以后台进程的形式运行,没有与用户进行直接交互。
- 这种启动方式适用于需要在后台持续运行的服务或应用程序,例如 Web 服务器、数据库等。
- 使用
-d
参数(或--detach
)可以在docker run
命令中指定以守护进程模式启动容器。例如:docker run -d <镜像名称>
。
-
交互模式:
- 在交互模式下,容器启动后与用户进行交互,可以接收用户的输入,并将容器的输出显示给用户。
- 这种启动方式适用于需要与容器进行交互、调试或执行特定命令的场景。
- 使用
-it
参数可以在docker run
命令中指定以交互模式启动容器。例如:docker run -it <镜像名称>
。
需要注意的是,这两种启动方式并不是互斥的,你可以根据需要同时使用它们。例如,可以在交互模式下启动容器,同时将其作为后台进程运行(使用 -d
参数)。
守护进程模式适用于需要在后台持续运行的服务或应用程序,而交互模式适用于需要与容器进行交互、调试或执行特定命令的场景。
3.容器创建命令
docker create 命令仅用于创建一个容器, 并不会启动容器。
该命令没有-d选项,因为docker create命令创建的容器都是以后台方式来运行的【必须要通过docker start[]
来启动】,除非在启动时候指定了-it。
4.容器退出命令
- exit:退出并终止当前进程
- Ctrl+p+q:退出但不终止当前进程
5.容器状态查看命令
基本命令就是docker -ps无非后面 加一写【-a,-q,-l,-n】的一些用法。
6.容器再进命令
docker exec
命令允许你在运行中的容器内部执行命令,并且可以与容器进行交互。
以下是 docker exec
命令的基本语法:
docker exec [选项] <容器ID或名称> <命令>
[选项]
是可选的参数,可以用于指定执行命令的一些选项,例如设置工作目录、以特定用户身份执行等。<容器ID或名称>
是指定要执行命令的容器的标识符。你可以使用容器的ID或名称来唯一标识容器。<命令>
是要在容器内部执行的命令。
例如,假设你有一个名为 mycontainer
的容器,并且你想在容器内执行 ls
命令来列出容器内的文件列表,你可以使用以下命令:
docker exec mycontainer ls
这将在 mycontainer
容器内执行 ls
命令,并将结果输出到你的终端。
需要注意的是,要使用 docker exec
命令,容器必须处于运行状态。如果容器已经停止,你需要先使用 docker start
命令将其启动,然后才能使用 docker exec
执行命令。
通过 docker exec
命令,你可以在正在运行的容器内部执行命令,与容器进行交互,并获取命令的输出结果。这对于调试容器、执行特定任务或与容器内的应用程序进行交互非常有用。
- 除了使用
docker exec
命令在运行中的容器内执行命令,还有另一种方式可以进入容器并与其交互,即使用docker attach
命令。
docker attach
命令允许你连接到正在运行的容器的标准输入、输出和错误流,并与容器的终端进行交互。它类似于连接到容器的终端会话,可以查看容器的输出并输入命令。
以下是 docker attach
命令的基本语法:
docker attach [选项] <容器ID或名称>
[选项]
是可选的参数,用于指定附加选项,例如指定标准输入流等。<容器ID或名称>
是指定要连接的容器的标识符。
例如,假设你有一个名为 mycontainer
的容器正在运行,并且你希望进入容器并与其交互,你可以使用以下命令:
docker attach mycontainer
这将连接到 mycontainer
容器的终端会话中,你可以在其中输入命令并查看容器的输出。
需要注意的是,使用 docker attach
命令会将你的终端直接连接到容器的终端,这意味着当你从容器的终端退出时,容器也会停止运行。因此,在大多数情况下,docker exec
命令更适合在容器内部执行临时命令,而不会影响容器的运行状态。
通过 docker attach
命令,你可以进入正在运行的容器,并与容器的终端进行交互。这对于需要持续与容器进行交互、监视其输出或手动执行命令非常有用。
简单来讲:
- exec:会新建一个新进程
- attach:不会建一个新进程
7.容器内进程查看命令
可以使用以下命令:
docker top <容器ID或名称>
<容器ID或名称>
是指定要查看进程的容器的标识符。
例如,假设你有一个名为 mycontainer
的容器正在运行,你可以使用以下命令查看容器内的进程:
docker top mycontainer
该命令将列出容器内正在运行的进程的相关信息,包括进程ID(PID)、用户、CPU使用情况、内存使用情况等。
另外,你也可以通过在宿主机上执行 docker exec
命令来在容器内执行进程查看命令。例如,要使用 ps
命令查看容器内的进程,可以执行以下命令:
docker exec <容器ID或名称> ps
这将在容器内执行 ps
命令,并显示容器内的进程列表。
8.容器日志查看命令
docker logs <容器ID或名称>
<容器ID或名称>
是指定要查看日志的容器的标识符。
例如,假设你有一个名为 mycontainer
的容器,你可以使用以下命令查看容器的日志:
docker logs mycontainer
该命令将显示容器的日志输出,包括容器内应用程序的输出、错误消息等。
默认情况下,docker logs
命令会显示容器最近的日志输出。如果你希望实时跟踪容器的日志输出,可以使用 -f
参数(或 --follow
):
docker logs -f mycontainer
这将以实时跟踪的方式显示容器的日志,当有新的日志输出时,会自动显示在终端上。
需要注意的是,某些容器内的应用程序可能会将日志输出到不同的文件或日志目录中。在这种情况下,你可以通过查看容器内的文件系统来直接访问这些日志文件。
通过使用 docker logs
命令,你可以轻松查看容器的日志输出,以便了解容器内应用程序的运行情况和错误信息。
9.容器的启停命令
- 容器启动命令的是容器本身,但容器在启动的时候同时会启动一个应用。
- 容器停止的时候停止的是容器本身,但在容器停止之前会先停止容器中所有进程的运行,也就停止了对外服务的进程。
- 暂停命令仅停止的是容器对外提供服务,容器本身没有停止运行,所以容器中的应用也就没有停止运行,只不过不能通过容器在对外提供服务了~
- 暂停、停止命令对=tomcat=容器中的tomcat进程的运行没有任何的影响,这两个命令并不会记录到tomcat的启停日志中。因为=tomcat的启停日志记录的仅是tomcat的启动,暂停,解除暂停与停止的状态变化。
10.容器的删除命令
- 容器删除:docker rm
- 镜像删除:docker rmi
这两个都可以加【-f】,表示强制删除。
但是要注意的是,镜像的强制删除,其不会强制删除UP状态的容器的镜像。
11.容器与宿主机文件传递
- 容器本身就一个文件系统
- 命令docker cp就是用于一个文件系统复制到另一个文件系统中,与容器的运行状态没有关系
- 这个docker cp命令不支持容器之间的相互复制。
12.提交容器为镜像
要将容器提交为镜像,你可以使用 docker commit
命令。该命令允许你将容器的当前状态保存为新的镜像。
以下是 docker commit
命令的基本语法:
docker commit [选项] <容器ID或名称> <目标镜像名称>
[选项]
是可选的参数,可以用于指定提交时的一些选项,如作者、标签等。<容器ID或名称>
是指定要提交的容器的标识符。<目标镜像名称>
是要创建的目标镜像的名称。
例如,假设你有一个名为 mycontainer
的容器,你想将其提交为一个名为 myimage
的新镜像,可以使用以下命令:
docker commit mycontainer myimage
这将创建一个新的镜像,名称为 myimage
,其中包含了容器 mycontainer
的当前状态。
需要注意的是,使用 docker commit
命令提交容器为镜像时,会将容器的当前状态保存为一个新的镜像层,并将其附加到已有的基础镜像上。这意味着新镜像将继承基础镜像的所有内容,并包含容器中的修改。
通过使用 docker commit
命令,你可以方便地将容器保存为一个新的镜像,并在需要时使用该镜像来创建相同的容器或与其共享。然而,建议在可能的情况下,使用 Dockerfile 和构建过程来创建镜像,以便更好地进行版本控制和自动化管理。
这个命令生成的镜像是包含原镜像的所有分层历史记录的。
13.导入/导出容器
要导入和导出容器,可以使用 docker export
和 docker import
命令。
-
导出容器:
使用
docker export
命令可以将容器保存为一个导出的 tar 文件。该文件将包含容器的文件系统快照以及相关元数据。docker export <容器ID或名称> > 容器导出文件名.tar
例如,要将名为
mycontainer
的容器导出为mycontainer.tar
文件,可以运行以下命令:docker export mycontainer > mycontainer.tar
这将将容器导出为
mycontainer.tar
文件。 -
导入容器:
使用
docker import
命令可以将导出的容器文件导入为一个新的镜像。docker import 容器导出文件名.tar 新镜像名称:标签
例如,要将名为
mycontainer.tar
的导出文件导入为一个名为myimage
的新镜像,可以运行以下命令:docker import mycontainer.tar myimage:latest
这将创建一个新的镜像
myimage
,使用latest
标签,其中包含从导出文件中导入的容器内容。
需要注意的是,导出的容器文件(tar 文件)只包含容器的文件系统快照,而不包括容器的元数据(例如容器的名称、网络配置等)。因此,在导入容器时,你需要手动指定镜像的名称和标签。
导出和导入容器主要用于简单的容器迁移或共享,但并不适用于复杂的应用程序或包含多个容器的环境。对于更复杂的场景,建议使用 Docker Compose 或其他工具来定义和管理容器化应用程序的组合。
14.docker system命令集
docker system
命令用于管理 Docker 系统的各个方面,包括镜像、容器、数据卷和网络等。下面是一些常用的 docker system
命令:
-
docker system df
:显示 Docker 系统使用的磁盘空间情况,包括镜像、容器和数据卷的占用空间。 -
docker system prune
:清理不再使用的镜像、容器、数据卷和网络,释放磁盘空间。可以使用-a
参数来删除所有未使用的资源。 -
docker system events
:实时显示 Docker 系统的事件流,包括容器的创建、启动、停止等操作。 -
docker system info
:显示 Docker 系统的详细信息,包括版本、操作系统、内核版本等。 -
docker system logout
:从 Docker 注册表中注销。 -
docker system prune -a
:清理所有未使用的资源,包括未使用的镜像、容器、数据卷和网络。
15.总结
上面就是docker常用的一些东西。
ok,我已讲完。