使用Docker搭建C++ Boost开发环境

栏目: C++ · 发布时间: 5年前

内容简介:Docker进阶 & C++ boost入门昨天玩docker玩到夜里一点多,总算是使用docker搭建了一个能够编译引用了C++ boost库的应用程序的开发环境,犹豫了许久要不要输出这篇博客,后来觉得可以简单写一写,主要原因两个,其一是因为这可以让我再加深一些对docker常用命令的印象;其二是为学习后面的C++ boost库开一个头,有一个能够编译boost程序的快捷的环境。所以正好用一篇文章达到两个目的。因此得出这篇文章就会围绕我上面提到的两个点进行展开,分别是如何使用docker搭建一个独立可运行

Docker进阶 & C++ boost入门

昨天玩 docker 玩到夜里一点多,总算是使用docker搭建了一个能够编译引用了C++ boost库的应用程序的开发环境,犹豫了许久要不要输出这篇博客,后来觉得可以简单写一写,主要原因两个,其一是因为这可以让我再加深一些对docker常用命令的印象;其二是为学习后面的C++ boost库开一个头,有一个能够编译boost程序的快捷的环境。所以正好用一篇文章达到两个目的。因此得出这篇文章就会围绕我上面提到的两个点进行展开,分别是如何使用docker搭建一个独立可运行的centos并能够通过外部ssh连接到这个container container并提交到自己个人的docker hub仓库,以及如何在centos中安装boost库,并完成一个显示boost版本的c++程序,下面正式进入主题

Docker创建Centos镜像

启动镜像

实际上这一步非常简单,只需要从远程仓库搜索到指定的docker image,拉下来,并使用docker run执行之就可以了,这里搜索直接使用下面的命令搜索在Docker hub中所有可用的image

docker search centos6.5

这里出现了一系列备选的image选项,从中选取任意一个就可以,这里我选择了star数最多的,与github类似,star代表了这个镜像的流行程度和靠谱程度

使用Docker搭建C++ Boost开发环境

下面就可以直接使用docker run来运行这个image,具体到我这里,命令如下

docker run -it --name="bryantchang_boost_proj" --user root -p 2200:22 --privileged=true --cap-add=SYS_PTRACE --cap-add=SYS_TIME --security-opt seccomp=unconfined -v /Users/bryantchang/Desktop/codes/tools/docker/srcs:/home/bryantchang/docker_proj hasedon/centos6.5 /bin/bash

这里面有一些重要的参数需要说明:

-it  使用交互模式运行(-i 和 -t是两个独立的配置项,不过很大概率上他们是被绑在一起使用的)
-p 2200:22 将docker中的22端口映射到本机的2200端口,那么我们在docker中部署好sshd server之后,可以通过访问2200端口访问到内部的docker容器
--name 这个container的名字
--user 运行image的用户名
--privileged 是否对image拥有系统权限,如果这个参数不设置成true,及时使用root用户启动了image,也只是普通用户而已
--cap-add 这个景象中拥有的能力,例如用于支持gdb的SYS_PTRACE,用于显示时间的SYS_TIME
-v : 将本地的某个目录映射到image中的某个指定目录(文件的本地与远程的映射)
/bin/bash 启动container后就是/bin/bash

这里需要说明一下,这里通过docker内部部署sshd server来让外部访问docker container的方式并不推荐,这里只是为了介绍-p的含义,docker的4中推荐的访问方式详见 docker的4种推荐访问方式

当然这里面也有一些问题,稍后我会说明。这时,一个干净的centos6.5镜像就被部署在了本地的docker engine中,下面先暂时抛开docker环境,我们把操作的对象集中于Centos6.5本身,下面的主题就是如何在centos中安装boost库

Centos安装boost库以及c++编译环境+gdb

首先安装基本的lib

yum upgrade
yum update
yum install -y

安装gcc g++以及gdb,这里都是一些简单的命令,不过多赘述,直接上命令

yum -y install gcc  #安装gcc
yum -y install gdb  #安装gdb
yum -y install gcc-c++ #安装g++

安装完这些简单的lib和工具,现在先简单写个cpp程序测试一下是不是上述 工具 是否安装成功,写了一个最简单的Hello World,代码如下

#include <iostream>
using namespace std;
int main() {
    cout << "Hello World" << endl;
    return 0;
}
g++ -o main main.cpp
./main

效果如下

使用Docker搭建C++ Boost开发环境

程序运行成功,说明环境安装完成。至于gdb,直接输入gdb就可以看到是否安装成功

其次,安装boost库,安装方法也十分简单,首先下载boost的压缩包,这里我们安装的是1.64.0

wget http://ufpr.dl.sourceforge.net/project/boost/boost/1.64.0/boost_1_64_0.tar.bz2

解压后直接通过bootstrap和b2进行安装

./bootstrapt.sh
./b2 --buildtype=complete install

这里我用的是完全安装,脚本将会自动安装调试版,正式版,静态库和动态库。

完成安装后,boost库宣告安装完成,下面我们用一个boost中的helloworld程序打印我当前的boost版本,代码如下

#include <iostream>
#include <boost/version.hpp>
using namespace std;
int main() {
    cout << "Boost 版本" << BOOST_VERSION << endl;
    return 0;
}

还是按照之前的方式进行编译,并运行,运行结果如下

使用Docker搭建C++ Boost开发环境

到此,我们完成了boost库的安装,接下来则是保存当前的镜像状态,将这个镜像提交到个人的dockerhub,如果没有dockerhub的话,需要类似github一样在Docker hub仓库注册新的账户,注册完后,在本机输入下面命令连上dockerhub的提交客户端,如果出现如下信息,说明登录成功

docker login
使用Docker搭建C++ Boost开发环境

下面我们完成最后一步,将image提交到个人仓库

调教当前image到docker hub

与github类似,提交到docker镜像仓库也有两步,commit和push,commit为本地提交,命令如下

docker commit -a bryantchangxy -m "boost commit" bryantchang_boost_proj bryantchangxy/gcc_boost:latest

其中 -a为提交的用户,-m 为提交时的摘要,bryantchang_boost_proj这个名字则是你运行的container的名字,如果没有的话就要填写当前运行container id bryantchangxy/gcc_boost:latest则是你自己仓库下的某个具体的某个项目,完成后会生成一个sha256的代码用于标示本次提交

使用Docker搭建C++ Boost开发环境

完成后,正式push到个人仓库,命令如下

docker push bryantchangxy/gcc_boost:latest
使用Docker搭建C++ Boost开发环境

成功后就可在个人的仓库中看到自己的image了

使用Docker搭建C++ Boost开发环境

同时还能够通过docker search搜索到自己的的image

docker search gcc_boost
使用Docker搭建C++ Boost开发环境

大功告成,最后为我的image做个广告,自己在这个景象中安装了常用语言的编译,执行环境,如java,scala,go等还有mvn等一系列工具,欢迎大家下载,star个人的docker hub地址为 docker hub个人主页 后面有一些好玩的东西,我也会以image的方式放到这个仓库中,欢迎大家关注。后面的文章将正式围绕boost这个准标准库的特性展开。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法之美

算法之美

[美]布莱恩·克里斯汀、[美]汤姆·格里菲思 / 万慧、胡小锐 / 中信出版集团 / 2018-5-20 / 59.00

我们所有人的生活都受到有限空间和有限时间的限制,因此常常面临一系列难以抉择的问题。在一天或者一生的时光里,哪些事是我们应该做的,哪些是应该放弃的?我们对杂乱无序的容忍底线是什么?新的活动与熟悉并喜爱的活动之间如何平衡,才能取得令人愉快的结果?这些看似是人类特有的难题,其实不然,因为计算机也面临同样的问题,计算机科学家几十年来也一直在努力解决这些问题,而他们找到的解决方案可以给我们很多启发。 ......一起来看看 《算法之美》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

MD5 加密
MD5 加密

MD5 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具