进入容器内
前面一章节,我们通过容器的一些基本命令安装了nginx,并访问成功。


docker file run 多个 docker cp多个文件_docker镜像导出与导入


安装完nginx,肯定是要往nginx的网站根目录下放置文件的。
那么问题来了,怎么进入这个安装了nginx的容器里面呢?
docker提供了进去容器里面的命令,一行命令即可:
docker exec -it d951bde34c9b /bin/bash

执行后,可以看到命令终端左侧发生了变化,效果如下:


docker file run 多个 docker cp多个文件_docker cp拷贝文件_02


这说明我们已经进入了容器内部。
docker exec命令说明:

  • docker exec 代表在运行的容器中执行命令。
  • -it代表给容器分配一个可以交互的终端
  • d951bde34c9b 是我们容器的id,这个根据自己的容器id自己去设置
  • /bin/bash 表示在容器中运行bash

进入到容器后,我们找到了nginx.conf文件,发现网站的根目录地是/usr/share/nginx/html,往里面放一个测试的html文件试试吧。
新建一个内容为111的test.html文件,如下:


docker file run 多个 docker cp多个文件_docker 导出_03


紧接着我们访问一下文件,访问正常。


docker file run 多个 docker cp多个文件_docker宿主机访问容器_04


至此,我们已经成功的进入到容器内部,并且手动创建了一个自己的文件。
进入了容器如果你想退出当前容器,输入exit,便会退出容器的交互页面,会切换到宿主机的交互终端页面,如下:


docker file run 多个 docker cp多个文件_docker file run 多个_05


手动创建太麻烦,我要copy!copy!
如果文件很多,手动创建太麻烦,要是能从我们的服务器上把文件复制到容器里面该多好。
技术最喜欢的就是copy了。
复制的操作docker肯定也是提供了的,不过在说复制操作之前,我们先来明确一个名词--宿主机 什么是宿主机?
容器是寄生在某个机器上的,在哪个机器上启动容器,那这个机器就是容器的宿主机。
我是你的宿主机,你是运行在我身上的容器,就好像电影毒液里面男主一样,毒液寄生在汤老湿身上。


docker file run 多个 docker cp多个文件_docker file run 多个_06


好了,言归正传!
把宿主机中的文件拷贝到容器的目录里,命令格式如下:

docker cp 宿主机上的目录 容器ID:容器里面的目录

比如,我们要将宿主机的文件/tmp/test-docker.txt复制到ID为d951bde34c9b的容器的目录/var/里去,同样是一行命令,如下:

docker cp /tmp/test-docker.txt d951bde34c9b:/var/
命令说明如下:

  • docker cp :用于容器与主机之间的数据拷贝
  • /tmp/test-docker.txt 为宿主里面的文件路径
  • d951bde34c9b为容器id
  • /var/为要拷贝到容器内的文件路径。


学会了把宿主内的文件拷贝到容器中去,那就顺便学习下怎么把容器中的文件拷贝到宿主机的目录里。
命令格式:

docker cp 容器ID:容器里面的目录 宿主机的目录
比如,我们要将容器内的文件/var/test-docker.txt复制到宿主机的/tmp/test文件夹下,命令如下:

docker cp d951bde34c9b:/var/test-docker.txt /tmp/test
命令说明如下:

  • d951bde34c9b为容器id
  • /var/test-dcker.txt 为容器里面的文件路径
  • /tmp/test为要拷贝到宿主内的文件路径。

学会了拷贝的命令,那我们就可以方便地将我们的文件拷贝到容器中去了。挂载目录,将容器与宿主机目录共享目
虽然我们可以手动复制文件到容器里面,但还是要每次都手动去执行cp操作。
如果要运行多个一模一样的容器,那岂不是每次都手动去拷贝文件到容器里?
另外,一个比较严重的问题,我的容器一旦被删除,我容器里面的一些运行日志啥的也会跟着没了,如果不希望他们丢失,有没有什么办法来解决这个问题?


docker file run 多个 docker cp多个文件_docker宿主机访问容器_07


办法,就是把容器的目录共享到宿主机里面,让宿主机的目录和容器的目录进行绑定,这样,当我们容器被销毁的时候,文件还在宿主机上哦。
命令格式:

docker run -v 本地目录:容器目录
来,上代码:

docker run -itd --name my-nginx -v /root/docker/test:/data nginx

命令说明:
上面的命令就是在容器启动的时候,将宿主机的/root/docker/test和容器的/data目录进行绑定,只需要在docker run命令后面加上-v的选项参数,填写对应的目录即可。
容器和宿主机共享目录效果呈现:


docker file run 多个 docker cp多个文件_docker cp拷贝文件_08


导出容器和导入容器
跟着上面的操作,咱们捣鼓了半天容器的操作。
突然,同事说,把你的容器导出来给他一下,应该怎么做?
或者,领导让你把你的docker容器本地备份一份,你需要怎么做?
这时候,我们可以用到容器的导出操作,将容器导出为标准的rar包格式的文件:

docker export my-nginx-1 > my-ngin-1.rar

将容器名称为my-nginx-1的容器导出到本地,名称为my-ngin-1.rar。
效果如下:


docker file run 多个 docker cp多个文件_docker宿主机访问容器_09


然后把这个压缩包本地存储起来或者发给同事都可以~


docker file run 多个 docker cp多个文件_docker镜像导出与导入_10


学完了导出,肯定要来学习下导入,在导入的时候,docker会把tar包文件作为镜像文件来导入。
命令如下:

docker import my-ngin-1.rar my-import-nginx
命令说明:

docker import tar文件 导入后的镜像文件名


docker file run 多个 docker cp多个文件_docker file run 多个_11


然后,我们通过查看镜像的命令可以看到,这个镜像是存在的,


docker file run 多个 docker cp多个文件_docker cp拷贝文件_12