Docker常用命令

制作镜像

bash 复制代码
# 登录远程仓库
docker login --username=xxxx abc.xyz.com
# 基于dockerfile构建镜像,制作名称为abc.xyz.com/test/imagename的镜像
docker build  -f Dockerfile  -t abc.xyz.com/test/imagename:latest .
# 检查镜像是否存在
docker images|grep imagename
# 提交镜像信息,041b8c220e67是镜像ID
docker commit -m "Add xx功能" -a "Docker xxxx" 041b8c220e67 abc.xyz.com/test/imagename:latest
# 打tag ,97813d54f7ea3bb30a198e8为commit之后结果
docker tag 97813d54f7ea3bb30a198e8 abc.xyz.com/test/imagename:v1
# 提交到远程仓库
docker push abc.xyz.com/test/imagename:v1

启动容器

一般使用docker run启动容器

bash 复制代码
 docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
 # 示例:docker run -ti abc.xyz.com/test/imagename:v1 /bin/bash
  • 可以使用[COMMAND][ARG...]位置参数来指定容器启动时要运行的命令和参数。例如,用/bin/bash 在容器中启动交互式 shell(镜像在 上有可执行文件)。
  • 当启动容器时,容器默认在前台运行。如果想在后台运行容器,可以使用 --detach(或-d) 标志。这将启动容器而不占用终端窗口。
bash 复制代码
docker run -d IMAGE

容器网络

容器默认启用网络,并且可以建立传出连接。如果正在运行多个需要相互通信的容器,则可以创建自定义网络并将容器附加到网络。

当多个容器连接到同一自定义网络时,可以使用容器名称作为 DNS 主机名相互通信。以下示例创建一个名为 my-net 的自定义网络,并让两个容器链接到**my-net** 网络

bash 复制代码
docker network create my-net
 docker run -d --name web --network my-net nginx:alpine
 docker run --rm -it --network my-net busybox
/ # ping web
PING web (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.326 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.257 ms
64 bytes from 172.18.0.2: seq=2 ttl=64 time=0.281 ms
^C
--- web ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.257/0.288/0.326 ms

文件系统挂载

默认情况下,容器中的数据存储在临时的、可写的容器层中。删除容器也会删除其数据。如果想在容器中使用持久数据,可以使用文件系统挂载将数据持久存储在主机系统上。文件系统挂载还可以在容器和主机之间共享数据。

Docker 支持两大类挂载:

  • Volume mounts
  • Bind mounts

Volume mounts非常适合持久存储容器数据以及在容器之间共享数据。Bind mounts用于在容器和主机之间共享数据。

bash 复制代码
 docker run --mount source=VOLUME_NAME,target=[PATH] [IMAGE] [COMMAND...]
# --mount标志采用两个参数:source和target。source参数的值是卷的名称, target是容器内卷的安装位置。创建卷后,写入该卷的任何数据都会保留,即使您停止或删除容器也是如此

注意:target始终是绝对路径,例如/src/docs. 绝对路径以/(正斜杠)开头。卷名称必须以字母数字字符开头,后跟a-z0-9_(下划线)、.(句点)或 -(连字符)。

退出状态

docker run提供有关容器运行失败或退出原因的信息。以下描述了不同容器退出代码值的含义。

  • 125,表明错误出在 Docker 守护进程本身。

  • 126,表示无法调用指定的包含命令。

  • 127,表示找不到包含的命令。

  • 其他退出代码表示所提供容器命令的退出代码。

资源限制

|--------------------------|--------------------------------------------------------------------------------------------------------------------------|
| 选项 | 描述 |
| -m,--memory="" | 内存限制(格式:<number>[<unit>])。Number 是一个正整数。单位可以是b、k、m或 之一g。最小为 6M。 |
| -c,--cpu-shares=0 | CPU 份额(相对权重) |
| --cpus=0.000 | CPU 数量。数字是小数。0.000 表示没有限制。 |
| --device-read-bps="" | 限制设备的读取速率(格式:<device-path>:<number>[<unit>])。Number 是一个正整数。单位可以是kb、mb、 或 之一gb。 |
| --device-write-bps="" | 限制设备的写入速率(格式:<device-path>:<number>[<unit>])。Number 是一个正整数。单位可以是kb、mb、 或 之一gb。 |
| --device-read-iops="" | 限制设备的读取速率(每秒 IO)(格式:)<device-path>:<number>。Number 是一个正整数。 |
| --device-write-iops="" | 限制设备的写入速率(每秒 IO)(格式:)<device-path>:<number>。Number 是一个正整数。 |
| --oom-kill-disable=false | 是否为容器禁用 OOM Killer。 |
| --oom-score-adj=0 | 调整容器的 OOM 首选项(-1000 到 1000) |
| --memory-swappiness="" | 调整容器的内存交换行为。接受 0 到 100 之间的整数。 |
| --shm-size="" | 大小为/dev/shm. 格式为<number><unit>. number必须大于0. 单位是可选的,可以是b(字节)、k(千字节)、m(兆字节)或g(千兆字节)。如果省略单位,系统将使用字节。如果完全省略大小,系统将使用64m. |

暴露端口

默认情况下,运行容器时,容器的任何端口都不会暴露给主机。在主机上无法访问容器可能正在侦听的任何端口。要使容器的端口可从主机访问,需要发布端口。

-P可以使用或标志启动容器-p以公开其端口:

  • -P(或)标志--publish-all将所有公开的端口发布到主机。Docker 将每个公开的端口绑定到主机上的随机端口。

    -P标志仅发布使用 DockerfileEXPOSE指令或--expose 命令标志明确标记为公开的端口号docker run

  • -p(或)标志--publish允许您将容器中的单个端口或端口范围显式映射到主机。

容器内的端口号(服务侦听的位置)不需要与容器外部(客户端连接的位置)发布的端口号匹配。例如,在容器内部,HTTP 服务可能正在侦听端口 80。在运行时,该端口可能绑定到主机上的 42800。要查找主机端口和公开端口之间的映射,请使用以下 docker port命令。

排查容器问题

  1. docker ps|grep imagename ,查询启动容器ID,假设为816ff73c38ad
  2. docker logs -n100 816ff73c38ad,检查容器日志
  3. docker exec -ti 816ff73c38ad /bin/bash ,临时登入容器内部检查
相关推荐
啟明起鸣几秒前
【Nginx 网关开发】上手 Nginx,简简单单启动一个静态 html 页面
运维·c语言·前端·nginx·html
Tinyundg13 分钟前
Linux系统分区
linux·运维·服务器
要做一个小太阳16 分钟前
华为Atlas 900 A3 SuperPoD 超节点网络架构
运维·服务器·网络·华为·架构
江畔何人初20 分钟前
service发现
linux·运维·云原生
life码农26 分钟前
Linux系统清空文件内容的几种方法
linux·运维·chrome
zbguolei31 分钟前
虚拟机安装Ubuntu后无法登录
linux·运维·ubuntu
UP_Continue34 分钟前
Linux--基础IO
linux·运维·服务器
驱动探索者39 分钟前
linux hwspinlock 学习
linux·运维·学习
RisunJan43 分钟前
Linux命令-logout(安全结束当前登录会话)
linux·运维·安全
qiubinwei1 小时前
kubeadm部署K8S集群(踩坑实录)
云原生·容器·kubernetes