去露营的时候怕无聊,@soasme 给我带了 UNIX环境高级编程。露营的时候并没有看多少,回来开始敲书里的代码,想试着运行一下,发现 gcc 报错啦,于是开始捣鼓。两天过去了,终于搞定啦,感谢某人的帮忙,记录一下下。

在已经安装了 Dokcer 的基础上,做的事情主要包括:

  1. 下载 apue.3e 的代码
  2. 构建 docker image
  3. docker run 并编译

代码实例, 文件 myls.c 如下:

#include "apue.h"
#include <dirent.h>

int main(int argc, char *argv[]) {
    DIR *dp;
    struct dirent *dirp;
    if(argc != 2)
        err_quit("usage: ls directory_name");
    if((dp=opendir(argv[1])) == NULL)
        err_sys("can't open", argv[1]);
    while((dirp = readdir(dp)) != NULL)
        printf("%s\n", dirp->d_name);
    closedir(dp);
    exit(0);
}

Define a container with Dockerfile

在下载了apue源码的目录下,创建 Dokcerfile 如下:

# pull centos
FROM centos

# install core development tools such as gcc, make
RUN yum groupinstall -y 'Development Tools'

# install the latest elrepo-release 是为了 install libbsd
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

# install libbsd
RUN yum install -y libbsd-devel

另外,可以把不需要构建的文件写入到 .dockerignore 就跟 .gitignore一样。

然后 creates image

docker build -t image-apue . 

run

run 并 bind mount

docker run -it --name container-apue --mount type=bind,source="$(pwd)",target=/home image-apue

make

gcc -o myls myls.c -I apue.3e/include/ -L apue.3e/lib/ -lapue

好了,可以开始学习了~