1.什么是docker
Docker 是一个开源的应用容器引擎,是虚拟化的一种轻量级替代技术。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,开销很低。docker解决了服务器昂贵的问题,生产环境和测试环境不一致的问题。
2.什么要使用docker而不使用虚拟机
1).虚拟机的缺点
(1).资源占用多:虚拟机运行需要大量的内存、硬盘和CPU,而且是独占这些资源
(2).启动慢:虚拟机也是个操作系统,启动很慢
2).docker优点
(1).体积小、占用资源少
(2).启动快:docker是个容器,是个进程,既然是进程所以启动比虚拟机(操作系统)快
(3).进程隔离:在一台服务器上可以部署多个docker容器,而且互不干扰
(4).迁移轻松:docker可以制作镜像进行迁移,非常容易
3.docker有什么用
1).搭建微服务环境:一个服务器可以安装多个容器,实现微服务,并且降低服务器成本
2).降低服务器成本:在少量的服务器上可以通过docker安装多个容器,不用购买多个服务器
3).提供一次性的环境:docker可以将运行项目所需要的资源、环境全部集中打包在一个镜像内,无需再去配置搭建项目运行所需要的资源和环境(无需重复配置),有利于测试、开发和部署
4.docker基本概念
1).image(镜像):Docker 镜像可以看作是一个特殊的文件系统,提供了容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(环境变量、端口等),但是镜像在构建之后就不会被改变。
2).Container(容器):Docker 容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的服务器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。
3).Dockerfile :Dockerfile是一个指令的集合文件,可以利用Dockerfile 制作一个镜像
5.docker基本命令
1).查询镜像
docker search 镜像名称
2).拉取镜像
docker pull 镜像名称
3).启动容器(以tomcat作为实例)
docker run -d --name fist_tomcat --privileged=true -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime -p 8081:8080 docker.io/tomcat
-d 表示以“守护模式”执行/root/run.sh脚本,此时 Tomcat 控制台不会出现在输出终端上。
-p 表示宿主机(8081)与容器的端口映射(8080,Tomcat容器固定的端口为8080,必须映射到8080)
–name 表示容器名称,用一个有意义的名称命名即可。
-v 表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
-e 运行上海时区格式
–privileged=true 开启特权,可以设置容器里的内核参数
-e TZ=“Asia/Shanghai” -v /etc/localtime:/etc/localtime都是用来解决容器时区的问题
6.Dockerfile 基本命令
1).FROM 基础惊喜
:基于那个镜像作为基础去构建新的镜像
2).COPY 源文件 目标目录
:复制指令,从上下文目录中复制文件或者目录到容器里指定路径
3).ADD 源文件 目标目录
:和COPY基本一样,但是ADD会自动解压压缩包
4).RUN
:执行命令
5).CMD
:执行命令(和RUN类似,但二者运行的时间点不同,CMD 在docker run 时运行,RUN 是在 docker build)
(1).注意:在执行docker run命令后,CMD命令指定的程序会被docker run后面的程序所覆盖
(2).注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效
6).ENTRYPOINT
:类似于CMD,但是ENTRYPOINT的指令参数不会被docker run后面的指令所覆盖
7).ENV
:设置环境变量
8).VOLUME 系统目录 docker目录
:挂载目录,类似于-V
9).EXPOSE 8080
:声明端口
10).WORKDIR
:类似于cd命令,进入那个文件夹
运行Dockerfile命令:
docker build -t 容器名称:版本 .
.
是上下文路径,也就是dockerFile所在的目录
docker build -t tomcat:v1.3 .
7.Dockerfile示例
FROM tomcat:8.5.38-jre8
ARG JAR_PATH=./target
#1.删除ROOT文件夹,避免war包不解压,[2,3]指定时区
RUN rm -rf /usr/local/tomcat/webapps/ROOT \
&& /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
ADD ${JAR_PATH}/*.war /usr/local/tomcat/webapps/ROOT.war
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
EXPOSE 8080