1.制作镜像
docker build -t helloworld .
2.查看镜像
docker image ls
3.查看启动的容器
docker ps
4.容器镜像起一个完整的名字
docker tag helloworld qwetty/helloworld:v1
5.上传镜像到docker hub
docker push qwetty/helloworld:v1
6.进入容器里
docker exec -it 4ddf4638572d /bin/sh
7.将运行的容器提交成一个镜像
docker commit 4ddf4638572d qwetty/helloworld:v2
8.查看容器的pid
docker inspect --format '{{ .State.Pid }}' 93fd78260bd1
1988
9.docker exec 进入容器原理
通过查看宿主机的 proc 文件,看到这个 1988进程的所有 Namespace 对应的文件:
ll /proc/1988/ns/
总用量 0
lrwxrwxrwx 1 root root 0 12月 4 09:41 ipc -> ipc:[4026532498]
lrwxrwxrwx 1 root root 0 12月 4 09:39 mnt -> mnt:[4026532417]
lrwxrwxrwx 1 root root 0 12月 4 09:39 net -> net:[4026532501]
lrwxrwxrwx 1 root root 0 12月 4 09:41 pid -> pid:[4026532499]
lrwxrwxrwx 1 root root 0 12月 4 09:41 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 12月 4 09:41 uts -> uts:[4026532497]
一个进程的每种 Linux Namespace,都在它对应的/proc/[进程号]/ns 下有一个对应的虚拟文件,并且链接到一个真实的 Namespace 文件上。这也就意味着:一个进程,可以选择加入到某个进程已有的 Namespace 当中,从而达到“进入”这个进程所在容器的目的,这正是 docker exec 的实现原理。这个操作所依赖的,乃是一个名叫 setns() 的 Linux 系统调用。
10.docker commit
就是在容器运行起来后,把最上层的“可读写层”,加上原先容器镜像的只读层,打包组成了一个新的镜像。下面这些只读层在宿主机上是共享的,不会占用额外的空间。
11.查看容器镜像详细信息
docker image inspect 4811aceb2e18
网友评论