Docker的定义:Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Tomcat:Tomcat是web容器。在进行web项目开发的时候,经常需要http协议,也就是基于请求和响应,比如你在百度输入一行内容搜索,那么百度服务器如何处理这个请求呢?它需要创建servlet来处理,servlet其实就是java程序,只是在服务器端的java程序,servlet通过配置文件拦截你的请求,并进行相应处理,然后展示给你相应界面。那么servlet如何创建?这时候就要用到tomcat了。这就是tomcat的意义!
Nginx:Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Docker和虚拟机的区别:
Docker 框架
简介:
Docker使用客户端-服务器(c/s)的架构模式,使用远程api来管理和创建Docker容器。而Docker容器是通过Docker镜像来创建。容器与镜像的关系类似于面向对象变成中的对象与类,其中容器是对象,镜像则是类。
基本概念:
1、镜像(Image) ,镜像是创建容器的模板 ,通常部署在服务器或者云端。它是一个特殊的文件系统,不包含任何的动态数据,在创建容器之后它的内容也不会发生改变。而且镜像是分层存储。
2、容器(Container),容器是一个独立运行的一个或一组应用,其实就是一个进程,但与普通进程不同的是,容器进程运行于属于自己的独立空间。容器是在镜像的存储层之上,建立一个属于容器的层。
3、仓库(Registry),仓库是用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub提供了庞大的镜像集合供使用。
4、客户端(client),客户端通过命令行或者其他工具使用Docker API与docker的守护进程进行通信。
5、主机(host),一个物理或者虚拟的机器,用于执行Docker的守护进程和容器。
6、Docker Machine,Machine是一个简化的Docker安装工具,通过一个简单的命令行即可在相应地的平台上安装docker。
最内层是docker的守护进程。(Daemon是Docker的守护进程,Docker Client通过命令行与Docker Damon通信,完成Docker相关操作)
REST(表述状态转移) API 提供了一种灵活、轻量级的应用程序集成方式,并已成为连接微服务架构中组件的最常用方法。
外层是docker客户端。并在此基础上进行一系列的操作。
Docker安装
Docker可在windows,Ubuntu,macos,服务器等环境下安装。直接按照官网上的安装教程就可以了。
Docker镜像
1、在docker hub上搜索镜像(例如要搜索tomcat):
docker search tomcat
2、从docker镜像仓库获取镜像的命令是docker pull,其命令格式是:
docker pull [选项] [Docker Registry 地址[:端口号]/] 镜像名[:标签](标签是版本号)
如果直接默认:docker pull 镜像名,版本是最新的。
此时如果没有换源,则是从docker hub中获取。如果换源,则是从换的源中获取。
3、列出镜像:
docker images 或者 dicker image ls
4、删除镜像:
docker image rm [选项] <镜像1> [<镜像2>....]
删除本地镜像常用的命令:
docker image rmi 镜像ID
注意:删除镜像之前需要确认此镜像目前没有被任何容器使用
5、其他辅助命令:
查看本地镜像的IMage ID:
docker images -q
查看一个镜像的制作历程:
docker history 镜像名称
6、保存镜像:
用save子命令将本地仓库的镜像保存到当前文件目录下:
docker save -o tomcat.guo.tar 镜像名称
将本地目录下的镜像备份文件导入到本地的docker仓库:
docker load -i tomcat.guo.tar(不输出详细信息)
docker load < tomcat.guo.tar (输出详细信息)
Docker容器
镜像是类,容器是对象
1、查看容器的状态
docker ps //查看运行的容器
docker ps -a // 查看所有的容器
docker container ls
docker container ls -a
2、启动容器
一种是基于镜像新建的一个容器并启动,一种是将在终止状态的容器重新启动
docker run 参数 镜像名称:tag 执行的命令
参数 :
-i :保持和docker 容器内的交互,启动容器时,运行的命令结束后,容器依然存活, 没有退出。
-t :为容器的标准输入虚拟一个tty
-d :后台运行容器(守护进程)
--rm :容器在启动后,执行完成命令或程序后就销毁
--name:给容器一个自定义名称
-p:宿主机:内部端口
例如:docker run --name tomcat-8081 -p 8081:8080 -d tomcat
docker start 容器名称(启动一个或多个处于停止中的容器)
3、docker守护状态运行:
如果使用 -d 启动容器之后,由于是在后台运行,所以对于打印的结果不会出在宿主机上面,可以使用下面的命令:
docker logs ID或name
4、Docker进入容器
docker exec -it 容器ID或name bash
5、docker关闭容器
docker stop 容器名称
6、删除容器
docker rm 容器名称
7、在宿主机和容器之间交换文件:
docker cp [OPTIOND] CONTAINER:PATH LOCALPATH //容器中复制到宿主机
docker cp [OPTIOND] LOCALPATH CONTAINER:PATH // 宿主机复制到容器中
8、重启容器
docker restart 容器名称
Docker日志
1、查看日志:
docker logs [参数] 容器名称或id
参数:
-since :制定了输出日志开始日期,即只输出指定日期之后的日志
-f:查看实时日志
-t:查看日志产生的日期
-tail=10:查看最后10条日志
Docker数据卷
数据卷:是一个可供一个或多个容器使用的特殊目录,这个文件夹以独立于docker文件系统的形式存在于宿主机中。
特性:(1)可以在容器之间共享和重用
· (2)对数据卷的修改会立马生效
(3)对数据卷的更新,不会影响镜像
(4)数据卷默认会一直存在,即使容器被删除
1、创建数据卷
docker volume create 数据卷名称(存放到默认目录下)
2、查看数据卷
docker volume inspect 数据卷名称
3、查看全部数据卷信息
docker volume ls
4、删除数据卷
docker volume rm 数据卷名称
5、应用数据卷
(1)当映射数据卷的时候,如果数据卷不存在,docker会帮你自动创建
docker run -v 数据卷名称:容器内路径 镜像ID
(2)直接指定一个路径作为数据卷的存储位置
docker run -v 路径:容器内部的路径 镜像ID
Docker 安装
1、安装 nginx
docker pull nginx:latest
安装之后可以查看镜像列表,然后运行容器。
2、安装MySQL
(1)搜索镜像
docker search mysql
(2)下载镜像
docker pull mysql:5.6
(3)根据自己的情况创建MySQL容器
(4)可以访问容器内部
Docker 定制镜像
当我们需要在docker上部署自己的项目时,就需要制作自己的镜像。有两种方式:
(1)从已经创建的容器中更新镜像,并提交这个镜像。
(2)使用dockerfile指令来创建一个新的镜像。
Dockerfile常用命令
1、FROM ------ 指定基础镜像
基础镜像不存在会在docker hub上下载(一般是文件的第一个指令)
FROM <镜像>:[tag]
FROM <镜像>@digest [校验码]
2、LABLE ------- 为dockerfile制作者提供信息
例如:LABLE maintainer = “xxxxxx” (提供本人信息)
LABLE version = "1.0" (提供版本信息)
3、WORKDIR ------在dockerfile中的作用相当于windows下的cd指令
4、ENV
ENV指令可以用于为docker容器设置环境变量,可以用docker inspect 命令来查看。同时可以用docker run --env <key>=<value> 来修改环境变量
例如:ENV JAVA_HOME /user/local/jdk
5、UESR
用来切换身份,默认是root,但是权限太大,有风险,建议换。
6、VOLUMRE
创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
7、COPY —— 把宿主机中的文件复制到镜像中去。
8、RUN -- 用来执行命令
有两种格式:
(1)shell格式: RUN 命令
(2)exec格式: RUN ["可执行文件",“参数1”,“参数2”]
9、EXPOSE ----- 为容器打开指定要监听的端口以实现与外部通信
格式:EXPOSE 协议
不加协议默认是tcp
10、ADD -----类似于COPY指令
ADD将文件从路径<src>复制添加到容器内部路径<dest>
Docker的可视化界面 DockerDesktop
在DockerDesktop中,可以更加方便的时候镜像去创建容器和运行容器,还可以查看数据卷等内容。