上海网站营销,中国建设执业网站,flash网站用什么做,陕西省建设厅网站月报本文档介绍 Docker 容器的完整使用方法和常用命令。 目录 容器基础概念容器生命周期管理运行容器容器操作命令容器与宿主机交互容器网络容器数据持久化容器资源限制多容器编排最佳实践完整示例#xff1a;ROS2 Humble Desktop 容器 1. 容器基础概念 容器 是镜像的运行实例。…本文档介绍 Docker 容器的完整使用方法和常用命令。目录容器基础概念容器生命周期管理运行容器容器操作命令容器与宿主机交互容器网络容器数据持久化容器资源限制多容器编排最佳实践完整示例ROS2 Humble Desktop 容器1. 容器基础概念容器是镜像的运行实例。可以类比镜像 类Class容器 实例Instance一个镜像可以创建多个容器每个容器相互隔离、互不影响。2. 容器生命周期管理创建并启动容器# 前台运行会占用终端dockerrun镜像名# 后台运行-d 参数dockerrun-d镜像名# 指定容器名称dockerrun-d--namemycontainer镜像名查看容器状态# 查看运行中的容器dockerps# 查看所有容器包括已停止dockerps-a# 只显示容器 IDdockerps-q# 查看容器详细信息dockerinspect容器名或ID启动 / 停止 / 重启容器dockerstart容器名或ID# 启动已停止的容器dockerstop容器名或ID# 优雅停止dockerkill容器名或ID# 强制终止dockerrestart容器名或ID# 重启dockerpause容器名或ID# 暂停冻结进程dockerunpause容器名或ID# 恢复删除容器dockerrm容器名或ID# 删除已停止的容器dockerrm-f容器名或ID# 强制删除包括运行中的dockercontainer prune# 删除所有已停止的容器3. 运行容器基本运行参数参数说明-d后台运行detached-it交互式 分配伪终端常用 together-p/--publish端口映射宿主机:容器-P随机映射容器内所有 EXPOSE 端口-e设置环境变量--name指定容器名称--rm退出后自动删除容器示例# 运行 Nginx映射 80 端口后台运行dockerrun-d-p8080:80--nameweb nginx# 交互式运行进入容器 bashdockerrun-itubuntu /bin/bash# 执行单次命令后退出dockerrun--rmubuntuechoHello Docker# 带环境变量运行dockerrun-d-eMYSQL_ROOT_PASSWORDmypass mysql指定启动命令# 覆盖镜像默认的 CMDdockerrun ubuntucat/etc/os-release# 使用 entrypointdockerrun--entrypoint/bin/sh nginx4. 容器操作命令进入运行中的容器# 使用 exec推荐dockerexec-it容器名或ID/bin/bashdockerexec-it容器名或ID/bin/sh# 使用 attach会看到主进程输出CtrlPQ 退出而不停止容器dockerattach容器名或ID查看日志dockerlogs容器名或ID# 查看全部日志dockerlogs-f容器名或ID# 实时跟踪类似 tail -fdockerlogs--tail100容器名或ID# 只看最后 100 行dockerlogs-t容器名或ID# 显示时间戳查看进程和资源dockertop容器名或ID# 查看容器内进程dockerstats容器名或ID# 实时 CPU/内存 等资源使用复制文件# 从容器复制到宿主机dockercp容器名或ID:/path/in/container /local/path# 从宿主机复制到容器dockercp/local/path容器名或ID:/path/in/container5. 容器与宿主机交互端口映射# 单端口dockerrun-p8080:80 nginx# 指定宿主机 IPdockerrun-p127.0.0.1:8080:80 nginx# 多端口dockerrun-p8080:80-p443:443 nginx挂载卷Volume / Bind Mount# 命名卷由 Docker 管理dockerrun-vmydata:/app/data nginx# 绑定挂载指定宿主机路径dockerrun-v/host/path:/container/path nginx# 只读挂载dockerrun-v/host/path:/container/path:ro nginx6. 容器网络网络模式模式说明bridge默认容器通过虚拟网桥通信host使用宿主机网络栈none无网络container:name与指定容器共享网络常用网络命令dockernetworkls# 列出网络dockernetwork inspect bridge# 查看网络详情dockerrun--networkhostnginx# 使用 host 网络dockernetwork connect mynet容器# 将容器加入网络dockernetwork disconnect mynet容器创建自定义网络dockernetwork create-dbridge mynetdockerrun-d--nameweb1--networkmynet nginxdockerrun-d--nameweb2--networkmynet nginx# web1 和 web2 可通过容器名相互访问7. 容器数据持久化—创建新容器时指定唯一有效方式Volume推荐# 创建卷dockervolume create myvol# 使用卷dockerrun-vmyvol:/data nginx# 查看卷dockervolumelsdockervolume inspect myvolBind Mount绑定挂载# 宿主机路径:容器路径dockerrun-vC:\Users\Cheng\data:/app/data nginxtmpfs 挂载内存dockerrun--tmpfs/app/cache:rw,size100m nginx8. 容器资源限制# 限制内存dockerrun-m512m nginx# 限制 CPU相对权重dockerrun--cpus0.5nginx# 限制 CPU 核数dockerrun --cpuset-cpus0-1nginx# 组合dockerrun-m1g--cpus1.0--namelimited nginx9. 多容器编排Docker Compose推荐# docker-compose.yml 示例version:3services:web:image:nginxports:-8080:80volumes:-./html:/usr/share/nginx/htmldb:image:mysqlenvironment:MYSQL_ROOT_PASSWORD:secretdockercompose up-d# 启动dockercompose down# 停止并删除dockercomposeps# 查看状态10. 最佳实践一个容器一个进程便于扩展和管理使用非 root 用户提高安全性利用--rm临时测试时自动清理优先使用exec进入容器不干扰主进程数据持久化用 Volume避免数据随容器删除丢失合理设置资源限制防止单容器占满宿主机使用.dockerignore减小镜像体积11. 完整示例ROS2 Humble Desktop 容器本示例用于搭建带图形界面的 ROS2 开发环境让容器能访问宿主机上的显示、硬件和资源。仅适用于 Linux 宿主机依赖 X11、/dev 等。脚本代码#!/bin/bashxhost local:root2/dev/nulldockerrun-it--rm\--nameros2-humble\--hostname$(hostname)\--userroot\--workdir/home/ros/workspace\--privileged\--networkhost\--ipchost\--pidhost\--utshost\-eDISPLAY$DISPLAY\-eQT_X11_NO_MITSHM1\-eQT_QPA_PLATFORMxcb\-eLIBGL_ALWAYS_SOFTWARE0\-eNVIDIA_VISIBLE_DEVICESall\-eNVIDIA_DRIVER_CAPABILITIESall\-eROS_DOMAIN_ID0\-eRMW_IMPLEMENTATIONrmw_fastrtps_cpp\-eTZ$(cat/etc/timezone)\-eLANGC.UTF-8\-eLC_ALLC.UTF-8\-v/tmp/.X11-unix:/tmp/.X11-unix:rw\-v$HOME/.Xauthority:/root/.Xauthority:rw\-v$HOME/workspace:/home/ros/workspace:rw\-v$HOME/.bashrc:/root/.bashrc:ro\-v$HOME/.bash_history:/root/.bash_history:rw\-v/dev:/dev:rw\-v/sys:/sys:ro\-v/proc:/proc:ro\-v/run:/run:rw\-v/tmp:/tmp:rw\-v/etc/localtime:/etc/localtime:ro\-v/etc/timezone:/etc/timezone:ro\-v/etc/machine-id:/etc/machine-id:ro\-v/var/run/dbus:/var/run/dbus:rw\-v$HOME/.gitconfig:/root/.gitconfig:ro\-v$HOME/.ssh:/root/.ssh:ro\-v$HOME/.vscode-server:/root/.vscode-server:rw\--device/dev/dri:/dev/dri:rw\--device/dev/snd:/dev/snd:rw\--device/dev/input:/dev/input:rw\--device/dev/bus/usb:/dev/bus/usb:rw\--device/dev/ttyUSB0:/dev/ttyUSB0:rw\--device/dev/ttyACM0:/dev/ttyACM0:rw\--group-add audio\--group-add video\--group-add dialout\--group-add plugdev\--group-add netdev\--ulimitcore-1\--ulimitnofile1024:524288\--ulimitmemlock-1\--ulimitstack-1\--ulimitnproc65535\--cap-addSYS_PTRACE\--cap-addSYS_ADMIN\--cap-addNET_ADMIN\--cap-addNET_RAW\--cap-addSYS_NICE\--cap-addSYS_RESOURCE\--security-optseccompunconfined\--health-cmdros2 topic list || exit 1\--health-interval30s\--health-timeout10s\--health-retries3\osrf/ros:humble-desktop-full\bash-csource /opt/ros/humble/setup.bash exec bashxhost-local:root2/dev/null参数说明分类参数作用基础--hostname $(hostname)与宿主机同名便于网络与主机名识别--user root以 root 运行便于访问硬件和系统资源--workdir /home/ros/workspace工作目录资源隔离--privileged关闭大部分安全隔离可访问所有设备--network host使用宿主机网络ROS2 多机通信更方便--ipc host共享 IPC 命名空间支持共享内存--pid host共享 PID 命名空间可看到宿主机进程--uts host共享主机名与域名图形显示-e DISPLAY$DISPLAYX11 显示地址-e QT_X11_NO_MITSHM1避免 Qt 与 X11 共享内存冲突-e QT_QPA_PLATFORMxcbQt 使用 XCB 平台插件-v /tmp/.X11-unix挂载 X11 socket用于显示输出-v $HOME/.XauthorityX11 认证NVIDIANVIDIA_VISIBLE_DEVICESall暴露全部 GPUNVIDIA_DRIVER_CAPABILITIESall使用图形与计算等全部能力ROS2ROS_DOMAIN_ID0默认 DDS 域 IDRMW_IMPLEMENTATIONrmw_fastrtps_cpp使用 Fast DDS 作为 RMW时区/语言TZ,LANG,LC_ALL与宿主机保持一致工作目录$HOME/workspace宿主机工程目录挂载到容器便于开发.bashrc,.bash_history沿用宿主机的 Shell 配置和命令历史硬件设备/dev,/sys,/proc访问设备与系统信息--device/dev/driGPU 显示输出--device/dev/snd声卡--device/dev/input键盘、鼠标等输入设备--device/dev/bus/usbUSB 设备--device/dev/ttyUSB0,/dev/ttyACM0串口、Arduino 等系统配置/etc/localtime,/etc/timezone时区同步/etc/machine-id,/var/run/dbusD-Bus 等系统服务用户配置.gitconfig,.sshGit 配置与 SSH 密钥.vscode-serverVS Code Remote 在容器内使用权限组audio,video,dialout,plugdev,netdev访问音频、视频、串口、USB、网络等ulimitcore-1,nofile1024:524288等放宽资源限制适应调试和 ROS2 需求cap-addSYS_PTRACE,SYS_ADMIN等调试、网络配置、资源管理等能力seccompunconfined关闭 seccomp 过滤健康检查--health-cmd,--health-interval等定期执行ros2 topic list检查 ROS2 是否可用xhostxhost local:root/-local:root允许/收回容器内 root 使用本地 X Server使用前注意运行前需执行xhost local:root使本地 root 可连接 X Server。脚本已包含该命令若手动执行docker run需自行先运行。确保宿主机已安装并运行 X11。若使用 Wayland可能需要配置 XWayland。--privileged与seccompunconfined会减弱隔离仅在可信环境或开发场景使用。若没有串口或 USB 设备/dev/ttyUSB0、/dev/ttyACM0等挂载可能报错可按需注释或移除。常用命令速查操作命令运行docker run -d -p 端口:端口 --name 名称 镜像查看docker ps/docker ps -a进入docker exec -it 容器 /bin/bash日志docker logs -f 容器停止docker stop 容器删除docker rm -f 容器文档基于 Docker 官方文档和常见实践整理适用于 Docker Desktop 及 Linux 环境。