1 创建工程目录
2 在工程目录下创建 Dockerfile , .dockerignore
~/share/projects/docker-demo/test$ ls -a
. .. Dockerfile .dockerignore result.txt src test
~/share/projects/docker-demo/test/src$ cat main.c
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define FILE_PATH "./result.txt"
int main(void)
{
int fd = -1;
fd = open(FILE_PATH, O_RDWR);
if (fd > 0)
printf("open file ok\n");
else
printf("open file fail\n");
while (1)
{
usleep(1*1000*1000);
printf("my service running...\n");
}
return 0;
}
3 编写Dockerfile
Dockerfile是用来docker 创建镜像时读取的配置文件
内容如下:
FROM ubuntu:18.04
COPY . /app
WORKDIR /app
CMD /app/test
FROM 表明这个镜像继承自ubuntu镜像,ubuntu镜像包含root_fs、linux常用lib和bin, test是一个C编译出来的可执行二进制文件, 它的运行依赖Linux lib环境, 所以FROM ubuntu。
也可以FROM 一个空镜像,写法: FROM scratch, 不过这样的话,需要自己搭建root_fs和运行环境。
4 编写.dockerignore
和.gitignore一样, 用来过滤文件,按照自己的需求来编写,减少垃圾文件被打包。
~/share/projects/docker-demo/test$ cat .dockerignore
src
5 build
~/share/projects/docker-demo/test$ docker image build -t test-demo ./
Sending build context to Docker daemon 12.8kB
Step 1/4 : FROM ubuntu:18.04
---> 6526a1858e5d
Step 2/4 : COPY . /app
---> Using cache
---> 56aa8f01a461
Step 3/4 : WORKDIR /app
---> Using cache
---> 448eeaea2405
Step 4/4 : CMD /app/test
---> Using cache
---> 550223df6a76
Successfully built 550223df6a76
Successfully tagged test-demo:latest
6 查看创建的image
~/share/projects/docker-demo/test$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
test-demo latest 550223df6a76 24 minutes ago 64.2MB
mysql 5.7 ef08065b0a30 6 days ago 448MB
ubuntu 18.04 6526a1858e5d 3 weeks ago 64.2MB
hello-world latest bf756fb1ae65 8 months ago 13.3kB
php 5.6-apache 24c791995c1e 20 months ago 355MB
7 运行
~/share/projects/docker-demo/test$ docker run --rm -it test-demo
open file ok
my service running...
my service running...