现在好像用Docker是越来越多了。之前其实也看过docker的原理,大概就是cgroup那些,不过现在就不看原理了,不谈理论,只看实际中怎么用,解决眼前问题。
用docker来做开发,其实就是解决的编译环境的差异,就像关大象进冰箱有几步,这里也有两步。1 创建docker。2 使用docker编译。
1 创建docker
理论上创建docker还是很简单,首先是创建一个Dockerfile,如下:
# 使用 Ubuntu 作为基础镜像
FROM ubuntu:20.04
# 设置非交互模式,避免 tzdata 配置时的交互提示
ENV DEBIAN_FRONTEND=noninteractive
# 更新包列表并安装必要的工具
RUN apt-get update && \
apt-get install -y \
build-essential \
cmake \
&& apt-get clean
# 创建工作目录
WORKDIR /workspace
# 将当前目录下的所有文件复制到工作目录中
COPY . .
# 指定默认的入口命令
CMD ["./build.sh"]
然后执行命令:
# 构建 Docker 镜像
docker build -t my_cpp_project_image .
看起来很简单,但是过程中还是遇到了一些问题:
首先说没权限
直接chmod可以解决
sudo chmod 777 /var/run/docker.sock
然后遇到的超时。这个算是在国内的老面孔了。
用下面这位大哥的办法可以解决:
error pulling image configuration: download failed after attempts=6: dial tcp 47.88.58.234:443: conn-CSDN博客
2 使用docker编译
上面说了入口是build.sh,所以在docker的文件夹下创建这个文件
#!/bin/bash
gcc hello.c
# 运行编译生成的可执行文件(如果需要)
./a.out
创建代码:
hello.c
ubuntu@VM-8-10-ubuntu:~/test/docker$ cat hello.c
#include <stdio.h>
void main()
{
printf("Hello docker!\n");
}
进入Docker进行编译
# 运行 Docker 容器进行编译
docker run --rm -v "$PWD":/workspace my_cpp_project_image
这个的意思是:docker run --rm -v "$PWD":/workspace my_cpp_project_image:运行一个临时容器,使用当前目录挂载到容器内的 /workspace 目录中,并执行默认的入口命令(即 ./build.sh 脚本)。--rm 标志表示在容器退出后自动删除容器。
结果出来的很快:
后面有时间和精力再deep dive into吧。。。