【docker】制作镜像流程

 制作镜像流程

dockerfile 指令:

 

现在有一个C++应用程序,功能给名为:test.txt 的文件中循环写入:hello word! 。下面通过这个示例代码在docker中制作一个新的镜像:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main()
{
  FILE *file = fopen("test.txt", "w+");
  if (file == NULL) {
    return 0;
  }

  char buf[20] = "hello world!\n";
  int len = strlen(buf);

  while (1)
  {
    fputs(buf, file);
    fflush(file);
    sleep(1);
  }

  fclose(file);
  return 0;
}
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <unistd.h>
 5 
 6 int main()
 7 {
 8   FILE *file = fopen("test.txt", "w+");
 9   if (file == NULL) {
10     return 0;
11   }
12 
13   char buf[20] = "hello world!\n";
14   int len = strlen(buf);
15 
16   while (1)
17   {
18     fputs(buf, file);
19     fflush(file);
20     sleep(1);
21   }
22 
23   fclose(file);
24   return 0;
25 }

c/c++程序我们都是直接运行在linux系统上,所以我们可以直接选择centos镜像,在这里我们是要把.c文件编译成一个可执行程序,docker还有一个gcc或者g++的镜像,使用gcc或者g++镜像的话,我们就不需要在ubunt或者centos镜像中再安装gcc 、g++了。

推荐三种镜像:

  •     gcc 或者g++
  •     centos

 

下载镜像到宿主主机: docker search gcc 

下面为执行结果:

 

 选择第一个版本进行下载:

docker pull gcc //下载镜像
docker images //查看本地已经下载的镜像

下面为执行结果:

 

 

 使用 gcc镜像制作应用程序的镜像,下面是Dockerfile的内容:

FROM gcc:latest

RUN  mkdir /usr/src/kristopher
COPY test.c /usr/src/kristopher
WORKDIR /usr/src/kristopher

RUN  gcc test.c
CMD ["./a.out"]
1 FROM gcc:latest
2 
3 RUN  mkdir /usr/src/kristopher
4 COPY test.c /usr/src/kristopher
5 WORKDIR /usr/src/kristopher
6 
7 RUN  gcc test.c 
8 CMD ["./a.out"]

执行命令:

docker build -t gcc-test:v1 .

执行过程:

 

再次执行命令 docker imags, 就可以在本地镜像中多了一个叫gcc-test的镜像,TAG 为v1。

 

启动 gcc-test 镜像:

docker run -d gcc-test.v1

运行docker ps 结果如图:

 接下来进入到容器当中,查看 a.out 程序在后台执行的情况:

docker exec -it mystifying_mclean /bin/bash

结果如图:

 

 

 进阶教程

直接将一个可执行程序复制到镜像中,制作镜像

参考资料

1. 如何使用docker部署c/c++程序

2. 如何编写优雅的Dockerfile

3. 使用docker部署一个简单的c/c++程序

posted @ 2022-04-18 11:18  苏格拉底的落泪  阅读(671)  评论(0编辑  收藏  举报