小技巧
- docker的所有命令被执行时不需要加sudo的技巧
[vagrant@bogon ~]$ sudo groupadd docker
groupadd: group 'docker' already exists
[vagrant@bogon ~]$ sudo gpasswd -a vagrant docker
Adding user vagrant to group docker
[vagrant@bogon ~]$ sudo service docker restart
Redirecting to /bin/systemctl restart docker.service
[vagrant@bogon ~]$ exit
最后重新登录linux主机 : vagrant ssh
- 可以将上面的操作做成shell脚本文件, 下次开启机器只需要执行一下脚本文件即可
- 首先创建一个名为cancel_sudo.sh的文件
touch cancel_sudo.sh
- 编辑这个文件
vim ./cancel_sudo.sh
- 写入代码
#!/bin/sh sudo groupadd docker sudo gpasswd -a vagrant docker sudo service docker restart
- 保存退出后更改该文件的模式,使其可被文件拥有者执行
- 第1位 : 7 : rwx : 文件拥有者可读可写可执行该文件
- 第2位 : 4 : r-- : 文件拥有者所在组只可读该文件
- 第3位 : 4 : r-- : 文件拥有者所在组只可读该文件
chmod 744 ./cancel_sudo.sh
- 下次再开机后只需要在该脚本文件所在目录下执行
./cancel_sudo.sh
即可让docker的所有命令被执行时不需要加sudo
仿制docker官方hello-world image
-
先拉取运行一下官方的hello-world image感受下
- 拉取docker官方的 hello-world image 并执行
docker pull hello-world
- 通过该image创建并运行container
docker run hello-world
-
开始制作
// 我在家目录下 mkdir hello-world cd hello-world vim hello.c // 写入c语言程序如下 #include<stdio.h> int main() { printf("Hello my first base image.\n"); } // 保存退出后首先安装编译工具 sudo yum install gcc sudo yum install glibc-static // 然后编译c语言程序输出一个名为hello的二进制可执行文件 gcc -static hello.c -o hello // 然后创建用来制作image的Dockerfile vim Dockerfile // 写入下列代码 FROM scratch ADD hello / CMD ["/hello"] // 保存退出后开始build一个image docker build -t brannua/hello-world . // 查看当前所有的image就可以发现刚刚创建的这个image docker image ls // 根据IMAGE ID可查看对应image的分层情况,从下往上看,可看出分了两层 // 这是因为Dockerfile中第一行FROM scratch指明了不基于任何base image,所以不算做一层 docker history <IMAGE ID> // 运行image执行container docker run brannua/hello-world // 成功输出Hello my first base image.就证明该image可以变成一个container并被执行
-
总结 : 在linux主机或虚拟机上编写c语言程序,然后编译成可执行文件,创建的Dockerfile中ADD了该可执行文件,Dockerfile可被build成一个image,也就是说该image只是包含了一个可执行文件,run这个image就可以创建出一个container并被运行。
-
Finish.