Docker一些值得注意的现象(Image与Container的进一步理解)

本次测试使用Deepin OS(Kernel base debian)虚拟机

测试镜像(images):


  • sqli-labs

  • Nignx

  • Tomcat

1. 使用同一个镜像,启动多次,创建多次容器后,新创建的容器对象的状态不受旧容器状态影响。(即容器操作不会影响原始镜像从而导致新创建的容器是否受到影响的问题)

测试镜像Sqli-labs

第一次启动sqli-labs(映射端口8081):需要配置数据库信息,需要创建security数据库

sqli-labs01 映射端口8081

进入镜像中创建security数据库完成后,即可正常使用
成功使用sqli-labs镜像

第二次启动sqli-labs(映射端口8082)出现重置
sqli-labs01 映射端口8082

首次错误理解: image 与 container 的关系是 container1操作会影响至对应image,从而导致用image创建新的container2,会与container1保持相同
两容器互不影响

结论:image与container不会因为其中某一个container操作导致image创建的其他container受到影响
猜测:即使删除image若不删除container,该container可随时启动

本例使使用命令汇总

docker search sqli-labs
docker pull sqli-labs
docker run -d -it -p 8081:80  sqli-labs
docker exec -it containerID /bin/bash
(sqli-labs)>mysql -u root -p 
(sqli-labs)>create database security;
(sqli-labs)>Ctrl+P+Q
docker run -d -it -p 8082:80 -p 8083:3306 sqli-labs
docker ps -a

2. Image删除与Container删除的关系

测试镜像Nginx

首先 启动创建Nginx容器,并可以成功对Nginx进行访问


成功启动Nginx

其次 进行宿主机查看image与container状态


宿主机镜像与容器状态

再次 对Nginx镜像删除并查看Container状态
root@sccc-PC:/home/sccc# docker rmi nginx
Error response from daemon: conflict: unable to remove repository reference "nginx" (must force) - container 7973c0eb8d59 is using its referenced image 0e901e68141f

本以为是container未停止的原因,所以停止后直接删除image,也是不可以镜像删除

root@sccc-PC:/home/sccc# docker rmi nginx
Error response from daemon: conflict: unable to remove repository reference "nginx" (must force) - container 7973c0eb8d59 is using its referenced image 0e901e68141f
结论:container无论运行或停止状态都依赖于image的存在,若不先对container进行删除,则就无法删除对应的image本例使使用命令汇总

本例使使用命令汇总

docker search nginx
docker pull nginx
docker run -d -it -p 8804:80  nginx
docker exec -it containerID /bin/bash
docker images
docker rmi nginx
docker stop nginx(ContainerID)
docker rmi nginx
docker inspect nginx(ContainerID)
docker rm nginx(ContainerID)
docker rmi nginx

如果不对容器进行停止,则无法直接删除容器

docker rm 7973c0eb8d59 
Error response from daemon: You cannot remove a running container 7973c0eb8d5993e80e04ad4a4e322f4b7675ba9e1693bc928e28ad7c3560dbb6. Stop the container before attempting removal or force remove

3. Container使用过程中的一些其他坑点

测试镜像Tomcat
  • 镜像阉割问题(默认的tomcat页面不存在,需要进行拷贝处理)

首先 打开后进行访问发现出现Not Found 404并没有出现Tomcat首页问题


Not Found 404

无法找到Tomcat主页后,进行docker中查看配置文件,查看根路径位置


根路径查询

查询到根路径后,进入文件夹发现为空文件,所以会出现Not Found,有相同名称文件夹,查看发现是备份文件,进行copy进根路径文件夹,再次进行访问
成功访问到Tomcat 首页

本例使使用命令汇总

docker search tomcat  #搜索镜像
docker pull tomcat  #下拉镜像
docker run -d -it -p 8800:80 tomcat  #端口映射
docker exec -it ContainerID /bin/bash  #进入容器终端
(tomcat)find / -name tomcat    #查找tomcat文件夹位置
(tomcat)cat tomcat/conf/server.xml  #查看服务器配置文件,查看网站根目录
(tomcat)cp -r webapps.dist/ webapp/  #拷贝文件夹至根目录
(tomcat)rm -r webapp/*
(tomcat)cp -r webapps.dist/* webapp/ #拷贝文件夹文件至根目录
  • 命令缺失问题


    查询IP地址

    针对查询IP方法汇总:

(tomcat) ifconfig #失效
(tomcat) ip addr #失效
(tomcat) hostname -i 
(docker) docker inspect ContainerID

最后使用docker cp命令可以对容器的文件copy至宿主机

docker cp a6958e3f749f:/var/www/html/sql-connections/db-creds.inc ./

你可能感兴趣的:(Docker一些值得注意的现象(Image与Container的进一步理解))