1. 操作环境
1. CentOS:
- CentOS-7-x86_64-DVD-1611
2. Docker:
- Docker version 1.12.6, build 88a4867/1.12.6
3. busybox:
- latest
2. 启动一个容器
启动一个容器,还是以之前我们所下载的busybox镜像为例来进行说明。
在docker中镜像是静态的,是不能被拿来直接运行的,而我们要想运行镜像中的系统,那么我们就必须得把镜像放到容器中来运行才行。
创建容器的指令为:
docker run -dit busybox
创建的结果为:
其中新创建的容器di为:
ecef8319d2c8d25d9c9b1e70b9a4c523c466d2f5e825ae651267f184c895813a
查看新创建的容器:
docker ps
创建的结果如下:
3. 上传文件
上传文件还是以之前所上传到CentOS操作系统中的文本文件test.txt为例来进行说明。
文件上传指令格式:
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
OPTIONS说明:
- -L :保持源目标中的链接
上传文件
docker cp /root/test.txt ecef8319d2c8:/root/
该命令的意思是将当前操作系统(CentOS)家目录(root)下的文件test.txt拷贝到容器id为ecef8319d2c8的家目录(root)文件夹下。
4. 登录容器
1. 通过attach命令登录容器
- attach登录
要想查看上传的结果,那么这就得需要我们登录到目标容器中去,登录目标容器的方法有两个,分别是通过attach命令或者是exec命令。
通过attach登录容器的语法:
docker attach [OPTIONS] CONTAINER
要attach上去的容器必须正在运行才行,但是这样登录上去的容器有一个缺点,那就是一旦我们执行退出操作(比如说当我们执行exit指令),正在运行的容器也立即停止了。
attach登录容器的指令为:
docker attach ecef8319d2c8
- W3C官方挖坑
这里存在一个误区有必要科普一下,那就是在docker的W3C的官方文档中是这样介绍的,那就是当执行下面的命令
docker attach –sig-proxy=false ecef8319d2c8
后,再次执行CTRL-D不会关闭容器,但是实际操作并非如此,比如说我们在执行前查看一下正在运行的容器:
docker ps
显示的结果如下:
当我们执行了下面的命令
docker attach –sig-proxy=false ecef8319d2c8
然后再点击CTRL-D,显示的结果如下:
结果显示容器已经退出了,此时我们再次查看正在运行着的容器
docker ps
上面显示的结果为没有任何容器正在执行,这说明容器确实已经关闭了。
在不加–sig-proxy=false时,当我们执行CTRL-C命令时,容器也不会自动关闭,这个大家可以去做测试,我这里就不再复述了。
总之大家在登录时一定要注意这一误区,以免误人子弟。
2. 通过exec命令登录容器
- exec登录
exec登录语法格式如下:
docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
OPTIONS说明:
- -d :分离模式: 在后台运行
- -i :即使没有附加也保持STDIN 打开
- -t :分配一个伪终端
exec登录容器指令为:
docker exec -it ecef8319d2c8 /bin/sh
查看上传的文件:
ls /root/
可以看到,文件确实是已经上传成功了,如下图:
- 优点
当我们执行CTRL-D或者exit命令后,退出容器,而该容器仍然在后台运行中。
查看后台运行的容器:
docker ps
结果如下:
我们可以看到,容器仍然在后台照样运行中,所以说在连接容器的时候,我极力推荐大家采用这种方式。
5. 下载文件
- 删除CentOS中的test.txt文件
在下载busybox中的test.txt文件前,为了不致使CentOS中原有的test.txt文件出现干扰,所以说我们可以先删除该文件
删除指令如下:
rm -rf /root/test.txt
- cp指令下载
cp指令下载语法格式
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
cp指令下载
docker cp ecef8319d2c8:/root/test.txt /root/
查看下载的结果:
ll
结果如下: