【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
结果如图:
进阶教程
直接将一个可执行程序复制到镜像中,制作镜像