Skip to content

docker使用速查#

参考:https://docs.docker.com/engine/

install#

  • debian,ubuntu
snap install docker 

# install snap
apt update && apt install snapd
  • 其他安装方法参考官方 install 手册: https://docs.docker.com/engine/install/debian/

container 容器管理#

# 查看运行中的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 启动/停止/重启容器
docker start <容器名/ID>
docker stop <容器名/ID>
docker restart <容器名/ID>

# 进入运行中的容器
docker exec -it <容器名/ID> /bin/bash
docker attach <容器名/ID>

# 删除容器
docker rm <容器名/ID>

images 镜像管理#

# 查看本地镜像
docker images

# 删除镜像
docker rmi <镜像名/ID>

导入 images#

# 从云端拉取镜像
docker pull ubuntu:18.04

# 从文件导入镜像 两种指令
docker load < ros-latest.tar
docker load --input ros-latest.tar

# 创建新镜像(基于容器)
docker commit -m="更新描述" -a="作者名" <容器ID> 用户名/镜像名:标签
# 示例:
docker commit -m="添加SSH支持" -a="admin" e218edb10161 my_ubuntu:v2

导出 images#

# 导出镜像为文件 两种指令
docker save -o ros-latest.tar ros:latest
docker save ros:latest > ros-latest.tar

# 压缩镜像文件
gzip -c ros-latest.tar > ros-latest.tar.gz

容器创建运行#

docker run -itd --privileged --shm-size=1g -v /home/t/Desktop/workspace:/root/workspace  --ulimit memlock=-1 --ulimit stack=67108864 --name ros-dev -p 2202:22 ubuntu:20.04 
docker run -itd --privileged --shm-size=1g -v /home/t/Desktop/workspace:/root/workspace  --ulimit memlock=-1 --ulimit stack=67108864 --name ros-dev -p 127.0.0.1:2202:22 ubuntu:20.04  /bin/bash  -c "service ssh start && /bin/bash"
  • docker run:创建并运行一个新容器
  • -itd :
    • -i:交互模式,保持 STDIN 打开
    • -t:分配一个伪终端(pseudo-TTY)
    • -d:后台运行(detached mode)
  • --privileged : 给容器完全的 root 权限,可以访问主机所有设备
    • 有一定的安全风险,通常只用于需要访问硬件的场景
  • --shm-size=1g : 设置共享内存大小为 1GB
  • -v /home/t/Desktop/workspace:/root/workspace :
    • 将主机目录 /home/t/Desktop/workspace 挂载到容器的 /root/workspace
  • --ulimit memlock=-1 : 内存锁定限制设为无限制
  • --ulimit stack=67108864 : 设置堆栈大小为 64MB(64 * 1024 * 1024 = 67108864 byte
  • --name ros-dev : 容器命名为 ros-dev
  • -p 127.0.0.1:2202:22 :
    • 端口映射:主机 127.0.0.1:2202 端口 → 容器 22 端口(SSH)
    • 只绑定到本地回环地址(127.0.0.1),外部无法访问
  • ubuntu:20.04 : 使用 ubuntu 20.04 镜像
  • /bin/bash -c "service ssh start && /bin/bash" :
    • 启动 SSH 服务
    • 运行 bash

启动容器后,可以通过 SSH 连接:ssh -p 2202 root@localhost


容器内常用配置#

  • 常用工具安装
apt update && apt install -y  vim net-tools  openssh-server  curl  wget
  • SSH 服务配置
# 允许root通过密码登录
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# 设置root密码为123456
echo "root:123456" | chpasswd

# 启动SSH服务
service ssh start
  • 设置图形界面转发
    • 要在主机运行 xserver 服务器
    • 使用 mobaXterm 可以不用手动设置
# 设置显示环境变量(主机IP:显示号)
export DISPLAY=172.17.0.1:0.0

常见问题#

  • open ./.docker_temp_3815110692: permission denied
    • 检查权限,检查硬盘空间
    • 使用其他指令:sudo docker save my_image > my_image.tar
  • windows docker
    • windows docker引擎 在一个虚拟机运行(wsl),docker运行镜像时将需要的端口映射到wsl上,外部通过访问docker引擎的ip端口(已映射)去访问docker创建的容器;
    • 建议使用 vmware 创建虚机机再在里面运行docker,不直接使用 windows docker;