#配置源 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#配置源 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#配置源 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 infosudo docker infosudo docker info
# 添加docker用户组,一般已存在,不需要执行 sudo groupadd docker # 将登陆用户加入到docker用户组中 sudo gpasswd -a $USER docker # 更新用户组 newgrp docker # 测试docker命令是否可以使用sudo正常使用 docker version# 添加docker用户组,一般已存在,不需要执行 sudo groupadd docker # 将登陆用户加入到docker用户组中 sudo gpasswd -a $USER docker # 更新用户组 newgrp docker # 测试docker命令是否可以使用sudo正常使用 docker version# 添加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/bashdocker run -it -v /home/sz3/ailab/:/share --name my_container scllovewkf/opencalib:latest /bin/bashdocker 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 终端。
`--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 终端。
`--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-desktopsudo docker run -it osrf/ros:humble-desktopsudo docker run -it osrf/ros:humble-desktop
注意:每运行一次该指令,就会在本地生成一个新的容器,分配一个新的容器ID
重启和关闭容器
新开一个终端
查看本地存在的容器:
sudo docker ps -asudo docker ps -asudo docker ps -a
启动容器:
sudo docker start fa647741f188sudo docker start fa647741f188sudo docker start fa647741f188
进入刚刚生成的ros2容器,假设容器id前缀是fa647741f188 :
sudo docker exec -it fa647741f188 /bin/bashsudo docker exec -it fa647741f188 /bin/bashsudo docker exec -it fa647741f188 /bin/bash
再次进入容器启动ros2
root@fa647741f188:/# ros2 bash: ros2: command not foundroot@fa647741f188:/# ros2 bash: ros2: command not foundroot@fa647741f188:/# ros2 bash: ros2: command not found
这是因为新终端没有自动添加环境变量,解决办法:
直接输入下面的命令追加bashrc即可
echo 'source /opt/ros/humble/setup.bash'>> ~/.bashrcecho 'source /opt/ros/humble/setup.bash'>> ~/.bashrcecho 'source /opt/ros/humble/setup.bash'>> ~/.bashrc
追加完成后source即可:
source ~/.bashrcsource ~/.bashrcsource ~/.bashrc
五、把建好的容器打包给其他人使用
先退出容器:exit或者ctrl + D
提交全部更改到本地容器:docker commit 【容器ID】提交全部更改到本地容器:docker commit 【容器ID】提交全部更改到本地容器:docker commit 【容器ID】
此时的容器会生成一个新的未命名的镜像。我们需要对它重新命名,
镜像重命名:
docker tag 0bc42f7ff218【镜像ID】 sqlmap_docker:v1【名称:版本】docker tag 0bc42f7ff218【镜像ID】 sqlmap_docker:v1【名称:版本】docker tag 0bc42f7ff218【镜像ID】 sqlmap_docker:v1【名称:版本】
镜像打包:
docker save sqlmap_docker:v1 > /root/sqlmap_docker .tardocker save sqlmap_docker:v1 > /root/sqlmap_docker .tardocker save sqlmap_docker:v1 > /root/sqlmap_docker .tar
其中/root/指定存放的路径。
打包完成可以在相应目录下看到多了一个tar包,这就是你装好环境的docker镜像。
把这个镜像的tar包发送给别人, 然后他那边导入你的镜像:
docker load -i sqlmap_docker .tardocker load -i sqlmap_docker .tardocker load -i sqlmap_docker .tar
,运行这个镜像,进入对应的容器,然后就可以在相应目录下运行你的代码了。
sudo docker ps sudo docker exec -it 775c7c9ee1e1 /bin/bash sudo docker exec -it dm8_01 /bin/bashsudo docker ps sudo docker exec -it 775c7c9ee1e1 /bin/bash sudo docker exec -it dm8_01 /bin/bashsudo docker ps sudo docker exec -it 775c7c9ee1e1 /bin/bash sudo docker exec -it dm8_01 /bin/bash
停止和删除容器
docker stop 【id】docker stop 【id】docker stop 【id】
docker rm [id]docker rm [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:latestdocker 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:latestdocker 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
):允许您使用终端接口与容器进行交互。 - NVIDIA Runtime (
--runtime=nvidia
):使用 NVIDIA 的 GPU 运行时进行 Docker,允许容器访问主机上的 NVIDIA GPU。 - NVIDIA 驱动程序功能 (
-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
- 将目录从主机 () 挂载到容器内部。
- Image (
edgeyolo:latest
):指定要用于容器的 Docker 镜像,在本例中为 .edgeyolo:latest
原文链接:https://blog.csdn.net/W25679/article/details/140460603?ops_request_misc=%257B%2522request%255Fid%2522%253A%25225452c8e90db54f7c68f09e672ce81788%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=5452c8e90db54f7c68f09e672ce81788&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-30-140460603-null-null.nonecase&utm_term=%E9%A3%9E%E7%89%9BOS