Docker 解决 :“软件跨环境迁移问题”
开发环境:dev
测试环境:sit(test)
客户验收环境:uat/preprod(预生产)
生产环境:prod
Docker概念:1.是一个开源的应用容器引擎2013年初
2.基于go语言实现
3.Docker可以让开发者打包他们的应用以及依赖包到一个轻量级别可移值发布到任何linux机器上
4.容器是完全使用沙箱机制,相互隔离
5.容器性能开销极低
6.docker从17.03版本之后分为CE社区版本和EE企业版本
总结:docker是一种容器技术,解决软件跨环境迁移的问题
Docker 架构
Clients hosts registries

镜像images:docker镜像,就相当于是一个root文件系统。
容器container:镜像images和容器container的关系,就是面向对象程序设计中类和对象一样,镜像是静态定义,容器是镜像运行时的实体,容器可以被创建、启动、停止、删除、暂停等。
仓库repository:仓库可以看成一个代码控制中心用来保存镜像
配置Docker镜像加速器
1.USTC:中科大
2.阿里云(选择阿里云最快)
3.网易云
4.腾讯云
Docker命令
Docker服务相关的命令

启动docker服务
Systemctl start docker.service
停止docker服务
Systemctl stop docker.service
重启docker服务
Systemctl restart docker.service
查看docker服务状态
Systemctl status docker.service
开机启动docker服务
Systemctl enable docker.service
Docker镜像相关命令
查看镜像
docker images
docker images -q
搜索镜像
docker search
拉取镜像(下载)
docker pull
删除镜像
docker rmi id
删除所有镜像
Docker rmi `docker images -q`
Docker 容器相关命令(必须掌握)
查看容器
docker ps(查看运行时容器)
docker ps -a(查看所有容器)
创建容器
-i 代表一直运行,没有客户端连接就关闭
-t 分配一个伪终端
-d 后台运行容器(守护式)
--name= 启动名字
/bin/bash 进入容器内部
docker run -di --name
退出容器
exit
进入容器
docker exec -it 容器id /bin/bash (交互式容器)
启动容器
docker start 名字
停止容器
docker stop 名字
删除容器
docker rm 名字
docker rm `docker ps -aq`
查看容器信息
docker inspect 名字
更新参数
docker update
启动docker 自动启动容器
--restart=always
查看日志命令
Docker logs
Docker数据卷(文件目录(文件))
思考:
docker容器删除后,在容器中产生的数据也会随之销毁
docker容器和外部机器可以直接交换文件吗
容器之间想要进行数据交互
数据卷概念:
数据卷是宿主机中的一个目录或者文件
当容器目录和数据卷目录绑定后,对方的修改会立即同步
一个数据卷可以被多个容器同时挂载
一个容器也可以被挂载多个数据卷
数据卷作用:
容器数据持久化
外部机器和容器间接通信
容器之间数据交换
配置数据卷:
创建启动容器时,使用-v参数设置数据卷
--privileged=true 解决挂载目录没有权限问题
docker run -v 宿主机(虚拟机)目录(文件):容器内目录(文件)
注意事项:
目录必须为绝对路径
如果目录不存在,会自动创建
可以挂载多个数据卷
数据卷容器:
思考:多容器进行数据交换
多个容器挂载同一个数据卷
数据卷容器
配置数据卷
启动数据卷容器:-v参数设置数据卷
docker run -it --name=name -v /volume --privileged=true 镜像名称
创建启动容器使用--volumes-from参数设置数据卷
应用部署:
Mysql 部署
实现步骤:
搜索镜像
拉取镜像
创建容器
操作容器
容器内的网络服务和外部机器不饿能直接访问
外部机器和宿主机可以直接通信
宿主机和容器可以直接通信
端口映射
-e(evn) 配置
Dockerfile
Docker镜像原理:
1.Docker镜像是由特殊的文件系统叠加而成
2.最低端是bootfs,并使用宿主机的bootfs
3.第二层是root文件系统rootfs称为baseimages
然后在往上可以叠加其他的镜像文件

统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,只存在一个文件系统。
一个镜像可以放在另一个镜像上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像
7.当一个镜像启动容器时,docker会在最顶端加载一个读写文件系统作为容器
(复用)
docker镜像本质是:
分层的文件系统
Docker中centos镜像为什么只有200MB,而一个centos操作系统iso文件要几个G:
Centos的iso镜像包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs只有rootfs和其他镜像层
Docker中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70MB
由于docker中镜像是分层的tomcat虽然只有70MB单他需要依赖于父镜像和基础镜像,所有整个对外暴漏的tomcat镜像大小500的MB
操作系统的组成部分:
进程调度
进程通信
内存管理
设备管理
文件管理:linux文件系统由bootfs和rootfs两部分组成
网络通信
作业控制
Bootfs:包含bootloader(引导加载程序)和kernel(内核)
Rootfs:root文件系统,包含的就是典型linux系统中的/dev,/proc,/bin,/etc等标准目录和文件
不同的linux发行版本,bootfs基本一样,而rootfs不同
Docker 镜像制作:
容器转为镜像
容器转镜像-> 转压缩文件->压缩文件转镜像->启动容器
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
Docker load -i 压缩文件名称
Dockerfile
Dockerfile是一个文本文件
包含一条条的指令
定义父镜像:FROM centos:7
定义作者信息MAINTAINER作者
执行安装vim命令 RUN yum install -y vim
定义默认的工作目录WORKDIR/usr
定义容器启动执行命令cmd /bin/bash
构建docker build -f (指定文件位置) -t(设置信的镜像名称 版本 )
启动springboot项目
定义父镜像FROM java:8
定义作者信息MAINTAINER作者
将jar包添加到容器 ADD 全拼.jar app.jar
定义容器启动执行命令cmd java -jar app.jar
构建docker build -f (指定文件位置) -t(设置信的镜像名称 版本 )
查看日志:
docker logs -f -t --tail -f 容器名字