博文背景
一直想用容器跑裸bash,那么先从Hello world动手,理解了它,裸bash可以用同样的方法给它造出来。
具体操作
ubuntu@shenzhen:~/cpphello $ cat hello.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World" << endl;
return 0;
}
ubuntu@shenzhen:~/cpphello $ ldd hello
linux-vdso.so.1 (0x00007fffd0bee000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4de0dad000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4de0bbb000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4de0a6c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4de0f9e000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4de0a51000)
ubuntu@shenzhen:~/cpphello $ tree .
.
├── Dockerfile
├── hello
├── hello.cpp
├── hello.tar.gz
├── lib
│ └── x86_64-linux-gnu
│ ├── libc.so.6
│ ├── libgcc_s.so.1
│ ├── libm.so.6
│ └── libstdc++.so.6
└── lib64
└── ld-linux-x86-64.so.2
3 directories, 9 files
ubuntu@shenzhen:~/cpphello $ tar -tf hello.tar.gz
Dockerfile
hello
hello.cpp
lib/
lib/x86_64-linux-gnu/
lib/x86_64-linux-gnu/libm.so.6
lib/x86_64-linux-gnu/libc.so.6
lib/x86_64-linux-gnu/libstdc++.so.6
lib/x86_64-linux-gnu/libgcc_s.so.1
lib64/
lib64/ld-linux-x86-64.so.2
ubuntu@shenzhen:~/cpphello $ cat Dockerfile
# hello-world Dockerfile
FROM scratch
ADD hello.tar.gz /
CMD ["/hello"]
ubuntu@shenzhen:~/cpphello $ tar -tf hello.tar.gz
Dockerfile
hello
hello.cpp
lib/
lib/x86_64-linux-gnu/
lib/x86_64-linux-gnu/libm.so.6
lib/x86_64-linux-gnu/libc.so.6
lib/x86_64-linux-gnu/libstdc++.so.6
lib/x86_64-linux-gnu/libgcc_s.so.1
lib64/
lib64/ld-linux-x86-64.so.2
ubuntu@shenzhen:~/cpphello $ docker build -t myhello:cpp .
Sending build context to Docker daemon 8.183MB
Step 1/3 : FROM scratch
--->
Step 2/3 : ADD hello.tar.gz /
---> Using cache
---> abc22c5d0fcd
Step 3/3 : CMD ["/hello"]
---> Using cache
---> f395b074b1b7
Successfully built f395b074b1b7
Successfully tagged myhello:cpp
ubuntu@shenzhen:~/cpphello $ docker container run myhello:cpp
Hello World