- linux容器的封装
- 微服务的拆分会给部署带来了很大的麻烦。
组件部署冲突,兼容性。
多台服务重复部署,环境不一致
- 依赖兼容性
- 打包函数库,依赖,配置
- 每个应用沙箱隔离,独立运行
- 环境差异
- 系统程序和所要调用的系统函数库一起打包(完整运行环境),仅依赖Linux内核
- 直接调用Linux内核来运行
- 启动和运行都使用命令来完成
- 虚拟机:
- 模拟硬件
- 运行操作系统
- 体积大,?G
- 性能较差,启动慢
- Docker
- 软件虚拟,封装函数库
- 没有模拟操作系统
- 体积小,MB
- 秒级启动
- 镜像
- 将应用程序及其所需要的依赖、函数库、环境、配置等文件打包在一起
- 命令:docker pull nginx,DockerHub拉取nginx镜像,
- 命令:docker images,查看拉取到的镜像
- 命令:docker xx --help,查看docker save和docker load的语法
- 命令:docker save -o [保存的目标文件名称] [镜像名称]
- 命令:docker save -o nginx.tar nginx:latest,docker save导出镜像到磁盘
- 命令:docker rmi nginx:latest,删除本地的nginx镜像
- 命令:docker load -i nginx.tar,加载本地文件
- 去DockerHub搜索Redis镜像
- 查看Redis镜像的名称和版本
- 利用docker pull命令拉取镜像
- 利用docker save命令将 redis:latest打包为一个redis.tar包
- 利用docker rmi 删除本地的redis:latest
- 利用docker load 重新加载 redis.tar文件
- docker run:创建并运行一个容器,处于运行状态
- docker pause:让一个运行的容器暂停
- docker unpause:让一个容器从暂停状态恢复运行
- docker stop:停止一个运行的容器
- docker start:让一个停止的容器再次运行
- docker rm:删除一个容器
- 命令:docker run --name name -p 80:80 -d nginx
命令解读:
- docker run :创建并运行一个容器
- --name : 指定容器名称
- -p :指定端口映射
- -d:后台运行容器
- nginx:镜像名称,例如nginx
- 命令:docker exec -it mn bash
命令解读:
- docker exec :进入容器内部,执行一个命令
- -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
- mn :要进入的容器的名称
- bash:进入容器后执行的命令,bash是一个linux终端交互命令
进入目录:
- cd /usr/share/nginx/html
修改index.html的内容:
sed -i -e 's#Welcome to nginx#Hello nginx#g' -e 's#
##g' index.html
docker run命令的常见参数有哪些? - --name:指定容器名称 - -p:指定端口映射 - -d:让容器后台运行 查看容器日志的命令: - docker logs - 添加 -f 参数可以持续查看日志 查看容器状态: - docker ps - docker ps -a 查看所有容器,包括已经停止的
- 一个虚拟目录,指向宿主机文件系统中的某个目录。
- 操作虚拟目录等同于操作主机目录
基本语法:
docker volume [COMMAND],数据卷操作
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:删除所有未使用的数据卷
- docker run --name mn -p 80:80 -v html:/usr/share/nginx/html -d nginx
手动挂载:
如果宿主机目录不存在docker会自动创建
mysql的数据挂载
docker run \
--name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-p 3306:3306 \
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-v /tmp/mysql/data:/var/lib/mysql \
-d \
mysql:5.7.25
- 镜像就是将应用程序、系统函数库、环境、配置、依赖打包而成。
- 镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。
- 构建镜像,其实就是实现上述打包的过程。
实现复用
- Baselmage层:包含基本的系统函数库、环境变量、文件系统
- Entrypoint:入口,是镜像中应用启动的命令
- 其它:在Baselmage基础上添加依赖、安装程序、配置等
镜像构建后应该先运行
- docker run --name web -p 8090:8090 -d javaweb:1.0