Docker是一个开源的应用容器引擎,开发者可以打包他们应用以及依赖包到一个可移植的容器中,然后发布到任何其它平台上去。 容器是沙箱机制,相互之间没有任何接口。
0. Docker的使用场景:
项目部署到测试,生产环境时,都需要部署一大堆依赖的软件和工具,出现问题的几率较大,需要较多时间。则可以把环境和项目打包成镜像(image),push到镜像仓库,在部署时直接pull镜像(image), 运行为容器(Container), 则运行环境和项目均已完备。既可以节约时间,又可以保证各个依赖项软件版本的同一。
1. Docker结构:
Docker采用c/s架构。 Docker daemon作为服务器接受来自客户的请求(创建,运行,分发容器)。客户端和服务器可以运行在一个机器上,也可以通过socket或者RESTful API来远程通信。
镜像仓库中可以存储多种image.
2. Docker image(镜像)和Container(容器):
镜像(image)其实就是一个文件系统,它是只读的,相当于class.负责存储数据。
容器(Container)可以理解是运行时的实例。相当于class object. 它通过image创建,是可读写的。负责运行。
3. image(镜像)使用简介:
3.1:从仓库获取镜像:
sudo docker pull
例如:
sudo docker pull paddlepaddle/paddle-lite:2.0.0_beta
sudo docker pull paddlepaddle/paddle-lite:latest
从仓库paddlepaddle/paddle-lite中获取tag分别为2.0.0_beta和latest的image.
3.2:显示本地image:
sudo docker images
结果与获取时的仓库名和tag名对应。
REPOSITORY TAG IMAGE ID CREATED SIZE
paddlepaddle/paddle-lite 2.0.0_beta 19cbdbf8f23d 3 years ago 12GB
paddlepaddle/paddle-lite latest 19cbdbf8f23d 3 years ago 12GB
3.3:删除本地image:
docker rmi
例如:
docker rmi 19cbdbf8f23d
3.4: 基于image新建一个容器并启动:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run [参数] 镜像名称:tag 执行的命令
常用参数:
-i 保持和docker 容器内的交互,启动容器时,运行的命令结束后,容器依然存活,没有退出(默认是会退出,即停止的) 通常与 -t 同时使用
-t 为容器的标准输入虚拟一个tty
-v: Bind mount a volume (挂载宿主机的一个目录)
-v 宿主机目录:容器内目录
其中,容器内目录不能是相对路径
可以在最后加入命令:例如: /bin/bash
则在容器内执行/bin/bash命令
IMAGE:指定要启动的容器基于哪个Image。使用 REPOSITORY:Tag的格式。
例如:
sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
paddlepaddle/paddle-lite latest 19cbdbf8f23d 3 years ago 12GB
sudo docker run -it -v paddle-lite:/Paddle_Lite paddlepaddle/paddle-lite:latest /bin/bash
4. 容器 (Container):
Container相当于image运行实例。
4.1: 列出所有Container:
docker ps -a
结果类似:
CONTAINER ID IMAGE COMMAND
b7ea61d3da25 paddlepaddle/paddle-lite:latest "/bin/bash"
IMAGE: 就是创建Container是基于的Image。
4.2: 退出容器/停止容器:
在容器bash内 ,输入exit
或使用: docker stop CONTAINER_ID
4.3:重新进入停止的容器:
sudo docker start CONTAINER_ID -i
如果加入-i 则启动容器并进入交互模式。
4.4:删除容器:
sudo docker rm CONTAINER_ID
注意,不能删除正在运行的Container.