windows下使用Docker Desktop+docker搭建的linux的c/c++开发编译环境

背景

       很多 c/c++程序的运行环境都是在linux下,而开发者使用的工作电脑通常都是windows为主。这就不可避免的产生一个问题:windows下敲代码、linux下编译。

        针对这种情况,大家的方案也是不少,笔者使用过的方式如下:

                1.ssh接入linux服务器,直接在终端使用vim+make;

                2.使用vscode等ide在本地电脑修改、编辑,然后把修改后的文件上传到linux上编译;

                3.使用vs的跨平台+vm虚拟机搭建开发环境;

        上面的三种都使用过一段时间,但是最后都放弃了,因为都各有缺点:

                1 没有代码补全、关联跳转懂ide功能,开发不方便;

                2 需要服务器配合,在办公环境还好,如果处于网络不方便、只有一台工作电脑情况下,很难编译;

                3 vm虚拟机的文件拷贝不方便,而且存在出问题的情况的不少,甚至随着虚拟机文件越来越大,出问题的情况越来越多,甚至最后虚拟机无法启动。

          笔者也是在第三种情况出现后,才寻找替代方案,最后找到如下组合,可以满足需求(1台windows电脑、ide智能、可以编译和运行、环境稳定):

        vs+Docker Desktop+docker

Docker Desktop 安装

        docker desktop 简单说是一个windows上的docker引擎+可视化管理的工具。

        0 环境准备

        在安装软件之前,需要对电脑做一下设置,否则安装/启动会出问题。

        ①安装wsl

        打开 powershell 或命令行cmd管理员终端,执行wsl --help 命令看看,有没有 wsl,如果有就不用安装了,直接 wsl --set-default-version 2 设置 wsl2 为默认版本就行了。如果本机没有 wsl,需要去安装。

        ②开启虚拟化技术

1. Hyper-V 、 2.适用于 Linux 的 Windows 子系统  、3.虚拟机平台、 4.容器、5.Windows虚拟机监控程序平台

        如果是家庭版,默认是没有Hyper-v的。复制下面代码,然后保存成Hyper-v.bat脚本,使用管理员权限运行脚本,安装Hyper-v。

pushd "%~dp0"

dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hv.txt

for /f %%i in ('findstr /i . hv.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"

del hv.txt

Dism /online /enable-feature /featurename:Microsoft-Hyper-V -All /LimitAccess /ALL

Pause

        1.下载安装包

        docker官网:https://www.docker.com/

        2.安装

        双击打开,有勾选就勾选,一路下一步,安装完成后会生成快捷方式。

        3.配置镜像源

        docker的官网镜像源速度慢,建议增加国内的源。

        打开Docker ,找到 设置–docker engine 中,添加如下图所示的镜像源地址

选择DockerEngine,在其中输入

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "registry-mirrors": [
    "https://h6muxxxx.mirror.aliyuncs.com",
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://cr.console.aliyun.com",
    "https://mirror.ccs.tencentyun.com"
  ]
}

然后点击右下角应用,完成即可。


docker镜像创建

在cmd中,通过docker search 查找需要的linux镜像,比如,centos7

通过docker pull 命令 拉取镜像到本地。

然后通过run命令,生成容器

docker run -itd --name=docker-c -v E:\docker-c++\dockerDir:/home --privileged dokken/centos-7:latest  /usr/sbin/init

这样就创建一个名字为docker-c的容器并运行,然后进入容器内部

docker exec -it docker-c /bin/bash

c++环境设置

由于镜像是基本环境,无法满足开发需求,需要增加相关的配置

0.有的镜像太简单,连基本源都没有,需要自己配置yum,可以参考我另一篇文章:centos7 yum报错:cannot find a valid baseurl for repo:base/7/x86_64

①安装gcc

 yum group install "Development Tools"

②安装并启动ssh,由于vs工具需要通过ssh来远程服务器,所以镜像必须开启ssh

安装软件

yum install vim passwd openssl openssh-server -y

修改root密码

passwd

配置ssh

vim /etc/ssh/sshd_config
UsePAM no
UsePrivilegeSeparation no
PermitRootLogin yes
PasswordAuthentication yes
UseDNS no
GSSAPIAuthentication no

启动ssh并设置为开机启动

systemctl start sshd
systemctl enable sshd

③安装cmake

安装gcc等必备程序包(已安装则略过此步)

yum install -y gcc gcc-c++ make automake 

安装wget (已安装则略过此步)

yum install -y wget

获取CMake源码包

wget https://github.com/Kitware/CMake/releases/download/v3.15.5/cmake-3.15.5.tar.gz

解压CMake源码包并进入

tar -zxvf cmake-3.15.5.tar.gz
cd cmake-3.15.5

编译

./bootstrap && make -j4 && sudo make install

到目前为止,开发需要的依赖环境已经安装完成。

提交容器

通过下面命令,把当前容器提交到镜像中

docker commit docker-c docker-c

这样会生成一个附带上述开发环境的新镜像docker-c

重新运行

通过docker run 命令,可以在docker-c的镜像基础上,运行携带c++开发环境的容器(将ssh的端口映射到容器外面,因为vs的跨平台需要使用ssh)。

docker run -itd --name=docker-c-ssh -v E:\docker-c++\dockerDir:/home -p 22:22 --privileged docker-c:latest  /usr/sbin/init


ide设置

参考vs跨平台设置,其中使用的服务端地址就是本机地址

GitLab是一个基于Web的Git代码仓库管理工具,而Docker是一个开源的应用容器引擎。结合使用GitLab和Docker可以轻松地实现项目的打包、编译和发布等一系列问题。 以下是一般的步骤: 1. 在GitLab上创建一个项目,并将项目代码推送到GitLab代码仓库中。 2. 在本地电脑上安装Docker,并编写Dockerfile文件,用于构建应用程序的Docker镜像。 3. 在GitLab上创建一个CI/CD流程,使用Docker构建应用程序的Docker镜像,并将镜像推送到Docker仓库中。 4. 在CD流程中,使用Docker镜像将应用程序部署到目标服务器。 以下是具体的步骤: 1. 在GitLab上创建一个项目,并将项目代码推送到GitLab代码仓库中。 2. 在本地电脑上安装Docker,并编写Dockerfile文件,用于构建应用程序的Docker镜像。Dockerfile文件的内容可以根据项目的具体情况进行修改。 ```dockerfile # 基于官方 .NET Core SDK 镜像进行构建 FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env WORKDIR /app # 将本地的项目文件拷贝到容器内部 COPY . ./ # 编译发布项目 RUN dotnet publish -c Release -o out # 构建运行时镜像 FROM mcr.microsoft.com/dotnet/aspnet:5.0 WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "应用程序名.dll"] ``` 3. 在GitLab上创建一个CI/CD流程,使用Docker构建应用程序的Docker镜像,并将镜像推送到Docker仓库中。在项目根目录下创建一个.gitlab-ci.yml文件,并添加以下内容: ```yaml # 定义CI/CD流程 stages: - build - deploy # 定义build阶段 build: image: docker:latest services: - docker:dind script: - docker build -t 镜像名称:版本号 . - docker login -u 用户名 -p 密码 - docker push 镜像名称:版本号 # 定义deploy阶段 deploy: image: docker:latest services: - docker:dind script: - docker login -u 用户名 -p 密码 - docker pull 镜像名称:版本号 - docker run -d --name 应用程序名 -p 主机端口:容器端口 镜像名称:版本号 ``` 4. 在CD流程中,使用Docker镜像将应用程序部署到目标服务器。在deploy阶段中,使用Docker命令将应用程序部署到目标服务器中。 ```yaml deploy: image: docker:latest services: - docker:dind script: - docker login -u 用户名 -p 密码 - docker pull 镜像名称:版本号 - docker run -d --name 应用程序名 -p 主机端口:容器端口 镜像名称:版本号 ``` 以上是GitLab和Docker结合使用对vs/C#/C++项目的打包、编译、发布等一系列问题的解决方案,可以根据实际情况进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值