我已经安装了Docker并使用命令运行了一些Ubuntu映像:
sudo docker run ubuntu
我想在其上创建一些文本文件,并在下次运行相同的图像时找到它。如何实现?
上。
连接到码头工人时遇到问题。我正在运行码头工人
docker ps -a
aef01293fdc9 ubuntu "/bin/bash" 6 hours ago Up 6 hours priceless_ramanujan
由于它是Up
模式,我想我不需要执行命令:
docker start priceless_ramanujan
所以,我运行命令attach
docker attach priceless_ramanujan
并且在命令不返回时输出中没有任何内容。
为什么我无法到达容器的bash?
简单的例子:
$ docker run -it ubuntu
root@4d5643e8c1a8:/# echo "test" > test.txt
root@4d5643e8c1a8:/# cat test.txt
test
root@4d5643e8c1a8:/# exit
exit
$ docker run -it ubuntu
root@cdb44750bffc:/# cat test.txt
cat: test.txt: No such file or directory
root@cdb44750bffc:/#
码头工人运行image_name
此命令根据提供的image_name
创建并启动一个新容器。如果未为容器设置名称,则 docker 会生成并分配一个随机名称。在上面的示例中,基于 ubuntu
创建了 2 个容器。
通过
docker ps -a
我们可以看到创建的随机名称modest_jennings
和optimistic_leakey
:$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cdb44750bffc ubuntu "/bin/bash" About a minute ago Exited (1) 4 seconds ago optimistic_leakey 4d5643e8c1a8 ubuntu "/bin/bash" 2 minutes ago Exited (0) 2 minutes ago modest_jennings
cat test.txt
第二次失败,因为该文件不存在。容器从"干净"的ubuntu
映像开始。
实际上,我们只在modest_jennings
内部创建了test.txt
。
码头工人启动container_name
此命令将启动已停止的容器。因此,在我们的例子中,文件仍然存在:
$ docker start modest_jennings
modest_jennings
$ docker attach modest_jennings
root@4d5643e8c1a8:/# cat test.txt
test
root@4d5643e8c1a8:/#
码头工人提交container_name
image_name
此命令用于创建新映像,以便以后可以使用它并基于该映像运行容器。继续我们的例子...
$ docker commit modest_jennings my_ubuntu
sha256:a4357f37153ac0b94e37315595f1a3b540538283adc3721df4d4e3b39bf8334f
$ docker run -it my_ubuntu
root@2e38616d532a:/# cat test.txt
test
root@2e38616d532a:/#
如果需要自定义镜像,可以创建一个 Dockerfile
`FROM ubuntu:16.04
ADD ./test.txt /tmp/`
在你可以docker build -t ubuntu:custom .
构建它之后最后运行自定义映像docker run --name myubuntu ubuntu:custom sleep 3000
您可以使用docker exec -it myubuntu /bin/bash
和more /tmp/test.txt
检查文件