- Published on
docker 指令
- Authors

- Name
- MissTree
目录
创建容器
#我们直接启动命令, --net bridge,就是docker0(默认)
docker run -d -P --name=nickName --net bridge tomcat
docker run[OPTIONS]IMAGE[COMMAND][ARG...]
参数【OPTIONS】说明:
--name:为容器指定一个名称
-d:后台运行容器并返回容器ID,也即启动守护式容器
-i:以交互模式(interactive)运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端(tty),通常与-i同时使用。也即启动交互式容器(前台有伪终端,等待交互)
-e:为容器添加环境变量
-P:随机端口映射。将容器内暴露的所有端口映射到宿主机随机端口
-p:指定端口映射
-p指定端口映射的几种不同形式:
-p hostPort:containerPort:端口映射,例如-p 8080:80
-p ip:hostPort:containerPort:配置监听地址,例如 -p 10.0.0.1:8080:80
-p ip::containerPort:随机分配端口,例如 -p 10.0.0.1::80
-p hostPort1:containerPort1-p hostPort2:containerPort2:指定多个端口映射,例如-p 8080:8
0 -p 8888:3306
#docker0特点:默认,域名不能访问,--link不建议使用
下面我们自己来创建一个bridge。
docker network create --driver bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 testnet
docekr network ls
docker network inspect 网卡名字 #查看网卡详细信息
docker run -d -P --name=nickName01 --net=testnet tomcat:7
docker run -d -P --name=nickName02 --net testnet tomcat:7
docker exec -it nickName01 ping -c 3 IP
docker exec -it nickName02 ping -c 3 nickName02
#提示,ping -c可以自定义ping的次数
进入容器
# 进入容器并交互可以操作 进入容器终端
docker exec -it nickName /bin/bash
# 进入容器并且在退出的时候删除
docker run -it --rm tomcat:9.0
# 进入容器
docker attach nickName
docker attach containerId
# 进入容器不交互,可以操作执行容器内的命令
docker exec -it nickName cat /etc/hosts
容器拷贝
# 拷贝文件到容器
docker cp 本地文件 容器ID:容器内路径
# 拷贝文件到本地
docker cp 容器ID:容器内路径 本地路径
清空本机docker环境
docker rm -f $(docker ps -aq)
docker rmi -f $(docker images -aq) # 清空包含正在运行的镜像
常用命令
- [ 查看版本]
docker version
- [ 查看Docker概要信息]
docker info - [ 查看Docker总体帮助文档]
docker--help - [ 查看docker具体命令帮助文档]
docker具体命令--help - [ 启动Docker]
systemctl start docker - [ 停止Docker]
systemctl stop docker - [ 重启Docker]
systemctl restart docker - [ 查看状态]
systemctl status docker - [ 开机启动]
systemctl enable docker - [ 查看所有镜像 ]
docker images- -a:列出所有镜像(含历史镜像)
- -q:只显示镜像ID
- -f:过滤
- [ 搜索镜像 ]
docker search 镜像名称- -f:过滤
- --limit 数量:只列出N个镜像,默认25个
- [ 查看镜像/容器/数据卷所占的空间 ] docker system df
- [ 删除镜像 ] docker rmi 镜像1 镜像2 镜像3
- [ 删除全部镜像 ]
docker rmi -f ${docker images -qa} - [ 列出运行的所有容器 ]
docker ps [option]- -a:列出当前所有正在运行的容器+历史上运行过的
- -l:显示最近创建的容器。-n:显示最近n个创建的容器。-q:静默模式,只显示容器编号。
- [ 查看容器列表]
docker container ls [option]- -a:显示所有容器,包括已停止的容器
- -l:显示最近创建的容器
- -n:显示最近n个创建的容器
- [ 启动已停止运行的容器]
docker start 容器ID或者容器名 - [ 重启容器]
docker restart 容器ID或容器名 - [ 停止容器]
docker stop 容器ID或容器名
- [ 强制停止容器]
docker kill 容器ID或容器名 - [ 删除已经停止的容器]
docker rm 容器ID或容器名 - [ 强制删除正在运行的容器]
docker rm -f 容器ID或容器名 - [ 一次删除多个容器实例]
docker rm -f ${docker ps-a-q}或者docker ps-a-q|xargs docker rm
- attach:将本地的标准输入、输出和错误流附加到正在运行的容器,允许你实时查看容器内的运行输出,并与容器进行交互。
docker attach 容器ID
- commit:从容器的更改创建一个新的镜像,通常在你对容器进行了一些配置更改后,想将这些更改保存为一个新的镜像时使用。
docker commit 容器ID 新镜像名:版本号docker commit -m "提交的说明" -a "作者" 容器ID 新镜像名:版本号和git提交类似
- [ 退出容器 ]
exit - top:显示容器内正在运行的进程,类似于在宿主机上使用top命令查看进程信息,有助于了解容器内应用程序的运行状态。
docker top 容器ID
- wait:阻塞直到一个或多个容器停止,然后打印它们的退出代码,可用于脚本中等待容器完成任务后再执行后续操作。
docker wait 容器ID
- update:更新一个或多个容器的配置,例如更新容器的资源限制、重启策略等,而无需重新创建容器。
docker update 容器ID
- stats:显示一个或多个容器的实时资源使用统计信息,如 CPU 使用率、内存使用量、网络带宽等,用于监控容器的性能。
docker stats所有容器统计信息docker stats 容器ID
- save:将一个或多个镜像保存为一个 tar 归档文件(默认输出到标准输出),可用于备份镜像或在不同环境间传输镜像。
docker save 镜像ID > 导出文件名
- rename:重命名一个容器,便于更好地识别和管理容器。
docker rename 原容器ID 新容器ID
- load:从 tar 归档文件或标准输入加载一个镜像,常用于从离线存储或其他地方导入镜像。
docker load < 镜像文件.tar>
- inspect:查看容器的详细信息,包括配置、状态、网络等。
docker inspect 容器ID
- history:查看容器的历史记录,包括构建镜像的命令和步骤。
docker history 容器ID
- export:将容器的文件系统导出为一个 tar 归档文件,便于备份或在其他地方导入。
docker export 容器ID > 导出文件名
- import:从一个 tar 归档文件中导入镜像,通常用于将备份的镜像导入到本地。
docker import 导入文件名 镜像名:版本号
- logs:查看容器的日志输出,通常用于调试和查看容器的运行状态。
docker logs 容器ID
- pause:暂停一个或多个正在运行的容器,使其暂时停止运行,但不停止容器本身。
docker pause 容器ID
- port:查看容器的端口映射情况,显示容器内部端口与宿主机端口的映射关系。
docker port 容器ID 容器内部端口
- events:从 Docker 服务器获取实时事件,例如容器的启动、停止、镜像的拉取等事件,可用于监控 Docker 环境的动态变化。
docker events
- diff:检查容器文件系统上文件或目录的更改,帮助你了解容器内文件系统的变动情况。
docker diff 容器ID
- create:创建一个新的容器,但不启动它,你可以在创建时指定容器的各种配置,如挂载卷、暴露端口等。
docker create 镜像ID或镜像名
命令组合
- [ 启动容器]
docker run 镜像ID或镜像名docker run --name sentry --restart always --v $SENTRY_HOME/config:/etc/sentry --v $SENTRY_HOME/logs:/var/log/sentry --v $SENTRY_HOME/data:/var/opt/sentry sentry
- [ 进入容器]
docker exec 容器ID或容器名 /bin/bash
- [从dockerfile构建一个镜像]
docker build -t 镜像名:版本号 .-t:指定镜像的名称和版本号。.:表示 Dockerfile 文件所在的当前目录。
- [拉取镜像]
docker pull 镜像名:版本号 - [推送镜像]
docker push 镜像名:版本号 - [查看镜像]
docker images - [搜索镜像]
docker search 镜像名
管理命令
- builder:管理构建相关操作,例如管理构建缓存、构建器实例等,有助于优化构建过程和管理构建环境。
- buildx:Docker Buildx 是一个构建工具,它扩展了docker build的功能,支持多平台构建等高级特性,让你能够为不同的操作系统和架构构建镜像。
- compose:Docker Compose 用于定义和运行多容器的 Docker 应用程序。通过一个docker - compose.yml文件,你可以配置应用程序的各个服务,然后使用一条命令启动、停止或管理整个应用栈。
- container:用于管理容器,涵盖了创建、启动、停止、删除容器等一系列操作,是容器管理的核心命令组。
- context:管理 Docker 上下文,允许你轻松切换不同的 Docker 环境,比如从本地开发环境切换到远程生产环境,每个上下文可以有不同的 Docker 守护进程连接配置。
- image:管理镜像,包括拉取、推送、标记、删除镜像等操作,是镜像管理的主要命令集合。
- manifest:用于管理 Docker 镜像清单和清单列表,特别是在处理多平台镜像时非常有用,可以将不同平台的镜像组合成一个清单列表,方便分发和使用。
- network:管理 Docker 网络,你可以创建、删除、查看网络,以及将容器连接到不同的网络,实现容器间的网络隔离和通信。
- plugin:管理 Docker 插件,包括安装、卸载、启用和禁用插件,扩展 Docker 的功能。
- trust:管理 Docker 镜像的信任,例如管理镜像签名,确保拉取和使用的镜像来源可靠且未被篡改。
- volume:管理 Docker 卷,用于在容器和宿主机之间持久化数据,包括创建、删除、查看卷,以及将卷挂载到容器中。
全局命令
- --config string:指定客户端配置文件的位置,默认位于/root/.docker,配置文件包含了 Docker 客户端的一些设置,如认证信息等。
- -c, --context string:指定用于连接 Docker 守护进程的上下文名称,这会覆盖DOCKER_HOST环境变量和通过docker context use设置的默认上下文。
- -D, --debug:启用调试模式,在调试 Docker 相关问题时,该选项会输出更多详细的日志信息,帮助定位问题。
- -H, --host list:指定要连接的 Docker 守护进程的套接字地址,例如-H tcp://192.168.1.100:2376可以连接到指定 IP 和端口的 Docker 守护进程。
- -l, --log - level string:设置日志级别,可选值为debug(调试)、info(信息)、warn(警告)、error(错误)、fatal(严重错误),默认是info,通过调整日志级别可以控制输出的日志详细程度。
- --tls:启用 TLS 连接,通过该选项可以使用安全的 HTTPS 连接与 Docker 守护进程通信,确保数据传输的安全性。当使用--tlsverify时,该选项会被隐含启用。
- --tlscacert string:指定仅信任由该 CA 签名的证书,默认路径是/root/.docker/ca.pem,用于验证 Docker 守护进程的证书。
- --tlscert string:指定 TLS 证书文件的路径,默认是/root/.docker/cert.pem,用于客户端向 Docker 守护进程进行身份验证。
- --tlskey string:指定 TLS 密钥文件的路径,默认是/root/.docker/key.pem,配合证书文件使用,用于客户端身份验证。
- --tlsverify:使用 TLS 并验证远程 Docker 守护进程的证书,确保连接的安全性。
重启容器
# 无论容器是因为什么原因退出(正常退出或异常退出),Docker 都会自动重新启动该容器。而且在主机重启后,容器也会自动启动。
docker run -d --restart=always --name my_container my_image
# 容器会在主机重启后自动启动,并且只要不是被手动停止(docker stop命令),容器就会一直保持运行状态。如果容器因为其他原因(如错误、信号等)退出,Docker 会自动重新启动它。
docker run -d --restart=unless - stopped --name my_container my_image
# 以非零退出码退出(即容器因为错误而退出)时重新启动容器,并且在主机重启后也会根据退出码情况来决定是否重新启动。可以指定一个最大重启次数。
docker run -d --restart=on - failure:3 --name my_container my_image
方式二、创建文件 /etc/systemd/system/my_container.service
[Unit]
Description=My Docker Container Service
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
Removing=yes
ExecStart=/usr/bin/docker start -a my_container
ExecStop=/usr/bin/docker stop -t 2 my_container
[Install]
WantedBy=multi - user.target
- [Unit]部分:
- Description是对服务的简单描述。
- Requires和After表示这个服务依赖于 Docker 服务,并且在 Docker 服务启动之后才会启动。
- [Service]部分:
- Type = oneshot表示这是一个一次性的服务(虽然在启动和停止容器的过程中可能会执行多次操作,但整体上看作一次性服务)。
- Removing = yes表示在服务停止后,如果容器没有被其他服务使用,就将其删除(这可以根据实际需求调整)。
- ExecStart指定了启动容器的命令,-a参数用于将容器的标准输出和标准错误输出附加到当前终端(如果需要查看容器的输出可以这样设置)。
- ExecStop指定了停止容器的命令,-t 2表示在停止容器时等待 2 秒,给容器足够的时间来优雅地停止。
- [Install]部分:
- WantedBy = multi - user.target表示这个服务应该在多用户模式下启动。
重新加载 systemd 配置
systemctl daemon-reload
systemctl enable my_container.service
方式三、删除容器
这不会删除容器挂载的数据卷,前提是你之前使用了数据卷挂载 然后按照之前的配置重新启动容器
修改容器端口
方式一:commit 方式拷贝运行,删除旧容器,和方式二换汤不换药
docker commit [options] my_container my_new_image
# 查看镜像
docker images
# 删除旧容器
docker rm my_container
# 重新运行
docker run -d -p 9000:9000 --name my_container my_new_image
方式二:删除容器,重新运行,配置要重新输入
要求是容器是挂卷的,也就是文件外挂载的方式
docker stop my_container
docker rm my_container
# 但是之前的配置要重新配置一下
docker run -d -p 9000:9000 --name my_container my_image
方式三:修改配置文件,重启容器(不推荐)
systemctl stop docker
nano /var/lib/docker/container/<container_id>/hostconfig.json
{
...
"NetworkMode": "bridge",
"PortBindings": {
"9000/tcp": [{ # 主机端口映射
"HostIp":"",
"HostPort":"9000" # 映射容器端口
}],
},
...
}
# 重启docker
systemctl start docker
docker restart <container_id>