(一)思考

我们之前是如何将项目发布到Linux服务器的?
大致步骤如下:
1、安装jdk
2、安装tomcat
3、将项目war包上传到tomcat的webapps下
4、修改配置文件
5、启动tomcat

这样看似没问题,其实我们想想,发一台机器还好,这几步就完成了,如果我们要将这个项目发布到N多台机器,那么我们是否需要在每个机器上都进行相同的步骤,并且要进行环境兼容性的测试。再来看一个例子,我们现在想部署使用一个成熟的产品,这个产品是用go语言开发的,我该如何部署?go语言运行的环境怎么装?这个项目又该如何部署?还有,一台linux机器上装了很多软件,部署了很多项目,相互之间有干扰怎么办?如果有一项技术,可以解决以上问题或者是更多的问题,是不是很爽?那就是Docker(容器)技术。

(二)什么是docker


Logo:
那个大鲸鱼(或者是货轮)就是操作系统
把要交付的应用程序看成是各种货物,原本要将各种各样形状、尺寸不同的货物放到大鲸鱼上,你得为每件货物考虑怎么安放(就是应用程序配套的环境),还得考虑货物和货物是否能叠起来(应用程序依赖的环境是否会冲突)。
现在使用了集装箱(容器)把每件货物都放到集装箱里,这样大鲸鱼可以用同样地方式安放、堆叠集装了,省事省力。
Docker就是这整套机制啦

(三)docker可以做什么

现在我经常需要在周末用自己开发的成果对客户活着别人做一两个演示。搭建演示环境的过程非常麻烦。现在我发现 Docker 已经成为我演示这些工具的最合理的方式。对于客户来说,我可以直接将 Docker 镜像提供给他们,而不必去做任何环境配置的工作,工作的效果也会和在他们演示中所看到的一模一样,同时不必担心他们的环境配置会导致我们的产品无法运行。


(四)为什么使用docker

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。 其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。具体说来,Docker 在如下几个方面具有较大的优势。

4.1.1 更快捷的交付和部署

对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
`

4.1.2 更高效的虚拟化

Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。

`
4.1.3 更轻松的迁移和扩展

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
`

4.1.4 更简单的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
`

4.1.5 对比传统虚拟机总结

(五)docker架构


5.1.1 Docker daemon(Docker进程):

Docker进程是部署在linux操作系统上,负责支撑Docker Container的运行以及本地Image的管理。
`

5.1.2 Docker client:

用户不直接操作Docker daemon,用户通过Docker client访问Docker,Docker client提供pull、run等操作命令。
`

5.1.3 Docker Image:

Docker 镜像就是一个只读的模板。
例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。
镜像可以用来创建 Docker 容器。
Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
`

5.1.4 Docker Container:

Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
`

5.1.5 Docker Registry:

仓库分为公开仓库(Public)和私有仓库(Private)两种形式
最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。
用户也可以在本地网络内创建一个私有仓库。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
`

(六)docker 安装


Docker可以在上面的操作系统里面安装,系统推荐是Ubuntu,因为咱们之前用的是centos,所以讲的也是centos

docker的下载与安装

6.1 (安装)

yum install -y docker


6.2(启动)

systemctl start docker


linux的内核中的SELinux不支持 overlay2 graph driver ,解决方法有两个,要么启动一个新内核,要么就在docker里禁用selinux,–selinux-enabled=false,

6.1.1(解决方法)

vi /etc/sysconfig/docker

6.3(关闭)

service docker stop
systemctl stop docker

6.4(重启)
守护进程重启 systemctl daemon-reload
重启docker服务 systemctl restart docker
重启docker服务 service docker restart

6.5(运行hello-world)

docker 检查到本地仓库没有名称为:hello-world 的镜像,马上从官方仓库中拉取了该镜像,然后执行,hellow-world

(七) 镜像


7.1获取镜像
7.1.1. 镜像加速
dockerdocker官网因为在国外,所以下载非常慢,并且很容易断开,所以一般使用国内的镜像.在国内,阿里云、163都提供了docker仓库,但是阿里云还提供了加速功能。所以,我们选用阿里云的加速。 163的仓库地址:https://c.163.com/hub#/m/home/使用阿里云器,需要到阿里云进行注册,获取到自己专属的加速地址,当然也可以使用我的加速地址。(使用加速是无需登录的,所以可以公用)








7.1.2.安装提示配置就行

[root@zhiyou02 ~]# vi /etc/docker/daemon.json

"registry-mirrors": ["https://v31i9ua3.mirror.aliyuncs.com"] 我的加速地址

7.1.3.重启

service docker restart

7.2 查找镜像:mysql

7.2.1 展示版本



7.3 选择版本下载镜像

Docker pull 镜像名 默认是最新版本

Docker pull 镜像名:版本号

docker pull mysql:5.5

7.4 显示所有镜像

docker images

7.5 删除某个镜像
删除镜像通过命令docker rmi 镜像id完成,需要注意的是,删除镜像前,要删除所有使用到该镜像的容器。

docker rmi 49 #输个前缀就行了

7.6 镜像搜索
Docker search 镜像名

(八)容器


8.1 查找所有容器
通过docker ps命令查看正在运行的容器列表,需要查询所有的容器需要加-a参数:
docker ps
docker ps -a

8.2 创建一个容器(创建一个MySQL容器)

8.2.1 下载 mysql 镜像
docker pull mysql

8.2.2 创建并且运行容器
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql

–name:给新创建的容器命名,此处命名为mysql
-e:配置信息,此处配置mysql的root用户的登陆密码
-p:端口映射,此处映射主机3306端口到容器mysql的3306端口 ;前面的3306是映射后的,后面的是mysql默认的
-d:成功启动容器后输出容器的完整ID,容器在后台运行
最后一个mysql指的是mysql镜像名字

8.2.3 查看运行中的容器

8.2.4 进行容器
有些时候我们需要进入容器内,做一些操作,比如,修改配置文件等。
进入容器,docker exec -it 容器名 /bin/bash
此处进mysql容器
docker exec -it mysql /bin/bash


8.2.5 退出容器
exit;

8.3 停止容器
停止容器有2种方式:
1、docker stop 容器名或容器id
2、docker kill 容器名或容器id

8.4 删除容器
docker rm 容器名

(九) 仓库

9…1 阿里云仓库

阿里云既提供了加速功能,也提供了仓库功能,也就是我们可以将自己的镜像上传到阿里云仓库

9.2 创建阿里云仓库








9.3 推送mysql镜像到阿里云

9.3.1 登录:
docker login --username=534839731@qq.com registry.cn-hangzhou.aliyuncs.com

9.3.2.第三部,给镜像打tag:

docker tag mysql registry.cn-hangzhou.aliyuncs.com/xufengwu/zhiyou:mysql

9.3.3.推送镜像到阿里云

docker push registry.cn-hangzhou.aliyuncs.com/xufengwu/zhiyou:mysql

9.3.4. 到阿里云上面查看

9.4 从阿里云上下载镜像

9.4.1. 先将本地的删除
Docker rmi xxx

9.4.2 从阿里云拉取

9.4.2.docker pull registry.cn-hangzhou.aliyuncs.com/xufengwu/zhiyou:mysql

(十). 给自己构建一个镜像

构建Docker镜像有以下两种方法:
使用docker commit命令。
使用docker build命令和 Dockerfile 文件。
不推荐使用docker commit来构建镜像,而应该使用更灵活、更强大的Dockerfile来构建

10.1 命令详解

在Dockerfile中用到的命令有
FROMFROM指定一个基础镜像, 一般情况下一个可用的 Dockerfile一定是 FROM 为第一个指令。至于image则可以是任何合理存在的image镜像。FROM 一定是首个非注释指令 Dockerfile.FROM 可以在一个 Dockerfile 中出现多次,以便于创建混合的images。如果没有指定 tag ,latest 将会被指定为要使用的基础镜像版本。
MAINTAINER这里是用于指定镜像制作者的信息
RUNRUN命令将在当前image中执行任意合法命令并提交执行结果。命令执行提交后,就会自动执行Dockerfile中的下一个指令。层级 RUN 指令和生成提交是符合Docker核心理念的做法。它允许像版本控制那样,在任意一个点,对image 镜像进行定制化构建。RUN 指令缓存不会在下个命令执行时自动失效。比如 RUN apt-get dist-upgrade -y 的缓存就可能被用于下一个指令. --no-cache 标志可以被用于强制取消缓存使用。
ENVENV指令可以用于为docker容器设置环境变量ENV设置的环境变量,可以使用 docker inspect命令来查看。同时还可以使用docker run --env <key>=<value>来修改环境变量。
USERUSER 用来切换运行属主身份的。Docker 默认是使用 root,但若不需要,建议切换使用者身分,毕竟 root 权限太大了,使用上有安全的风险。
WORKDIRWORKDIR 用来切换工作目录的。Docker 默认的工作目录是/,只有 RUN 能执行 cd 命令切换目录,而且还只作用在当下下的 RUN,也就是说每一个 RUN 都是独立进行的。如果想让其他指令在指定的目录下执行,就得靠 WORKDIR。WORKDIR 动作的目录改变是持久的,不用每个指令前都使用一次 WORKDIR。
COPYCOPY 将文件从路径 <src> 复制添加到容器内部路径 <dest>。<src> 必须是想对于源文件夹的一个文件或目录,也可以是一个远程的url,<dest> 是目标容器中的绝对路径。所有的新文件和文件夹都会创建UID 和 GID 。事实上如果 <src> 是一个远程文件URL,那么目标文件的权限将会是600。
ADDADD 将文件从路径 <src> 复制添加到容器内部路径 <dest>。<src> 必须是想对于源文件夹的一个文件或目录,也可以是一个远程的url。<dest> 是目标容器中的绝对路径。所有的新文件和文件夹都会创建UID 和 GID。事实上如果 <src> 是一个远程文件URL,那么目标文件的权限将会是600。
VOLUME创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
EXPOSEEXPOSE 指令指定在docker允许时指定的端口进行转发。CMDDockerfile.中只能有一个CMD指令。 如果你指定了多个,那么最后个CMD指令是生效的。CMD指令的主要作用是提供默认的执行容器。这些默认值可以包括可执行文件,也可以省略可执行文件。当你使用shell或exec格式时,  CMD 会自动执行这个命令。
ONBUILDONBUILD 的作用就是让指令延迟執行,延迟到下一个使用 FROM 的 Dockerfile 在建立 image 时执行,只限延迟一次。ONBUILD 的使用情景是在建立镜像时取得最新的源码 (搭配 RUN) 与限定系统框架。
ARGARG是Docker1.9 版本才新加入的指令。ARG 定义的变量只在建立 image 时有效,建立完成后变量就失效消失
LABEL定义一个 image 标签 Owner,并赋值,其值为变量 Name 的值。(LABEL Owner=$Name )ENTRYPOINT是指定 Docker image 运行成 instance (也就是 Docker container) 时,要执行的命令或者文件。

(十一).构建一个Tomcat镜像

11.1 将jdk和tomcat上传并解压至一个目录下


11.2 创建Dockerfile文件

11.3 下载一个centos作为基础镜像

11.4 编写 Dockerfile 文件

##
#####tomcat的基础镜像,提前下载好
FROM centos
#维护者
MAINTAINER xfw
#这个环境变量用来表名该镜像模板的最后更新时间
ENV REFRESHED_AT 2019-3-5   #切换镜像目录,进入/usr目录
WORKDIR /usr
#在/usr/下创建jdk目录,用来存放jdk文件
RUN mkdir jdk
#在/usr/下创建tomcat目录,用来存放tomcat
RUN mkdir tomcat#将宿主机的jdk目录下的文件拷至镜像的/usr/jdk目录下
ADD jdk1.8.0_141 /usr/jdk/
#将宿主机的tomcat目录下的文件拷至镜像的/usr/tomcat目录下
ADD apache-tomcat-8.5.34 /usr/tomcat/#设置环境变量
ENV JAVA_HOME=/usr/jdk
ENV CLASSPATH=$CLASSPATH:$JAVA_HOME/lib
ENV PATH=/sbin:$JAVA_HOME/bin:$PATH#公开端口
EXPOSE 8080
#设置启动命令
ENTRYPOINT ["/usr/tomcat/bin/catalina.sh","run"]

11.5 构建镜像 (后面有个.)

docker build -t zhiyou/tomcat .

11.6 创建容器并且运行

docker run --name tomcat -p 8080:8080 -d zhiyou/tomcat


Decker的介绍以及下载与安装(超级详细)相关推荐

  1. Keil(MDK-ARM-STM32)介绍、下载、安装与注册

    Ⅰ.写在前面 本文讲述的内容是Keil MDK-ARM版的介绍.下载.安装与注册,如果需要了解Keil C51版相关的文章,可以到我博客,或微信公众号查看并下载. Keil(C51)介绍.下载.安装与 ...

  2. STM32 ST-LINK Utility介绍、下载、安装、使用方法

    推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang 该文章相关教 ...

  3. Keil uVision5 MDK(ARM)软件的介绍、下载、安装与注册

    Ⅰ.写在前面 本文讲述的内容是Keil MDK-ARM版的介绍.下载.安装与注册,如果需要了解Keil C51版相关的文章,可以到我转载的原博客处查看并下载. 转载的博客原地址链接: http://b ...

  4. Intellij IDEA 初学入门图文教程(一) —— 介绍、下载和安装

    不知道从什么时候开始,发现周围的同事们都开始用 IDEA,可自己还在一直用着 eclipse,MyEclipse,STS 等开发环境,才发现虽然后面几种开发工具操作基本一致,可与前者差异性太大,结果导 ...

  5. EWSTM8系列教程01_IAR介绍、下载、安装和注册

    推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!https://www.cnblogs.com/captainbed 正文: IAR最新全套 ...

  6. Keil(MDK-ARM)介绍、下载、安装与注册

    版权声明:本文为博主strongerHuang原创文章,转载请标明:来自http://blog.csdn.net/ybhuangfugui 目录(?)[+] 写在前面 Keil介绍 概述 产品组件 支 ...

  7. Keil(MDK-ARM-STM32)一条龙----------介绍、下载、安装与注册

    Ⅰ.写在前面 本文讲述的内容是Keil MDK-ARM版的介绍.下载.安装与注册,如果需要了解Keil C51版相关的文章,可以到我博客,或微信公众号查看并下载. Keil(C51)介绍.下载.安装与 ...

  8. Keil(C51)一条龙------------介绍、下载、安装与注册

    Ⅰ.写在前面 本文讲述的内容是Keil C51版的介绍.下载.安装与注册,如果需要了解Keil MDK-ARM版的文章,可以到我博客,或微信公众号查看并下载. Keil(MDK-ARM)介绍.下载.安 ...

  9. CCS使用教程01:CCS的介绍、下载与安装

    未经许可禁止转载 目录 01  CCS的介绍.下载与安装 1  CCS的介绍 2  下载 3  安装 02  创建一个CCS工程 1  工作空间 2  创建一个新的CCS工程 3  编译与生成 03  ...

最新文章

  1. Python基础知识梳理(一)
  2. 亚马逊员工流动率150%,每8个月相当于“大换血”,网友:贝佐斯不知足
  3. ios--成员变量与属性的区别
  4. Hibernate中的核心接口query接口用法
  5. 嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误
  6. chkconfig的用法
  7. 从 0 到 1,高德 Serverless 平台建设及实践
  8. XLNet:广义自回归预训练语言模型 2019 NIPS
  9. 173. Insertion Sort List【LintCode by java】
  10. 即时通信软件实现原理
  11. 【8086汇编】输入一个整数,判断其奇偶性(输入范围:-32768~32767,含提示信息)
  12. fatal: unable to access ‘http://g.oho168.com:88/yanjiaxue/anymz.git/‘: Could not resolve host: g.oho
  13. 金牛座TGAM脑电波传感器模块
  14. 1.1 win10下wget的安装
  15. 自用房屋租住管理系统
  16. 如何制作一个简单的16位CPU
  17. Win10提示无法更新正在撤销安装怎么解决
  18. 信息系统安全等级保护、安全策略设计原则及安全方案笔记
  19. arcgis怎么压缩tif文件_使用gdal压缩tif文件
  20. java缩放图片_java 图片缩放(2)

热门文章

  1. docker容器挂载权限问题 导致日志文件不生成
  2. houdini 技术
  3. 7.3 BTC行情分析 整体震荡区间走势
  4. 联通取消漫游费损失63亿;ATT宣布2018年底推出5G行动服务 | IoT黑板报
  5. ROG 双系统安装+系统切换
  6. [竖立正确的贝叶斯三观] 关于predictive distribution 和非参贝叶斯的理解
  7. 华为手机打开html文件,华为手机必须打开的6个功能,让你手机顺滑流畅,再用3年也不卡!...
  8. chatgpt 18美元试用
  9. 十进制与二进制的数位关系
  10. XP WiN7远程桌面3389多用户登陆补丁及端口修改