docker笔记(三)

小技巧

  • 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.

在这里插入图片描述

发布了75 篇原创文章 · 获赞 32 · 访问量 4428

猜你喜欢

转载自blog.csdn.net/Brannua/article/details/105253044