#配置源
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - #安装阿里云gpg证书
cd /etc/apt/sources.list.d #在指定目录下新建docker.list文件,添加阿里云镜像源
sudo touch docker.list
sudo chmod 666 docker.list
sudo echo "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" > docker.list
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker info
# 添加docker用户组,一般已存在,不需要执行
sudo groupadd docker
# 将登陆用户加入到docker用户组中
sudo gpasswd -a $USER docker
# 更新用户组
newgrp docker
# 测试docker命令是否可以使用sudo正常使用
docker version
docker run -it -v /home/sz3/ailab/:/share --name my_container scllovewkf/opencalib:latest /bin/bash
这里的
`--name my_container` 选项为创建的容器指定了名称 `my_container`。完整解释如下:
- `docker run`:创建并运行一个容器。
- `-it`:以交互模式运行容器,并分配一个伪终端。
- `-v /home/sz3/ailab/:/share`:将宿主机的 `/home/sz3/ailab/` 目录挂载到容器的 `/share` 目录中。
- `--name my_container`:为容器指定名称 `my_container`。
- `scllovewkf/opencalib:latest`:要运行的 Docker 镜像。
- `/bin/bash`:在容器中启动一个 Bash 终端。
sudo docker run -it osrf/ros:humble-desktop
注意:每运行一次该指令,就会在本地生成一个新的容器,分配一个新的容器ID
重启和关闭容器
新开一个终端
查看本地存在的容器:
sudo docker ps -a
启动容器:
sudo docker start fa647741f188
进入刚刚生成的ros2容器,假设容器id前缀是fa647741f188 :
sudo docker exec -it fa647741f188 /bin/bash
再次进入容器启动ros2
root@fa647741f188:/# ros2
bash: ros2: command not found
这是因为新终端没有自动添加环境变量,解决办法:
直接输入下面的命令追加bashrc即可
echo 'source /opt/ros/humble/setup.bash'>> ~/.bashrc
追加完成后source即可:
source ~/.bashrc
五、把建好的容器打包给其他人使用
先退出容器:exit或者ctrl + D
提交全部更改到本地容器:docker commit 【容器ID】
此时的容器会生成一个新的未命名的镜像。我们需要对它重新命名,
镜像重命名:
docker tag 0bc42f7ff218【镜像ID】 sqlmap_docker:v1【名称:版本】
镜像打包:
docker save sqlmap_docker:v1 > /root/sqlmap_docker .tar
其中/root/指定存放的路径。
打包完成可以在相应目录下看到多了一个tar包,这就是你装好环境的docker镜像。
把这个镜像的tar包发送给别人, 然后他那边导入你的镜像:
docker load -i sqlmap_docker .tar
,运行这个镜像,进入对应的容器,然后就可以在相应目录下运行你的代码了。
sudo docker ps
sudo docker exec -it 775c7c9ee1e1 /bin/bash
sudo docker exec -it dm8_01 /bin/bash
停止和删除容器
docker stop 【id】
docker rm [id]
docker run -it \
--runtime=nvidia \
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility \
-e NVIDIA_VISIBLE_DEVICES=all \
--shm-size 15g \
-w /code \
-v "/path/to/your/edgeyolo/parent_dir":/code \
-v "/path/to/your/dataset/parent_dir":/dataset \
edgeyolo:latest
解释
-it
):允许您使用终端接口与容器进行交互。--runtime=nvidia
):使用 NVIDIA 的 GPU 运行时进行 Docker,允许容器访问主机上的 NVIDIA GPU。-e NVIDIA_DRIVER_CAPABILITIES=compute,utility
):指定 NVIDIA 驱动程序所需的功能。在这种情况下,它要求计算(CUDA 操作所必需的)和实用程序(使用 .nvidia-smi
-e NVIDIA_VISIBLE_DEVICES=all
):使主机上的所有 GPU 都可供容器使用。--shm-size 15g
):将(共享内存)的大小设置为 15GB,这对于需要大量共享内存的操作非常有用,例如某些深度学习模型。/dev/shm
-w /code
):将容器内的工作目录设置为 。/code
-v “/path/to/your/edgeyolo/parent_dir”:/code
和 -v “/path/to/your/dataset/parent_dir”:/dataset
):
/path/to/your/edgeyolo/parent_dir
/code
/path/to/your/dataset/parent_dir
/dataset
edgeyolo:latest
):指定要用于容器的 Docker 镜像,在本例中为 .edgeyolo:latest