今天继续上次的内容,补充容器的其他相对高大上一些的操作,其实也不难,关键要静下心来看。这次有的命令会进入容器内部。
tip:很多时候容器或镜像的名字或ID都起相同作用。
概念
- 提交容器:把原始镜像和对原始镜像的操作固化,形成一个新的镜像。
- 进入容器:比如说我用Docker运行了一个Ubuntu系统,那要看容器里面的Ubuntu系统就要进入容器
- 终端:一般就是指屏幕。输出到终端就是在屏幕上显示。
基本命令
sudo docker top $container #查看容器$container内部的进程,注意是容器内,我也感觉这个有点奇怪
sudo docker inspect $container #查看$container的信息,可加入 -f 过滤,具体见下面例子
sudo docker logs $log #以后台守护形式启动的容器,程序输出结果不在终端直接显示,这时可通过日志查看
sudo docker exec $container $cmd #让容器$container内部执行$cmd命令
sudo docker commit $container #把当前容器提交成镜像,会生成一个新的镜像
sudo docker export -o $des $container #把container导出成$des
sudo docker export $container > $des #同上
sudo docker import -i $source #导入$source
sudo docker import < $source #同上
实践
查看容器进程和状态
sudo docker run --name web nginx
sudo docker top web #打开一个新的终端输入,因为运行的web会占用原来的终端
sudo docker inspect -f "{{ .State }}" web
sudo docker inspect web
查看容器日志
sudo docker run -d --name log_demo ubuntu /bin/bash -c 'for((i=0;i<5;i++));do echo "time $i";sleep 1; done;' #本地没有ubuntu镜像会先下载
sudo docker logs log_demo
在容器中执行命令
sudo docker start web #开始之前停止的容器
sudo docker exec web ls /var/log/nginx #查看容器中 /var/log/nginx 下的文件
sudo docker exec web tail /var/log/nginx/access.log #查看容器中/var/log/nginx/access.log的内容
第3条命令没有在终端输出信息,以后学多了再回头看怎么回事吧。书上写的是能输出
提交容器更改与导入导出容器
sudo docker run -it centos:7 /bin/bash #安装个centos操作系统,并进入内部
yum install -y crontabs
exit
sudo docker ps -l -a #-l 选项列出最近(latest)的容器
sudo docker images
sudo docker commit gl/crontab:latest
sudo docker images
至此,Docker的容器知识了解差不多了,下面会写一下更有用更有趣的数据卷和网络。