一、简介
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)
三要素:镜像、仓库、容器
- 镜像:将应用程序及其依赖、环境、配置打包在一起构成镜像。Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
- 容器
-
Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。
-
它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
-
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
-
容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
-
- 仓库
-
仓库(Repository)是集中存放镜像文件的场所。
-
仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
-
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
-
最大的公开仓库是 Docker Hub(https://hub.docker.com/),
-
存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云 等
-
-
Docker结构
服务端:接收命令或远程请求,操作镜像或容器
客户端:发送命令或者请求到Docker服务端
Docker架构
二、Docker常用命令
1. 镜像操作
1.1 镜像名
-
镜名称一般分两部分组成:[repository]:[tag]。
-
在没有指定tag时,默认是latest,即最新版本的镜像
如图,代表mysql 8.028版本的镜像
1.2 镜像操作
拉取镜像
例:拉取最新版本的nginx镜像
docker pull nginx
查看镜像
docker images
保存镜像到磁盘
语法格式:
docker save -o [保存的目标文件名称] [镜像名称]
例:
docker save -o /usr/local/nginx.tar nginx
删除镜像
docker rmi nginx
加载镜像
docker load -i /usr/local/nginx.tar
2. 容器操作
容器保护三个状态:
-
运行:进程正常运行
-
暂停:进程暂停,CPU不再运行,并不释放内存
-
停止:进程终止,回收进程占用的内存、CPU等资源
其中:
-
docker run:创建并运行一个容器,处于运行状态
-
docker pause:让一个运行的容器暂停
-
docker unpause:让一个容器从暂停状态恢复运行
-
docker stop:停止一个运行的容器
-
docker start:让一个停止的容器再次运行
-
docker rm:删除一个容器
例:创建nginx容器
docker run --name mynginx -p 80:80 -d nginx
命令解读:
-
docker run :创建并运行一个容器
-
--name : 给容器起一个名字,比如叫做mynginx
-
-p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
-
-d:容器启动后在后台运行
-
nginx:镜像名称
查看启动的容器
docker ps # 查看所有运行的容器 docker ps -a # 查看所有容器包含关闭的
查看日志
docker logs -f mynginx
加 -f 参数可以持续查看日志,不加 -f 只能查看打开时的日志。
停止容器
docker stop mynginx
启动容器
docker start mynginx
进入容器内部
docker exec -it mynginx bash
命令解读:
-
docker exec :进入容器内部,执行一个命令
-
-it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
-
mynginx :要进入的容器的名称
-
bash:进入容器后执行的命令,bash是一个linux终端交互命令
3. 数据卷
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。
作用:将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全
一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。
3.1 操作命令
基本语法
docker volume [COMMAND]
docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:
-
create 创建一个volume
-
inspect 显示一个或多个volume的信息
-
ls 列出所有的volume
-
prune 删除未使用的volume
-
rm 删除一个或多个指定的volume
例:创建数据卷html
docker volume create html
查看数据卷的详细信息
docker volume inspect html
可以看出数据卷挂载在宿主机的哪个目录
挂载数据卷
创建容器时,可以通过 -v 将数据卷挂载到容器内的目录
docker run的命令中通过 -v 参数挂载文件或目录到容器中:
-
-v volume名称:容器内目录
-
-v 宿主机文件:容器内文
-
-v 宿主机目录:容器内目录
docker run --name mynginx -v html:/root/html p 80:80 -d nginx
-v html:/root/html 代表将 html 数据卷挂载到容器内的 /root/html 中
挂载后通过修改本机目录中的文件实现修改容器内相应目录的文件
容器不仅仅可以挂载数据卷,也可以直接挂载到宿主机目录上。关联关系如下:
- 带数据卷模式:宿主机目录 --> 数据卷 ---> 容器内目录
- 直接挂载模式:宿主机目录 ---> 容器内目录(不建议,可能会出现错误)
三、DockerFile 自定义镜像
标签:容器,虚拟化,宿主机,volume,镜像,Docker,docker From: https://www.cnblogs.com/giaogiaoyang/p/17931536.html