前面学习的管理操作都是外部操作,下面将学习Docker的内部操作,包含获取容器的内部信息以及在容器内部运行命令。
1.依附容器
依附操作attach通常用在由docker start或者docker restart启动的交互型容器中。由于docker start启动的交互型容器并没有具体终端可以依附,而容器本身是可以接收用户交互的,这时就需要通过attach命令来将终端依附到容器上。
创建交互型容器:
root@baida:~# docker run -i -t --name=test_ubuntu ubuntu /bin/bash
root@21426af88561:/# ls
bin dev home lib32 libx32 mnt proc run srv tmp var
boot etc lib lib64 media opt root sbin sys usr
root@21426af88561:/# exit
exit
退出后查看正在运行的容器:
root@baida:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
启动后查看,并依附容器:
root@baida:~# docker start test_ubuntu
test_ubuntu
root@baida:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
21426af88561 ubuntu "/bin/bash" 10 minutes ago Up 23 seconds test_ubuntu
root@baida:~# docker attach test_ubuntu
root@21426af88561:/# ls
bin dev home lib32 libx32 mnt proc run srv tmp var
boot etc lib lib64 media opt root sbin sys usr
后台型容器无法依附终端,因为它本身不接受用户的交互输入。
2.查看容器日志
对于交互型容器,由于本身就存在交互终端或者可以通过attach依附终端,所以查看容器的配置信息或者调试程序比较方便。
对于后台型容器,它不存在交互终端,要获取其信息,势必需要其他的方法,Docker给我们提供了logs、inspect等方法。docker logs命令用于查看容器的日志,它将输出到标准输出的数据作为日志输出到运行docker logs命令的终端上。
首先,创建一个不断输出一些内容的后台型容器:
root@baida:~# docker run -d --name test_logs ubuntu /bin/bash -c 'for((i=0;1;i++));do echo $i;sleep 1;done;'
65c34495aec784a2c625f7a4cd35f7c08ad3e581cdd29364e61712948db7ceb0
这是一个包含训话输出自然数的应用程序的容器,我们可以使用logs来查看其输出:
root@baida:~# docker logs -f test_logs
0
1
2
3
-f 实时查看
--tail=5 查看最后的n行日志
-t 查看日志产生的时刻
3.查看容器进程
docker inspect用于查看容器的配置信息,包含容器名、环境变量、运行命令、主机配置网络配置和数据卷配置等:
docker inspect test_logs
使用-f或者--format格式化标志,可以查看指定部分的信息。
查询容器的运行状态:
docker inspect --format='{{.State.Running}}' test_logs
查询容器的网络设置:
docker inspect --format='{{.NetworkSettings}}' test_logs
也可以同时查询多个信息,比如容器名和运行状态:
docker inspect --format='{{.Name}} {{.State.Running}}' test_logs
/test_logs false
4.容器内执行命令
在容器启动的时候,通常需要指定其需要执行的程序,然而有时候我们需要在容器运行之后中途启动另一个程序。我们可以用docker exec命令在容器中运行新的任务它可以创建两种任务:后台型任务和交互型任务。后台型任务没有用户交互终端,交互型任务具有和用户交互的输入输出终端。
建立一个后台型任务,需要加上-d标志:
docker exec -d test_ubuntu touch /et/cnew_config_file
创建交互型任务,需要加上-t -i 标志:
docker exec -t -i test_ubuntu /bin/bash
注意,执行命令前需要确保容器已经启动。
5.容器的导入和导出
用户可以把容器提交到公共服务器上,还可以将容器导出到本地文件系统中。我们也可以将导出的容器重新导入到Docker运行环境中。Docker的导入和导出分别由import命令和export命令完成。
1.创建一个容器 2.安装需要的软件,配置系统环境 3.使用docker export命令导出容器 docker export test_logs > my_container.tar docker export命令会将容器以tar包的格式导出到标准输出。
反过来,我们可以使用docker import命令导入一个本地的tar包作为镜像 -c 应用docker 指令创建镜像 -m 提交时的文字说明
docker import my_container.tar test_1
从归档文件my_container.tar创建镜像,命名为test_1,将打包的容器导入为一个镜像。 import 表示从标准输入读取容器内容,我们把my_container.tar的内容传给了标准输入,res和tag分别代表生成的镜像和标记。 除了导入本地文件系统的tar包成为一个镜像外,我们还可以使用一个url来导入网络上的容器: docker import url res:tag 接着就可以通过docker run命令使用导入的镜像创建需要的容器。
🐟~