使用docker部署一个简单的c/c++程序的方法

一、首先建立一个 hello-world.cpp 文件

程序代码如下:

#include <iostream>
using namespace std;

int main () {
	cout << "hello-world" << endl;
	cout << "my first docker" << endl;
	return 0;
}

例如我是在我的home路径下建立一个DockerFile/hello-world目录,里面新建一个hello-world.cpp源文件。

二、编写DockerFile文件

该文件和源文件在一个文件夹下,如上图所示,名为hello-dockerfile
先给出文件内容,然后逐条解释:

FROM codenvy/cpp_gcc 

RUN mkdir /home/user/myapp

ADD hello-world.cpp /home/user/myapp

WORKDIR /home/user/myapp

RUN g++ hello-world.cpp -o hello

CMD ["./hello"]

Dockerfile的命令可以借鉴我的另一篇博客https://www.jb51.net/article/197996.htm

1、FROM codenvy/cpp_gcc

FROM是后面是该目标镜像使用的基础镜像,基础镜像有且只能有一个,镜像可以通过docker search 命令去docker Hub上去找自己想要的基础镜像。由于我们想要编译一个C++文件,我们可以使用带有g++或者gcc的镜像作为基础镜像,我们可以搜索一下带有g++的镜像,如下图所示:

例如我使用的是第二个,然后通过docker pull命令将该镜像pull到本地,如下图所示

输入docker images 命令可以查看本地的所有镜像,如下图所示:

例如我这里有两个镜像:一个刚才下载的codenvy/cpp_gcc,还有一个ubuntu镜像。

这里可能有人会有疑问,为什么不直接使用ubuntu镜像呢?在我们的印象中ubuntu自带了g++和gcc编译器,而且这个镜像还比较小。这里我来说明一下:由于docker下的ubuntu镜像只保留了ubuntu的内核相关的东西,核心以外的东西都尽可能被删除了,这也就解释了平时我们安装ubuntu的镜像有将近两个G,而docker的ubuntu镜像只有七十多M。在这个Ubuntu镜像里是没有gcc和g++ 命令的,连sudo命令都没有,都需要手动下载配置

例如我们使用该ubuntu镜像生成一个容器:

然后查看g++的版本:

发现并没有安装g++

sudo命令也没有。
所以我们需要下载一个带有g++的镜像,也可以自己在ubuntu镜像里手动安装,不过就是有点费事。

2、RUN mkdir /home/user/myapp

RUN命令是容器构建时需要的命令,后面带有的就是我们常见的linux命令。

该命令就是在 /home/user 路径下新建一个 myapp 文件夹

3、ADD hello-world.cpp /home/user/myapp

ADD命令是将宿主机下的文件拷贝到镜像,也可以用COPY命令,不过ADDCOPY的功能更强大,ADD带有解压缩的功能。

该命令就是将第一步新建的 hello-world.cpp 源文件拷贝到镜像中的/home/user/myapp 路径下。

4、WORKDIR /home/user/myapp

WORKDIR命令就是指定创建容器时,容器的默认工作目录。

该命令将镜像中的 home/user/myapp 路径作为默认工作路径。

5、RUN g++ hello-world.cpp -o hello

该命令是使用g++编译 hello-world.cpp 源文件,构建一个可执行文件hello

6、CMD ["./hello"]

CMD是指定容器创建完成后第一个运行的命令。

该命令是运行上一步构建的可执行文件 hello

三、创建镜像

使用命令:

docker build -f ./hello-dockerfile -t my_hello_docker:v1.0 .

./hello-dockerfile是我们Dockerfile的所在位置
my_hello_docker是新建的镜像的名字
v1.0是该镜像的标签,例如这是第一版

构建镜像的过程如下图所示:

构建完成我们查看是否成功构建,通过docker images命令查看当前本地的所有镜像:

在这里我们看到多了一个镜像:my_hello_docker,就是我们刚才创建的那个镜像,说明镜像构建成功。

四、通过该镜像运行一个容器

通过以下命令实例化一个容器

docker run my_hello_docker:v1.0

然后会得到下面的输出:

输出与我们编写的C++文件一致,说明成功利用docker部署一个简单的c/c++程序,达到了目的。

到此这篇关于使用docker部署一个简单的c/c++程序的方法的文章就介绍到这了,更多相关docker部署c/c++程序内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解如何使用Docker部署一个web项目并打包成镜像文件

    docker基本入门以后,可以试试打包docker镜像与dockerfile了 docker镜像 docker hub仓库有2类仓库,用户仓库和顶层仓库,用户仓库由docker用户创建的,顶层仓库由docker内部的人来管理的.仓库里存放的是镜像文件,那么问题来了 ,怎么去创建镜像呢? how to create image 构建docker镜像的有2种方法: 1.使用docker commit命令. 2.使用docker build 命令和Dockerfile文件.在这里并不推荐使用docke

  • Docker 自动部署tomcat详解

    Docker 自动部署tomcat 1. 下载镜像 # Docker pull centos:latest  #获取最新的centos镜像 2. 启动容器 #docker run -i -t -v /home/user/software/:/home/software/ imageId /bin/bash 其实包含以下三个部分: docker run <相关参数> <镜像ID> <初始命令> 其中,相关参数包括: -i:表示以"交互模式"运行容器 -

  • 在Docker上开始部署Python应用的教程

    几周前, Elastic Beanstalk声明在AWS云中配置和管理Docker容器.在本文中,我们通过一个简单的注册表单页面应用去理解Docker部署过程,该表单使用Elastic Beanstalk Python环境. 关于注册表单应用 几个月之前,我们就已经开发完这个应用并且发表在博客上.有4部分视频和一篇文章"Using DynamoDB and SNS with Elastic Beanstalk in any Supported AWS Region".今天,我们将在这部

  • Docker中部署mysql服务的方法及遇到的坑

    最近一直在学习搬运工,感觉这么厉害的东西怎么以前不知道呢,把自己捣鼓的过程整理记录下来,供同学们参考 第零步:从Docker Hub拉取官方mysql镜像 docker pull mysql 然后就是进入漫长的等待,当然如果你配置了镜像加速器,速度会快那么一丢丢 第一步:使用docker images命令查看镜像 你会看到我们这里已经有了MySQL的的镜像 第二步:启动我们的mysql的镜像,创建一个MySQL的容器 使用命令:docker run -d --name mysql -p 3307

  • 在docker中部署tomcat并且部署java应用程序的步骤详解

    先给大家简单说下Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口. 1.先说如何在docker中部署tomcat 第一步:root用户登录在系统根目录下创建文件夹tomcat7,命令如:mkdir tomcat7,并且切换到该目录下:cd tomcat7: 第二步:创建Dockerfile,命令如:touch Docker

  • CentOS7 Docker Nginx部署及运行详解

    网上找了一些资料部署,出现不一样的问题,现在总结一下自己的部署流程. 1.资源准备 Dockerfile文件 # "ported" by Adam Miller <maxamillion@fedoraproject.org> from # https://github.com/fedora-cloud/Fedora-Dockerfiles # # Originally written for Fedora-Dockerfiles by # scollier <scol

  • 详解如何在 Docker 中设置 Go 并部署应用

    嗨,在本教程中,我们将学习如何使用 docker 部署 golang web 应用程序. 你可能已经知道,由于 golang 的高性能和可靠性,docker 是完全是用 golang 写的.在我们详细介绍之前,请确保你已经安装了 docker 以及 golang 并对它们有基本了解. 关于 docker Docker 是一个开源程序,它可以将应用及其完整的依赖包捆绑到一起,并打包为容器,与宿主机共享相同的 Linux 内核.另一方面,像 VMware 这样的基于 hypervisor 的虚拟化操

  • 在Docker上部署Python的Flask框架的教程

    本文中,我将尝试展示用Docker开发python应用(主要是Web应用)的可行方法.虽然我本人专注于Python的Flask微框架,但本文目的是演示如何通过Docker更好地开发和共享应用程序,(由任何语言和框架开发的应用程序).Docker通过封装依赖项,大大减少了开发环境和正式产品的差距. 大多数Python开发人员在开发中使用virtualenv.它提供了一种易用的机制让应用程序使用自己专用的依赖项,这些依赖项可能与在其它应用程序或操作系统存在冲突(尤其是不同的Pyhton版本,还有不同

  • 利用OpenVSwitch在多台主机上部署Docker的教程

    [编者的话]当你在一台主机上成功运行Docker容器后,信心满满地打算将其扩展到多台主机时,却发现前面的尝试只相当于写了个Hello World的入门程序,多主机的网络设置成了下一道门槛.在你尝试各种方案时不妨先看看本文,或许就会豁然开朗,发现原来也不复杂.嗯,是的,本文用到了 OpenVSwitch. 运行Docker已经不是什么新鲜事,网上有很多入门教程来帮助你在一台主机上运行容器.这台主机可以是Linux服务器,也可以是Mac(借助类似boot2docker的项目). 在多台主机上运行却是

  • 使用docker部署一个简单的c/c++程序的方法

    一.首先建立一个 hello-world.cpp 文件 程序代码如下: #include <iostream> using namespace std; int main () { cout << "hello-world" << endl; cout << "my first docker" << endl; return 0; } 例如我是在我的home路径下建立一个DockerFile/hello-w

  • 5分钟教会你用Docker部署一个Python应用

    目录 前言 1. Dockerfile 描述文件 2. 实战一下 2-1 项目开发 2-2 编写 Dockerfile 2-3 构建镜像 2-4 运行镜像容器 2-5 测试一下 3. 总结 前言 在使用传统物理机或云服务器上部署项目都会存在一些痛点 比如:项目部署速度慢.资源浪费.迁移难且扩展低 而使用 Docker 部署项目的优势包含: 高效利用系统资源 服务启动更快 环境一致,迁移更加方便 本篇文章将介绍 Docker 部署一个 Python 项目的常规流程 1. Dockerfile 描述

  • Docker Compose 搭建简单的Python网络应用程序(步骤详解)

    目录 前提条件 第1步:设置 第2步:创建一个Dockerfile 第3步:在Compose文件中定义服务 Web服务 Redis服务 第4步:用Compose构建和运行你的应用 第5步:编辑Compose文件以添加绑定挂载 第6步:用Compose重新构建并运行应用程序 第7步:更新应用程序 第8步:试验一些其他命令 在这个页面上,你可以建立一个简单的Python网络应用程序,运行在Docker Compose上.该应用使用Flask框架,并在Redis中维护一个点击计数器.虽然样本使用了Py

  • 自定义一个简单的JDBC连接池实现方法

    一.什么是JDBC连接池? 在传统的JDBC连接中,每次获得一个Connection连接都需要加载通过一些繁杂的代码去获取,例如以下代码: public static Connection getConn(){ Connection conn = null; String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String password = "root"

  • 一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息

    概述 这是一个简单的python爬虫程序,仅用作技术学习与交流,主要是通过一个简单的实际案例来对网络爬虫有个基础的认识. 什么是网络爬虫 简单的讲,网络爬虫就是模拟人访问web站点的行为来获取有价值的数据.专业的解释:百度百科 分析爬虫需求 确定目标 爬取豆瓣热度在Top100以内的电影的一些信息,包括电影的名称.豆瓣评分.导演.编剧.主演.类型.制片国家/地区.语言.上映日期.片长.IMDb链接等信息. 分析目标 1.借助工具分析目标网页 首先,我们打开豆瓣电影·热门电影,会发现页面总共20部

  • 一个简单的node.js界面实现方法

    最近要写一个工具界面整合项目的功能属性,方便其他部门的人进行编辑,有点类似后台.会有部分数据上的交互.于是学习了下node.js后端的知识. 源码如下: // filename:myServer.js // a simple http server var fs = require('fs'), url = require('url'), path = require('path'), http = require('http'); //从命令行参数获取root目录,默认是当前目录 var ro

  • 使用C++ MFC编写一个简单的五子棋游戏程序

    MFC简介: MFC(MicrosoftFoundationClasses)是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装了大部分的windows API函数. MFC除了是一个类库以外,还是一个框架,在vc++里新建一个MFC的工程,开发环境会自动帮你产生许多文件,同时它使用了mfcxx.dll.xx是版本,它封装了mfc内核,所以你在你的代码看不到原本的SDK编程中的消息循环等等东西,因为MFC框架帮你封装好了,这样你就可以专心的考虑你程序的逻辑,而不是这些每次编程都要重复的

  • HBuilderX开发一个简单的微信小程序的实现步骤

    目录 一.配置 二.运行 一.配置 在微信开发者工具的设置中开启,如图: 在HBuilderX中新建项目,选择uni-app,如图: 在HBuilderX中编写代码 目录结构如图: 编写代码: index.less .content{ padding: 0 40rpx; image{ width: 100%; } .title{ display: block; text-align: center; font-size: 50rpx; font-weight: bold; } .operate{

  • Docker部署及使用压测神器sysbench的方法

    目录 前言 ️ 1. sysbench简介 1.1 sysbench能做什么 1.2 压力测试的指标 1.3 常见的压测工具 ️ 2.容器安装 2.1 服务器申请 2.2 yum安装 ️ 3.测试 CPU ️ 4.测试磁盘 IO ️ 4.测试内存 前言 sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试 ️ 1. sysbench简介 1.1 sysbench能做什么 新业务上线的时候通常需要对数据库性能进行压力测试,以确认是否满足需要,今天

  • 用Swift构建一个简单的iOS邮件应用的方法

    在前几个月内,我一直在做InboxKit的研究,它是关于Inbox平台的IOS SDK.Inbox为和邮件数据的交互提供高层API,使得你可以忽略IMAP,Exchange,MIME的解析以及thread探测(当然还有很多其他事情...),并使你致力于完成富有创意的APP的创作上.我们的目标很简单:尽可能地打造一个优雅的,跨提供商的邮件应用.毕竟,它很难. 在Objective-C中,InboxKit使得创建邮件体验变得很轻松,那么,Swift又如何呢?Swift在WWDC后已正式被IOS社区所

随机推荐