docker使用速查#
参考:https://docs.docker.com/engine/
install#
- debian,ubuntu
- 其他安装方法参考官方 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 镜像管理#
导入 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
容器内常用配置#
- 常用工具安装
- 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 可以不用手动设置
常见问题#
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;