ubuntu中使用docker

发布于:2025-06-12 ⋅ 阅读:(20) ⋅ 点赞:(0)

上一篇我已经下载了一个ubuntu:20.04的镜像;

1. 查看所有镜像

sudo docker images

2. 基于本地存在的ubuntu:20.04镜像创建一个容器,容器的名为cppubuntu-1。创建的时候就会启动容器。

sudo docker run -itd --name cppubuntu-1 ubuntu:20.04

结果出现长串的容器ID号,说明创建容器cppubuntu-1成功

3.  查看docker中有哪些容器

sudo docker ps -a

4. 停止运行容器。

sudo docker stop 2ffec3839753

5. 启动容器

sudo docker start 2ffec3839753

6. 通过容器ID号删除容器(注意只有停止运行的容器才能删除)

sudo docker rm 容器的ID号

7. 通过容器ID号进入容器内部

sudo docker exec -it 2ffec3839753 /bin/bash

8. 查看容器当前大小

sudo docker ps -s

9. 将宿主机上的文件拷贝到容器内部

sudo docker cp /home/lmz/workspace/opencv4_10_0_tools/opencv-4.10.0.zip 2ffec3839753:/home/lmz/tools
sudo docker cp ./cmake-3.31.6.tar.gz 2ffec3839753:/home/lmz/tools

----------------------------------------------------------------------------------------------------------------------

搭建c++开发环境

9. 安装gcc/g++

apt-get install build-essential

9.1 查看编译器版本

gcc --version
g++ --version
make --version

10 指定版本安装CMake

10.1 安装ssl库

sudo apt-get install libssl-dev

10.2 解压安装包

tar -zxvf cmake-3.31.6.tar.gz && cd cmake-3.31.6

10.3 查看配置文件

./bootstrap --help

10.4 配置(将cmake安装到指定的位置)

./bootstrap --prefix=/usr/local/cmake

10.5 编译cmake源文件(指定8个线程编译源文件)

make -j8

10.6 安装cmake

make install

10.7 将cmake的安装路径添加环境变量

打开 【vim /etc/profile】文件,在文件末尾输入一下内容:

# cmake env path 
export PATH=/usr/local/cmake/bin:$PATH

10.8 刷新环境变量

source /etc/profile

10.9 验证是否安装成功

切换到任意目录下执行如下命令,验证安装是否成功

cmake --version

安装成功的样子:

10.10 删除cmake的源码目录和源码压缩包(不影响已经安装好的cmake) ,免得占总docker容器空间。

rm -fr ./cmake-3.31.6
rm -rf ./cmake-3.31.6.tar.gz

 注意,如果你和我一样,虚拟机上的宿主机是ubuntu20.04。

在宿主机上安装docker。docker容器cppubuntu-1以ubuntu:20.04镜像文件创建的,并且在容器内部搭建开发环境,那么你关机虚拟机之后,容器会停止。cmake环境会找不到。
再次开机进入到容器后,需要重新刷新环境变量

source /etc/profile

可以不指定cmake的安装目录,会不需要这一步吧

**********************************************************************************************************

安装opencv--c++开发环境

1. 下载源码包

wget https://github.com/opencv/opencv/archive/refs/tags/4.10.0.zip

2. 解压并且进入到解压后的文件夹中

unzip opencv-4.10.0.zip
cd opencv-4.10.0

3. 构建cmake项目(注意这个地方安装目录被我写成opencv4_9,我opencv的源码是4.10。只是安装路径被我写为opencv4_9。不影响的)

cmake -B build -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/usr/local/opencv4_9
-B 指定一个构建目录。-B build表示会在当前文件夹下创建一个build文件夹,待会儿构建后的文件全部放入其中。
-G 指定生成器。-G "Unix Makefiles"表示生成一个适合于Unix下使用的Makefile

-G "MinGW Makefiles"表示用于生成 适用于Windows 上使用MinGW 编译器使用的 Makefile;

-G "Visual Studio 16 2019"表示为 Windows 平台上的 Visual Studio IDE 生成解决方案文件(.sln)
-D 设置一个 CMake 变量。-DCMAKE_INSTALL_PREFIX=/usr/local/opencv4_9   
表示变量名为:CMAKE_INSTALL_PREFIX,变量的值为:/usr/local/opencv4_9

执行完上述命令后,会在opencv的源码目录下创建一个build目录,并且在build目录下生成一堆文件。注意上述操作并不会创建  /usr/local/opencv4_9 这个目录。
 

4. 编译源码

cmake --build build/

5. 安装

cmake --install build/

执行这个命令,将编译好的库和头文件以及cmake文件复制到之前指定的CMAKE_INSTALL_PREFIX里,如下图所示:

6 测试安装成功没有

记住自己的安装目录;/usr/local/opencv4_9

切换到安装目录下的该文件夹    /usr/local/opencv4_9/lib/cmake/opencv4 查看是否有xxx.cmake

编写一个CMakeLists.txt脚本测试

cmake_minimum_required(VERSION 3.0)

project(Demo)

# 指定opencv的xxxx.cmake文件目录,执行cmake文件中记录着opencv的头文件目录位置,库目录所在位置。
set(OpenCV_DIR "/usr/local/opencv4_9/lib/cmake/opencv4")

# 指定版本查找opencv
find_package(OpenCV 4.10 REQUIRED)

# 打印查找到的内容
message(STATUS "Found OpenCV version: ${OpenCV_VERSION}")
message(STATUS "OpenCV libraries to link: ${OpenCV_LIBS}")
message(STATUS "OpenCV include directories: ${OpenCV_INCLUDE_DIRS}")

 执行命令

cmake -S . -B build

安装成功,可以创建opencv项目了。

----------------------------------------------再次安装成功确定-------------------------------------------------------

 7. 拷贝一张图像进入到容器

sudo docker cp ./bus.jpg 2ffec3839753:/home/lmz/workspace/test

编写CMakeLists.txt

cmake_minimum_required(VERSION 3.0)

project(Demo)

set(OpenCV_DIR "/usr/local/opencv4_9/lib/cmake/opencv4") # 对应上面刚查的目录

find_package(OpenCV 4.10 REQUIRED)
message(STATUS "22222 Found OpenCV version: ${OpenCV_VERSION}")
message(STATUS "33333 OpenCV libraries to link: ${OpenCV_LIBS}")
message(STATUS "44444 OpenCV include directories: ${OpenCV_INCLUDE_DIRS}")

add_executable(${PROJECT_NAME} main.cpp)

target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

编写main.cpp

#include <opencv2/opencv.hpp>
#include <iostream>
#include <filesystem>  // C++17 才支持 std::filesystem

int main() {
    // 图像路径
    std::string imagePath = "/home/lmz/workspace/test/bus.jpg";
    
    // 读取图像
    cv::Mat img = cv::imread(imagePath);
    if (img.empty()) {
        std::cerr << "无法读取图像!路径:" << imagePath << std::endl;
        return -1;
    }

    // 转换为灰度图
    cv::Mat grayImg;
    cv::cvtColor(img, grayImg, cv::COLOR_BGR2GRAY);

    // 获取文件所在目录
    std::string outputImagePath = "/home/lmz/workspace/test/bus_test.jpg";

    // 保存灰度图
    bool success = cv::imwrite(outputImagePath, grayImg);
    if (success) {
        std::cout << "灰度图像已保存至: " << outputImagePath << std::endl;
    } else {
        std::cerr << "保存图像失败!" << std::endl;
        return -1;
    }

    return 0;
}

执行命令: 

cmake -S . -B build && cmake --build build && cd build && make && cd - && ./build/Demo

查看结果:

OK安装成功。