Docker
1、项目部署的问题
大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:
- 依赖关系复杂,容易出现兼容性问题
- 开发、测试、生产环境有差异
2、Docker如何解决依赖的兼容问题的?
- 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包
- 将每个应用放到一个隔离容器去运行,避免互相干扰
3、Docker如何解决不同系统环境的问题?
- Docker将用户程序与所需要调用的系统(比如Ubuntu)函数库一起打包
Docker运行到不同操作系统时,直接基于打包的库函数,借助于操作系统的Linux内核来运行
4、Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?
Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像
Docker应用运行在容器中,使用沙箱机制,相互隔离
总结:
Docker是一个快速交付应用、运行应用的技术:
可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
运行时利用沙箱机制形成隔离容器,各个应用互不干扰
启动、移除都可以通过一行命令完成,方便快捷
5、镜像和容器
镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。
6、安装Docker
https://www.aliyundrive.com/s/4J5QcWtV9Bi
总结:
什么是Docker:
帮助我们快速构建应用镜像、交付应用、运行应用的技术
什么是镜像:
将应用程序及其依赖、环境、配置打包在一起就是镜像
什么是容器:
镜像运行起来就是容器,一个镜像可以运行多个容器
Docker工作流:
构建自定义镜像或者从DockerRegistry拉取镜像
根据镜像创建容器,并运行
7、镜像操作命令
总结:
镜像操作有哪些?
- docker images
- docker rmi
- docker pull
- docker push
- docker save
- docker load
8、容器相关命令
总结:
docker run命令的常见参数有哪些? --name:指定容器名称 -p:指定端口映射 -d:让容器后台运行 查看容器日志的命令: docker logs 添加 -f 参数可以持续查看日志 查看容器状态: docker ps
查看容器状态: docker ps 添加-a参数查看所有状态的容器 删除容器: docker rm 不能删除运行中的容器,除非添加 -f 参数 进入容器: 命令是docker exec -it [容器名] [要执行的命令] exec命令可以进入容器修改文件,但是在容器内修改文件是不推荐的
docker run -d --privileged=true --restart always -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf -v /mydata/redis/conf/data:/data --name redis -p 6379:6379 redis:latest--appendonly yes --requirepass "your password"
9、数据卷
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。
数据卷操作的基本语法如下:
docker volume [COMMAND]
docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:
create 创建一个volume
inspect 显示一个或多个volume的信息
ls 列出所有的volume
prune 删除未使用的volume
rm 删除一个或多个指定的volume
总结:
数据卷的作用:
将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全
数据卷操作:
docker volume create
docker volume ls
docker volume inspect
docker volume rm
docker volume prune
10、挂载数据卷
在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器目录
总结:
数据卷挂载方式: -v volumeName: /targetContainerPath 如果容器运行时volume不存在,会自动被创建出来
11、数据卷挂载的方式对比
总结:
docker run的命令中通过 -v 参数挂载文件或目录到容器中: -v volume名称:容器内目录 -v 宿主机文件:容器内文件 -v 宿主机目录:容器内目录 数据卷挂载与目录直接挂载: 数据卷挂载耦合度低,由docker来管理目录,但是目录较深,不好找 目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看
12、Dockerfile自定义镜像
镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。
具体参考:https://www.aliyundrive.com/s/A39Z84EZuzt
13、DockerCompose
具体参考:https://www.aliyundrive.com/s/A39Z84EZuzt
14、Docker镜像仓库
具体参考:https://www.aliyundrive.com/s/A39Z84EZuzt