本文最后更新于 2024年12月8日
因阿里云加速服务调整,从镜像仓库中拉取镜像时,需要科学上网访问DockerHub
1.容器
Docker容器是基于Docker镜像创建的一个运行实例。它是应用程序运行的隔离环境,类似于虚拟机,但更轻量和高效。与虚拟机相比,容器不需要包含操作系统的完整内核,而是共享宿主机的操作系统内核。容器只包含应用运行所需的最小依赖项,从而大幅降低资源占用。容器之间相互隔离,每个容器拥有自己的文件系统、进程空间、网络接口等。
容器启动速度极快(通常是秒级),因为它无需加载完整的操作系统。
2.容器常见操作
2.1 新建并启动容器
容器由镜像实例化启动,启动容器时会先寻找镜像,如果本地没有容器会向远端拉取。
启动容器的方式有很多种。
1.前台启动容器
2.后台运行容器
即启动守护式容器,返回容器ID。容器后台-d
运行时,必须有一个前台进程,如果容器运行的命令不是那些一直挂起的命令,例如top
,tail
,容器会自动退出,这个是docker机制的问题,例如nginx,正常情况下启动服务只需要启动对应的service,systemctl start nginx
,但是这样做nginx在后台运行,导致docker前台没有运行的应用,docker认为无事可做,便会退出。最佳的解决方案是让你的应用以前台进程的方式运行。
3.以交互模式运行容器,通常配合-t
使用
4.为容器重新分配一个伪终端,通常配合-i
使用
5.以交互式建立容器
指定运行的终端/bin/bash
如果镜像的默认命令(通过 CMD 或 ENTRYPOINT 指定)是交互式的Shell(例如 /bin/bash 或 /bin/sh),那么bash/bin/bash
可以省略,Docker会直接运行默认命令,比如ubuntu默认会运行/bin/bash
输出结果:容器ubuntu开始运行,并自动切换到容器中的/bin/bash root@c067a19d427c:/#
6.随机端口映射
7.指定端口映射,有以下四种形式
ip:hostPort:containerPort
将容器内的 containerPort 映射到指定主机的 hostPort,并绑定到特定的 IP 地址。
ip::containerPort
将容器内的 containerPort 映射到随机的主机端口,并绑定到特定的 IP 地址
hostPort:containerPort
将容器内的 containerPort 映射到主机的 hostPort,不指定绑定 IP。
containerPort
将容器内的 containerPort 映射到主机的随机端口,绑定到主机的所有网络接口。
8.运行并为容器指定一个新名字
9.环境变量
使用-e
指定环境变量,这些环境变量可以被容器内的应用程序所访问到
指定多个
2.2 查看运行的容器
正在运行的
现在和历史运行过的容器
最近n个运行过的容器
只显示容器编号
不截取输出
2.3 容器的停止
1.停止容器
2.启动容器
3.重启容器
4.立刻停止容器
2.4 操作运行中的容器
1.docker attach
进入容器
进入一个正在运行的容器,附加到其主进程的标准输入、输出和错误流,看到容器中运行的程序的实时输出,并直接与容器的主进程交互,例如正在运行top的容器,可以看到top实时输出,还可以输入命令和top交互。
2.docker exec -it
进入容器
进入一个正在运行的容器,在运行的容器中启动一个新进程
,通常是交互式Shell,不依赖容器的主进程,可以独立运行,不影响容器的主进程运行。
如果容器指定了默认shell,那么bash部分/bin/bash
可省略。
3.exit
停止并退出容器
当你进入容器后,完成任务并希望关闭容器时使用,当通过docker exec或docker attach进入容器后,输入exit
会停止运行的Shell进程,如果这个进程是容器的主进程(例如一个 Bash 会话或主要的服务进程),exit 会直接停止整个容器。
4.Ctrl+P+Q
停止并退出容器
从一个已附加的容器中退出交互界面,同时容器继续运行。当需要离开容器的交互环境,但希望容器继续在后台运行时使用,使用 docker attach 容器ID
附加到容器时,按下Ctrl+P,然后按 Q,会退出到宿主机终端,但是容器仍在运行。
2.5 删除容器
1.删除容器
2.强制删除容器
3.删除全部容器
2.6 提交容器
通过commit将容器提交为一个新的镜像,具体语法是docker commit -m "描述" -a="作者" 容器ID 新镜像名称:标签
2.7 查看容器的日志
t
时间戳
f
跟随最新日志
--tail
数字,显示最后多少条
2.8 查看容器内运行的进程
2.9 查看容器内部的细节