Published on

docker 指令

Authors
  • avatar
    Name
    MissTree
    Twitter

目录

创建容器

#我们直接启动命令, --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>