什么是docker?
1个系统包含多个服务,则需要多个服务器进行部署,后来有了vm虚拟机,则可以节省物理服务器;docker是在虚拟机上的又一个演进;在一台强大的物理机上实现部署多个服务;类似于虚拟机但比虚拟机更好;
把所有的服务包括已经它的依赖redis mq等等一套完整的资源打包成一个镜像,可以快速的拷贝;
容器使用沙箱机制,相互之间完全隔离;
开箱即用 快速部署 可移植性强 环境隔离
windows10专业版以及上下安装docker
Linux Centos7上安装docker
内核版本需要在3.8以上;
下载docker的yum源,安装即可;
Docker镜像的搜索下载以及查看删除
镜像类似于vm中的.ios镜像;
查看本地镜像:docker images
查看社区中的官方镜像:docker search --filter "is-official=ture" centos
下载os7的镜像:docker pull centos:7 如果没有配置阿里云镜像加速,从国外下载,会非常慢
删除镜像:docker rmi 镜像名称
Docker核心技术之配置阿里云镜像加速
登陆阿里云-容器镜像服务-镜像加速器-按照提供的方法进行配置即可;
Docker的体系结构之镜像与容器
容器类似于虚拟机中的2个操作系统,可以理解为是2个容器;这2个操作系统是基于一个镜像创建的;
相互独立,互不影响;
Docker核心基础之容器的构建等基本操作
启动容器:docker run -itd 镜像ID
docker ps 显示当前正在运行的容器
docker ps -a 显示当前所有的容器
停止容器:docker stop 容器ID
删除容器:docker rm 容器ID 删除前要先停止容器
查看容器的详细信息:docker inspect 容器ID 容器的状态/创建时间/基于哪个镜像等等信息
进入容器:docker exec -it 容器id /bin/bash (进入到了这个容器,初始时,相当于一个新的linux环境)
启动多个容器,全部停止:docker stop $(docker ps -a -q)
退出容器:exit (退出后,容器仍然是运行着的)
Docker核心基础之容器的文件复制与挂载
复制文件:docker cp /root/123.txt 容器id:/home/
创建一个容器并挂载:docker run -itd -v /root/xdclass/:/home 镜像ID (-v就是挂载 )挂载和复制的区别是,挂载后宿主机和容器中的内容会同步;
挂载的应用场景:容器中运行着一台mysql数据库服务器,一般会在宿主机中挂载一个路径给容器中的数据库运行,某一天,当前容器出现问题时,可以把这个容器删除,新建一个容器,再把宿主机中的数据库挂载进去,那么数据不会丢失;
构建自定义镜像的意义与应用场景
下载一个centos镜像,就相当于时一个linux环境,初始时是什么都没有的,我们会在基础镜像中安装jdk tomcat等,创建容器后,一旦把这个容器删除,之前安装配置的内容就都没有了;即使通过这个镜像再启动一个容器也是没有的;所以,把这个容器打包成一个镜像,再基于这个镜像启动容器,就可以解决这个问题了;
可以把这个镜像上传到镜像仓库中,其他的服务器用的时候直接拉取来用就可以了;节省重新搭建的时间;
构建镜像有2种方法:
基于docker commit;
基于dockerfile制作镜像;(主流)
Commit构建自定义镜像
docker commit 容器id 容器名:容器标签 这样就把这个容器构建成了一个镜像;
之后再通过这个镜像启动新的容器,在之前的容器中配置的内容都还在;
Dockerfile构建镜像实战
vi dockerfile
写入 dockerfile 命令
保存
docker build -t 容器名:容器标签 ---运行 dockerfile 并创建镜像
我的理解:dockerfile 的作用不仅仅是构建一个新的镜像,它还可以包含指令,对基础镜像进行配置修改等,构建出新镜像后,启动容器,则没有改变基础镜像;并且可以通过commit命令,把这个容器再构建成一个镜像;
Docker核心知识之镜像分层结构剖析
从下往上,依次是一层一层的叠加;
missing表示这一层不是在本机构建的;
当查找某一文件时,进入镜像层从上往下,一层一层的查找,找到后,复制到容器层,可以进行编辑;但始终不会改变原始的镜像层的内容,也即镜像;
优点:
共享资源;
对容器的任何改动,都是放生在容器层;
容器层是可写可读的,镜像是只读的;
Dockerfile基础指令
#号:注释
FROM :基于哪个镜像
MAINTAINER:作者信息
COPY:复制文件到容器
ADD:复制文件同时解压
WORKDIR:设置工作路径,如果没有会创建
ENV:设置环境变量
EXPOSE:设置暴露哪个端口给宿主机
RUN:执行后面的命令,作用与镜像层,镜像构建时就执行;dockerfile中有多条时,都会执行;
ENTRYPOINT:执行后面的命令,作用于容器层,容器启动时执行;dockerfile中有多条时,只会执行最后一条;
CMD:执行后面的命令,作用于容器层,容器启动时执行;dockerfile中有多条时,只会执行最后一条;允许被修改;
Dockerfile 构建JAVA网站镜像
先在宿主机上配置好 jdk 和 启动 tomcat;
在宿主机中的安装步骤:
上传 jdk 压缩包,解压,配置环境变量;通过 java -version 检测;
在宿主机中的安装步骤:
上传 tomcat 压缩包,解压,启动 tomcat;通过 localhost 访问验证是否安装成功;
把容器的 8080 端口,映射到宿主机的 80 端口;启动后,在宿主机上访问 https://localhos:80 则可以正常访问 tomcat;
挂载;把本地目录挂载给容器,之后就在宿主机上进行部署就可以了;
Dockerfile 构建 nginx 镜像
在宿主机中的安装步骤:
上传 nginx 压缩包,解压,通过shell命令下载依赖包,安装,进入 nginx 文件夹,启动 nginx;通过 localhost 访问 nginx 验证是否安装成功;
如果直接通过 dockerfile 安装步骤会比较多,会比较慢,那么我们先准备好一个安装 nginx 的 shell 脚本:
dockerfile:
注意 shell 脚本和 dockerfile 在同一目录下;
启动容器中的 nginx ,注意,与tomcat一样,也要以前台的方式启动:
Dockerfile 构建 redis 镜像
redis默认就是前台启动;
启动容器:
进入容器:
有 redis 的进程,默认端口是 6379:
进入 redis 客户端,进行一下验证,没有问题:
若宿主机想访问容器中的 redis ,怎么办?当前 redis 的端口是没有暴露的:
重新启动一个 redis 容器,把他的端口映射出来:
重启容器:
用宿主机连接容器内的 redis:
找到 ip 地址:
Dockerfile 快速部署 mysql 数据库并初始
下载 mysql:
拉取成功:
登录,连接 mysql 数据库:
镜像默认是无法输入中文的;
进入容器时,指定字符编码为 UTF-8:
重新创建一个 dockerfile: init.sql 里面就是建库、建表、插入数据的 sql 语句;ADD 与 COPY 的区别,ADD 后会自动执行语句;
镜像创建好后,启动容器:
连接登录数据库:
查看数据插入成功;
——————————————————————————————————————————————————————————————————————
第四章
pass
第五章
pass
compose-批量操作容器的工具;
公司中Docker镜像仓库使用
保存镜像: