实例 : 查看Docker容器内文件系统

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: dockfile ; docker container ; docker images
目的:下载 docker images 之后,了解 images 内部目录、文件结构,以及容器内部程序运行情况

方法:

1. 使用docker exec (最简单)

nsenter命令类似,docker exec 命令可以在已经运行的容器运行新的进程(容器必须已经运行才可以,否则会报错),可以运行/bin/bash进入容器:

[arthur@localhost Downloads]$ sudo docker ps
[sudo] password for arthur: 
CONTAINER ID   IMAGE                COMMAND       CREATED       STATUS       PORTS     NAMES
09b6673f175a   hicstuff:v1.0        "/bin/bash"   2 hours ago   Up 2 hours             quizzical_chatelet
c67a7e98646a   koszullab/hicstuff   "/bin/bash"   4 hours ago   Up 4 hours             sleepy_bhabha
[arthur@localhost Downloads]$ sudo docker exec -it  quizzical_chatelet /bin/bash
(base) root@09b6673f175a:/app# pwd
/app
(base) root@09b6673f175a:/app# ls
LICENSE      __init__.py  distance_law.py  io.py     pipeline.py       test_commands.py     test_filter.py    tests
MANIFEST.in  commands.py  filter.py       iteralign.py  requirements.txt  test_digest.py     test_hicstuff.py  version.py
Makefile     cutsite.py   hicstuff       log.py     setup.cfg       test_distance_law.py  test_io.py       view.py
README.md    digest.py      hicstuff.py       main.py     setup.py       test_doctests.py     test_pipeline.py
2. 使用快照(snapshotting)
#查看已经运行的容器,记录要查看容器的 ID 
$ docker ps
#创建新的 images 
$ docker commit  ID  NewImagesName
#通过 `bash` 进入新镜像
$ docker run -it NewImagesName /bin/bash
#删除新的镜像 NewImagesName
$ docker rmi NewIamgesName
3. 使用 ssh

如果需要持续性连接到容器,可以在容器内安装sshd,并运行sshd

#查看 容器 port
$ docker ps
#
$ docker run -d -p PortNumber ContainerName /usr/sbin/sshd -D
4. 使用nsenter
5. 覆盖默认的 ENTRYPOINT
$ docker run --rm -it --entrypoint=/bin/bash NameofImage
#########################################################################
--entrypoint string              Overwrite the default ENTRYPOINT of the image

#覆盖默认 entrypoint  
[arthur@localhost Downloads]$ sudo docker run --rm -it --entrypoint=/bin/bash koszullab/hicstuff  
[sudo] password for arthur: 
(base) root@1f60e1415681:/app# pwd
/app
(base) root@1f60e1415681:/app# ls
LICENSE      __init__.py  distance_law.py  io.py     pipeline.py       test_commands.py     test_filter.py    tests
MANIFEST.in  commands.py  filter.py       iteralign.py  requirements.txt  test_digest.py     test_hicstuff.py  version.py
Makefile     cutsite.py   hicstuff       log.py     setup.cfg       test_distance_law.py  test_io.py       view.py
README.md    digest.py      hicstuff.py       main.py     setup.py       test_doctests.py     test_pipeline.py
(base) root@1f60e1415681:/app# 

#未覆盖
[arthur@localhost Downloads]$ sudo docker run -it koszullab/hicstuff 
[sudo] password for arthur: 
INFO :: generated new fontManager
usage:
    hicstuff [-hv] <command> [<args>...]
[arthur@localhost Downloads]$ sudo docker run -it koszullab/hicstuff  /bin/bash
INFO :: generated new fontManager
Unknown command.
usage:
    hicstuff [-hv] <command> [<args>...]
[arthur@localhost Downloads]$ 
#运行其他 images 
[arthur@localhost Downloads]$ sudo docker run -it hicpro:homo.v1
root@5bf6508e2b7c:/# exit
exit
[arthur@localhost Downloads]$ sudo docker run -it nservant/hicpro:v3.01
root@fb00a89cb150:/# exit
exit
#原镜像运行 commit 之后的
[arthur@localhost Downloads]$ 
[arthur@localhost Downloads]$ sudo docker run -it hicstuff:v1.0 
[sudo] password for arthur: 
(base) root@4de5fd7f7bae:/app# pwd
/app
(base) root@4de5fd7f7bae:/app# ls
LICENSE      __init__.py  distance_law.py  io.py     pipeline.py       test_commands.py     test_filter.py    tests
MANIFEST.in  commands.py  filter.py       iteralign.py  requirements.txt  test_digest.py     test_hicstuff.py  version.py
Makefile     cutsite.py   hicstuff       log.py     setup.cfg       test_distance_law.py  test_io.py       view.py
README.md    digest.py      hicstuff.py       main.py     setup.py       test_doctests.py     test_pipeline.py

拓展:

  1. 镜像构建 dockfile 存在差别:

    koszullab/hicstuff 镜像为 from conda , nservant/hicpro from ubuntu

  2. 原镜像 koszullab/hicstuff commit 之后与原镜像的差别:登陆方式出现差别

Reference :
[1] exploring Docker container's file system.stack overflow.

目录
相关文章
|
2月前
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
247 58
|
2月前
|
缓存 Java Docker
如何对应用代码进行优化以提高在Docker容器中的性能?
如何对应用代码进行优化以提高在Docker容器中的性能?
203 1
|
1月前
|
安全 持续交付 Docker
Docker:重塑现代软件交付的容器引擎
Docker:重塑现代软件交付的容器引擎
|
1月前
|
存储 持续交付 Docker
Docker:轻量级容器技术重塑应用交付
Docker:轻量级容器技术重塑应用交付
|
1月前
|
Kubernetes Cloud Native 持续交付
Docker:轻量级容器化技术解析
Docker:轻量级容器化技术解析
|
1月前
|
运维 测试技术 Docker
Docker:轻量级容器化技术革命
Docker:轻量级容器化技术革命
|
1月前
|
存储 持续交付 Docker
Docker:颠覆传统开发的轻量级容器革命
Docker:颠覆传统开发的轻量级容器革命
|
2月前
|
Docker 容器
熟悉Docker容器管理命令:start、stop与restart详细使用指南
掌握这些Docker容器管理命令对于维护应用程序的正常运行至关重要。在实际操作中,应注意容器配置、关联资源以及日志等信息,确保各项操作都能够顺畅并且安全地执行。
274 0
|
2月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
254 57