Docker
简介
Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?
-
Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像
-
Docker应用运行在容器中,使用沙箱机制,相互隔离
Docker如何解决开发、测试、生产环境有差异的问题?
-
Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行
Docker是一个快速交付应用、运行应用的技术,具备下列优势:
-
可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
-
运行时利用沙箱机制形成隔离容器,各个应用互不干扰
-
启动、移除都可以通过一行命令完成,方便快捷
一个开源的应用容器引擎
docker和虚拟机的差异:
docker是一个系统进程 体积小、启动速度快、性能好
虚拟机是操作系统中的操作系统 体积大、速度慢 性能一般
镜像:理解为软件的安装包
容器:通过镜像进行创建,运行起来就是容器,一个容器可以看作是一个进程 。一个镜像可以创建多个容器
docker架构(C/S):
client ---> 发送命令或者请求到Docker服务端 负责与主机中存在的守护进程通讯
server ---> 主机中存在一个守护进程 负责管理docker中的对象
常见的对象:镜像、容器、数据卷、网络
获取镜像:1.自己构建
2.获取镜像仓库(Docker Registry)中的镜像
安装相关命令:
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
systemctl status docker #查看docker状态
docker info #查看配置
docker -v #查看版本
docker -help #查看命令
基本操作
- 镜像
镜像名称:[repository]:[tag] 没有指定tag时,默认是latest,代表最新版本的镜像
镜像命令:通过docker -help 命令查看 各种命令的使用
docker images 查看镜像列表
docker save 生成tar包
docker pull 拉取镜像
docker rmi 删除指定镜像
docker load 将tar包还原成镜像
docker push 将本地镜像推送到远程仓库
- 容器
容器相关命令: docker run 创建容器并运行
容器时隔离环境 需要指定端口映射 --- 宿主机和容器内进程端口的对应关系
docker run --name 容器的名称 -p 宿主机的端口:容器内进程的端口 -d(后台运行)镜像名称
docker exec -it mn bash 进入到docker容器中
mn: 容器名称
-it: 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
bash:进入容器后执行的命令,bash是一个linux终端交互命令
docker logs 查看容器的运行日志 -f 持续查看日志
docker rm 删除指定容器 -f 可以删除运行中的容器
docker ps 查看运行状态容器信息 -a 查看所有状态的容器
- 数据卷 ---就是一个虚拟目录,这个目录会对应宿主机上面的某个目录
将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全
相关命令:docker volume create
docker volume ls #列出所有的数据卷
docker volume inspect #查看数据卷详情信息
docker volume prune #删除没有使用到的数据卷
挂载数据卷:
-v 数据卷名称(自定义):容器目录
如果容器运行时数据卷不存在 会自动被创建出来
数据卷挂载与目录直接挂载:
数据卷挂载耦合度低 由docker来管理目录 但是目录不好找
目录挂载耦合度高 需要我们自己管理 目录容易查找
- Dokerfile自定义镜像:
dokerfile的本质是一个文件,通过指令描述镜像的构建过程,文件第一行必须是FROM,从一个基础镜像来构建,基础镜像可以是基本操作系统或是其他制作好的镜像。
镜像结构 ---是一个分层结构 ,每一层称为一个Layer
BaseImage层基础镜像:包含基本的系统函数库、环境变量、文件系统
Entrypoint:入口,镜像中应用启动的命令
分层是为了基本数据的复用:
- Docker-Compose ---基于compose文件 批量操作容器
微服务部署为docker容器 容器之间不是通过ip地址互联 而是通过容器名
命令:docker-compose up -d
- Docker搭建私有镜像仓库
搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。
使用DockerCompose部署带有图象界面的DockerRegistry。
我们的***采用的是http协议,默认不被Docker信任,所以需要做一个配置
推送、拉取镜像:
推送镜像到私有镜像服务必须先tag
docker push
docker pull
可视化工具(Portainer)
一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建、管理和维护Docker环境。
