为什么Docker技术会产生并成为热点?先看看Docker之前出现的若干工具。
步骤多 启动慢
Linux 容器技术能够让您对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离。从而让您可以在不同环境(如开发、测试和生产等环境)之间轻松迁移应用,同时还可保留应用的全部功能。
相比上面的两种工具,Docker更加轻便、实用。
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
容器和镜像的区别:容器最上面一层可读写,镜像只读
runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#
–name: 命名
-t: 在新容器内指定一个伪终端或终端。
-i: 交互模式运行。
it选项经常一起使用。
-P:将容器内部使用的网络端口映射到我们使用的主机上。
-p 设置端口
我们可以通过运行 exit 命令或者使用 CTRL+D 来退出容器。
使用以下命令创建一个以进程方式运行的容器
加了 -d 参数默认不会进入容器
runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
docker version
docker info
docker --help
$ docker images
tag 是镜像版本,镜像名字是 image_name:tag ,默认tag是latest
$ docker search image_name[:tag]
在docker hub上查询对应镜像
–filter=star=?:限制star数量的下限
$ docker pull image_name[:tag]
$ docker rmi image_name[:tag]
$ docker rmi -f $(docker images .....)
$ docker run
$ docker start/stop/restart
$ docker kill
$ docker ps
查看正在运行的容器。
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
如果要导出本地某个容器,可以使用 docker export 命令。
$ docker export 1e560fca3906 > ubuntu.tar
导出容器 1e560fca3906 快照到本地文件 ubuntu.tar。
这样将导出容器快照到本地文件。
可以使用 docker import 从容器快照文件中再导入为镜像。
$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1 ;将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1
$ docker import http://example.com/exampleimage.tgz example/imagerepo ;根据URL导入
删除容器使用 docker rm 命令:
$ docker rm -f 1e560fca3906
$ docker rm $(docker ps....)
下面的命令可以清理掉所有处于终止状态的容器。
$ docker container prune
$ docker run -d
$ docker logs -f -t --tail container_id
$ docker top container_id
$ docker inspect container_id
$ docker cp container_id:conatiner_path/file host_path
$ docker commit
Docker数据卷用来将容器中的数据持久化,保存容器的数据。
在用docker run命令的时候,使用-v标记可以在容器内创建一个数据卷。多次重复使用-v标记可以创建多个数据卷。
$ docker run -it -v /host_path:/container_path container_id
可用docker inspect 查看数据卷(volumes)的设置。
可以设置在容器内的数据卷只读,只可在宿主机修改。
$ docker run -it -v /host_path:/container_path:ro container_id
容器之间可以互相挂载,实现数据的传递依赖。
容器需要命名。
挂载是双向的,父容器和子容器之间的数据可以双向共享。
$ docker run -it --volume-from father_container_name container_id
父容器的消失不会导致数据卷丢失数据,直到没有容器使用它时,数据卷的生命周期才结束。
什么是 Dockerfile?
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
可以用docker build+DockerFile生成镜像。
利用VOLUME关键字,可添加多个数据卷。用docker inspect可以查看run容器之后的宿主机对应路径。