Docker 常用命令

部分文档参考博主:
保护我方胖虎 :(https://blog.csdn.net/leilei1366615/article/details/106267225
GritYearner: (https://blog.csdn.net/GritYearner/article/details/133679403)

1. 安装Docker

可以直接参看官网,docker安装(https://docs.docker.com/engine/install/ubuntu/
ubuntu22.04的docker安装教程

1. 设置 Docker 的apt存储库。
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update


2. 安装 Docker包
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3. 通过运行映像来验证 Docker Engine 安装是否成功 hello-world
sudo docker run hello-world



2. 安装GPU驱动

(1)安装教程:
docker的英伟达驱动:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

(2)测试GPU是否能用
ubuntu22.04镜像,并创建一个运行一次即删除的容器,注意cuda版本
其他版本ubuntu,可以从docker hub上搜索nvidia/cuda

sudo docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi

3. 构建ROS2的容器

1. 使用的鱼香博主的ROS构建 鱼香博主的网站 ,对于构建ROS2十分方便,一键安装。

sudo docker run  -dit \
--gpus all \
-e NVIDIA_DRIVER_CAPABILITIES=all \   #设置 NVIDIA 驱动程序的能力标识,允许使用所有 GPU 驱动功能,如图形、视频编码、解码等。
--name=melodic_docker2 \              #为容器指定一个名称 melodic_docker2,以便于识别和管理。      
-v /home/hw/test1:/home/hw/test1 \  #将主机目录 /home/hw/test1 挂载到容器内的相同路径 /home/hw/test1,实现主机和容器之间的文件共享。
-v /tmp/.X11-unix:/tmp/.X11-unix \ #将主机的 X11 socket 文件夹挂载到容器内,允许容器内的 GUI 应用程序与主机的 X11 服务通信,实现图形界面显示。
-v /dev/dri:/dev/dri \  #挂载主机的 Direct Rendering Infrastructure (DRI) 设备,使得容器可以直接访问主机的 GPU 渲染设备。
--device=/dev/snd \   #将主机的音频设备映射到容器内,允许容器内应用访问音频设备进行输入输出。
--device=/dev/dri/renderD128 \ #具体映射一个 GPU 渲染设备(/dev/dri/renderD128),通常用于确保容器可以访问特定的渲染设备。
-e DISPLAY=unix$DISPLAY \  #设置环境变量 DISPLAY,用于 GUI 应用程序与 X11 服务通信。这通常设置为主机的显示环境,以便在容器中运行 GUI 程序。
-w /home/hw/test1 fishros2/ros:melodic-desktop-full #设置容器启动后的工作目录为 /home/hw/test1。 指定要运行的 Docker 镜像,fishros2/ros:melodic-desktop-full 是基于 ROS Melodic 的桌面完全版镜像,包含了 ROS 的完整桌面环境及相关工具。

换其他镜像,只需要改最后一行位置即可

sudo docker run  -dit \
--gpus all \
-e NVIDIA_DRIVER_CAPABILITIES=all \
--name=melodic_docker2 \
-v /home/hw/test1:/home/hw/test1 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v /dev/dri:/dev/dri \
--device=/dev/snd \
--device=/dev/dri/renderD128 \
-e DISPLAY=unix$DISPLAY \
-w /home/hw/test1 fishros2/ros:melodic-desktop-full

-v:是把宿主机的目录挂载到容器中,/home/用户名 需要自己需要访问的路径。最好不要访问本机的主目录
–name:是容器名称,修改为自己的,需要记住后面还要用到

2. 运行docker 写入ROS的环境变量

docker exec -it melodic_docker2 /bin/bash -c "echo -e '
source /opt/ros/melodic/setup.bash' >> ~/.bashrc"

docker exec -it melodic_docker2 /bin/bash #进入终端
  1. 测试rviz 能否打开
#开两个终端
roscore
rviz

4. 将现有容器保存为镜像

ros2_nightly_docker 是你想要保存为镜像的容器名称。
my_ros2_image 是你想要创建的新镜像的名称。你可以根据需要替换成其他有意义的名称。

sudo docker commit ros2_nightly_docker my_ros2_image  

sudo docker images #查看已保存的镜像列表

5. 基本常识

  1. 镜像网站:https://hub.docker.com/search?q=&type=image

(一)docker 基础命令

systemctl start docker  #启动docker
systemctl stop docker   #关闭docker
systemctl restart docker #重启docker
systemctl enable docker  #docker设置随服务启动而自启动

systemctl status docker #查看docker运行状态

docker version          #查看docker 版本号信息
docker info            #查看docker 版本号信息
  

(二)docker 镜像命令

docker image ls         # 列出已经下载下来的镜像
docker system df        #查看镜像、容器、数据卷所占用的空间
docker image ls ubuntu   #根据仓库名列出镜像 ubuntu就是仓库名
docker image ls ubuntu:18.04  #列出特定的某个镜像,也就是说指定仓库名和标签

拉取镜像
docker pull ubuntu:22.04  #拉取官方的ubuntu 22.04镜像

搜索镜像
docker search 镜像名
docker search ubuntu  #要搜索Ubuntu 相关的镜像,如果需要特定服务或应用程序的镜像,如 Nginx、MySQL、PostgreSQL等,可以选择对应的镜像。


删除镜像 ------当前镜像没有被任何容器使用才可以删除

#1. 删除一个
docker rmi -f 镜像名/镜像ID
#2. 删除多个 其镜像ID或镜像用#用空格隔开即可 
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID
#3.删除全部镜像  -a 意思为显示全部, -q 意思为只显示ID
docker rmi -f $(docker images -aq)
#4.强制删除镜像
docker image rm 镜像名称/镜像ID

保存镜像 将保存为tar 压缩文件
docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
docker save tomcat -o /myimg.tar

加载镜像,从一个本地的 tar 文件中加载镜像
docker load -i 镜像保存文件位置


镜像标签
#不同的标签可以用于标识同一个镜像的不同版本。
#例如,ubuntu:18.04 和 ubuntu:20.04 分别表示 Ubuntu 18.04 和 Ubuntu 20.04 版本的镜像

(三)docker 容器命令

docker ps  #查看正在运行容器列表
docker ps -a   #查看所有容器 -----包含正在运行 和已停止的

运行交互式的容器
# 为容器指定名称 my_ubuntu_container,ubuntu:22.04:使用的镜像
docker run -it --name my_ubuntu_container ubuntu:22.04  
# -i:交互模式(interactive),保持标准输入打开。
# -t:伪终端(pseudo-TTY),分配一个伪终端。

后台运行容器
```bash
docker run -d --name my_ubuntu_container ubuntu:22.04 sleep infinity

进入运行中的容器
docker exec -it my_ubuntu_container bash  #my_ubuntu_container 容器名

停止、删除和重启容器
docker stop my_ubuntu_container #停止docker stop 容器名/容器ID
docker rm  容器ID/容器名    #删除
docker restart 容器ID/容器名   #重启容器


容器文件拷贝 
#从容器内 拷出
docker cp 容器ID/名称: 容器内路径  容器外路径  
#容器名称是 my_container,你想将容器中的 /root/example.txt 文件拷贝到主机的当前目录:
docker cp my_container:/root/example.txt ./

#从外部 拷贝文件到容器内
docker  cp 容器外路径 容器ID/名称: 容器内路径
#将主机上的 /tmp/myfolder 目录拷贝到容器的 /root/ 目录:
docker cp /tmp/myfolder my_container:/root/

更换容器名
docker rename 容器ID/容器名 新容器名

-p 8888:6379 解析 将容器内部的 6379端口与docker 宿主机(docker装在哪台服务器 哪台服务器就是宿主机)8888 端口进行映射 那通过外部访问宿主机8888端口 即可访问到 docker 容器 6379 端口了

容器端口与服务器端口映射
-p 宿主机端口:容器端口

docker run -itd --name redis002 -p 8888:6379 redis:5.0.5 /bin/bash

进入容器内部,修改其配置文件

进入容器方式一 
docker exec -it 容器名/容器ID /bin/bash

#进入 前面的 redis001容器   
docker exec -it redis001 /bin/bash

进入容器方式二 —推荐使用 exec 方式
docker attach 容器名/容器ID

从容器内部退出到宿主服务器
exit  #使用 Ctrl + D 快捷键退出容器  Ctrl + p + q

(四)数据挂载

将卷挂载到容器

docker volume create myvolume  #创建卷,myvolume: 这是卷的名称。
 #运行容器并指定镜像 将名为 myvolume 的卷挂载到容器内的 /data 目录。
 #本地镜像没有标签 就直接redis 即可。
docker run -itd --name mycontainer -v myvolume:/data redis:5.0.5

(五)提交镜像

6. 拉取Docker镜像

docker pull osrf/ros2:nightly-rmw-nonfree   #拉取镜像
docker run -it --name my_ubuntu_container 851d044d63e7 #运行镜像

 
docker exec -it <container_id_or_name> /bin/bash  #再次进入交互式界面

source /opt/ros/humble/setup.bash

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值