docker从安装到部署项目,一篇文章教会你

东湖之滨  金牌会员 | 2024-6-23 19:43:54 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 717|帖子 717|积分 2155

1、什么是Docker

   起首看下  Docker  图标:     
  
   一条小鲸鱼上面有些集装箱,比较形象的阐明白  Docker  的特点,以后见到这个图标等同见到了  Docker   1.1、容器技能

   1. Docker  是一个开源的应用容器引擎,它基于  Go  语言开辟,并服从  Apache2.0  开源协议     2.   使用  Docker  可以让开辟者封装他们的应用以及依赖包到一个可移植的容器中,然后发布到任意         Linux呆板上,也可以实现虚拟化     3. Docker  容器完全使用沙箱机制,相互之间不会有任何接口,这保证了容器之间的安全性     4. Docker  诞生于  2013  年初,目前有两个版本:  Community Edition(CE  ,社区版  )  和         EnterpriseEdition(EE,企业版  )   1.2、容器与虚拟机比较虚拟机:


虚拟机:
   1. 虚拟机(Virtual Machine)指通过软件模仿的具有完备硬件系统功能的、运行在一个完全隔离环境中的完备计算机系统     2.   在实体计算机中可以或许完成的工作在虚拟机中都可以或许实现     3.   在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量     4.   每个虚拟机都有独立的  CMOS  、硬盘和操纵系统,可以像使用实体机一样对虚拟机进行操纵     区别:     1.   虚拟机是在一台物理机上,使用虚拟化技能,虚拟出来多个操纵系统,每个操纵系统之间是隔离     的。  Docker  是开源的应用容器引擎,依然需要先在电脑上安装操纵系统,然后安装  Docker  容器管     理器     2.   虚拟机是在硬件级别进行虚拟化,而  Docker  是在操纵系统的层面虚拟化     3.   虚拟机是通过模仿硬件搭建操纵系统,而  Docker  则是复用操纵系统     4.   虚拟机实现了操纵系统之间的隔离,  Docker  只是历程之间的隔离,所以虚拟机的隔离级别更高,安全性更强     5. Docker  的运行速度更快     6. Docker  的文件要小的多,虚拟机密大的多   1.3Docker特点

1、更高效的使用系统资源

   Docker  对系统资源的使用率很高,无论是应用实行速度,内存损耗或者文件存储速度,都要比传统虚拟  机技能更高效。因此,对比虚拟化技能,一个相同设置的主机往往可以运行更多数量的应用   2、更快速的启动时间

   传统的虚拟化技能启动应用服务往往需要数分钟,而  Docker  容器应用,由于直接运行于宿主内核,无需启动完备的操纵系统,因此可以做到秒级,乃至毫秒级的启动时间,大大节约了开辟测试,部署的时间   3、一致的运行环境

   开辟过程中常见的一个题目是环境一致题目,由于开辟环境、测试环境、生产环境不一致,导致有些   bug  并未在开辟过程中发现。     而  Docker  的镜像提供了除内核外完备的运行时环境,确保环境一致性,从而不会在出现这段代码在我呆板上没题目这类题目     Docker  是一个采用集装箱思想出现技能,把相关依赖及运行代码打到一起,到达开辟环境,测试环境,     部署环境一样,淘汰由于环境不一致而出现题目   4、持续支付和部署

   对开辟和运维人员来说,最希望就是一次创建和部署,可以在任意地方运行。而且使用  Docker file  使镜像构建透明化,不但仅开辟团队可以明白应用运行环境,也方便运维团队明白应用运行所需条件,资助  更好的生产环境中部署该镜像  5、更轻松的迁移

   由于  Docker  确保了实行环境的一致性,使得应用的迁移更加容易。      Docker  可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,乃至是笔记本、其运行结果是一致的。      因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的环境   6、更轻松的维护和扩展

   Docker  使用的分层存储以及镜像技能,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简朴,基于基础镜像进一步扩展镜像也变得十分简朴。      此外,  Docker  团队同各个开源项目团队一起维护了一大批高质量的官网镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大降低了应用服务的镜像制作成本   2Docker组件学习



2.1Docker客户端和服务器

   1. Docker  是一个客户端  -  服务器(  C/S  )架构程序。     2. Docker  客户端只需要向  Docker  服务器或者保卫历程发出请求,服务器或者保卫历程将完玉成部工作并返回结果。     3. Docker  提供了一个命令行工具  Docker  以及一整套  RESTful API  。     4.   你可以在同一台宿主机上运行  Docker  保卫历程和客户端,也可以从当地的  Docker  客户端毗连到运  行在另一台宿主机上的长途  Docker  保卫历程   
  
2.2Docker镜像

   1.   镜像是构建  Docker  的基石。     2.   用户基于镜像来运行自己的容器。     3.   镜像也是  Docker  生命周期中的  “  构建  ”  部分。     4.   镜像是基于团结文件系统的一种层式结构,由一系列指令一步一步构建出来。     5.   例如:添加一个文件;实行一个命令;打开一个窗口。也可以将镜像当作容器的  “  源代码  ”  。     6.   镜像体积很小,非常  “  便携  ”  ,易于分享、存储和更新   2.3Registry(注册中心/镜像仓库)

   1. Docker  用  Registry  来生存用户构建的镜像。     2. Registry  分为公共和私有两种。     3. Docker  公司运营公共的  Registry  叫做  Docker Hub  。     4.   用户可以在  Docker Hub  注册账号,分享并生存自己的镜像      阐明:在  Docker Hub  下载镜像巨慢,可以自己构建私有的  Registry   2.4Docker容器

   1. Docker  可以资助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。     2.   容器是基于镜像启动起来的,容器中可以运行一个或多个历程。     3.   我们可以以为,镜像是  Docker  生命周期中的构建或者打包阶段,而容器则是启动或者实行阶段。     4.   容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务     所以  Docker  容器就是:一个镜像格式;一些列尺度操纵;一个实行环境     Docker  鉴戒了尺度集装箱的概念:     尺度集装箱将货物运往天下各地,  Docker  将这个模型运用到自己的筹划中,唯一不同的是:集装箱运输货物,而  Docker  运输软件(所以说  Docker  图标很形象)             》和集装箱一样,Docker  在实行上述操纵时,并不关心容器中到底装了什么,它不管是  web  服务器,   还是数据库,或者是应用程序服务器什么的。全部的容器都按照相同的方式将内容  “  装载  ”  进去             》Docker也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到  Registry  ,然  后下载到一个物理的或者虚拟的服务器来测试,再把容器部署到具体的主机中。像尺度集装箱一样,  Docker  容器方便替换,可以叠加,易于分发,并且只管通用            》使用  Docker  ,我们可以快速的构建一个应用程序服务器、一个消息总线、一套实用工具、一个持续   集成(  CI  )测试环境或者任意一种应用程序、服务或工具。我们可以在当地构建一个完备的测试环  境,也可以为生产或开辟快速复制一套复杂的应用程序栈     
  
3Docker的安装

   1. Docker   是一个开源的应用容器引擎,让开辟者可以打包他们的应用以及依赖包到一个可移植的镜  像中,然后发布到任何盛行的   Linux  或  Windows   呆板上,也可以实现虚拟化。容器是完全使用沙     箱机制,相互之间不会有任何接口。     2.   这是官网上对  Docker  的介绍。说白了,  Docker  就是方便我们环境搭建和开辟使用的     本日告急是教大家怎样搭建一个  docker  ,资助刚刚接触  docker  的同学快速搭建  docker  。好了,废话不多说,开始   3.1、准备工作

1、准备Linux服务器

   Linux  服务器一台,且上面的安装的  Centos  系统内核要不低于  3.10  。你可以通过  uname -r  来查询当前内核版本,我当地的虚拟机:     
  
2、清除系统残余项

   假如你的  Llinux  服务器之前没有装过  Docker  ,可以直接跳过此步骤   
  1. sudo yum remove docker
复制代码

   
  
   我这台  Linux  服务器上刚装的虚拟机,是新的,所以没有什么需要删除的    3、安装下载Docker

   接下来我就通过  FinalShell  工具来输入命令了     安装下载  Docker  的命令如下:   
  1. sudo yum install -y yum-utils device-mapper-persistent-data lvm2
复制代码
   输入命令后回车,等一会,等他安装完毕:     
  
   安装完毕是如许了:     
  
4、添加阿里云的软件源

   输入下面命令:  
  1. sudo yum-config-manager --add-repo http://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo
复制代码


   装这个的目的是以后每个软件都优先从阿里云的软件库中下载,假如阿里云仓库没有,才会去     docker.hub  中下载,提高我们的下载速度。(与  maven  仓库同理)   5、更新yum缓存

   为了保证能更新和下载需要的服务:如  docker     输入命令并且更新成功命令   
  1. sudo yum makecache fast
复制代码


   1.   我们在更新   yum   源或者出现设置  yum  源之后,通常都会使用   yum makecache   生成缓存,这个命令是将软件包信息提前在当地缓存一份,用来提高搜索安装软件的速度     2.   假如觉得占用磁盘空间,可以使用  yum clean  指令清除缓存:【  yum clean all  】   3.2、安装Docker

1、安装Docker

   安装  Docker  ,  Docker  版本分为:  CE  (社区免费版)和  EE  (企业版,安全  CE  )     命令如下:   
  1. sudo yum -y install docker-ce
复制代码

   

  开始下载并安装  Docker  ,稍等一会,系统正在下载     看到  complete  ,表示下载安装成功了   2、启动Docker

   如下命令启动  Docker  :   
  1. sudo systemctl start docker
复制代码
   查看  Docker  是否成功,输入命令:   
  1. docker info
复制代码
   我们可以看到  Docker  已经安装成功且容器与镜像数都为  0  ,是一个全新的  docker  服务     至此,我们  Docker  安装成功了     
  3、开机启动Docker

   如下命令启动  Docker  :   
  1. sudo systemctl start docker
复制代码
   查看  Docker  是否成功,输入命令:     
  1. docker info
复制代码

     我们可以看到   Docker   已经安装成功且容器与镜像数都为   0   ,是一个全新的   docker   服务        至此,我们   Docker   安装成功了           3   、开机启动   Docker        如下命令可以设置   Docker   随着   Linux   开机而启动        
  1. sudo systemctl enable docker
复制代码
  

   
    4、移除Docker-ce服务

  1. sudo yum remove docker-ce
复制代码
5、删除Docker依赖项

  1. sudo rm -rf /var/lib/docker
复制代码
4Docker常用命令

  1. docker search 镜像名称 //搜索镜像
  2. docker pull 镜像名称:版本号 //拉取对应版本的镜像
  3. docker pull 镜像名称 //默认拉取最新的镜像
  4. docker images //查看本地已下载的镜像
  5. docker ps //查看正在运行的容器
  6. docker ps -a //查看所有的容器(包括run、stop、exited状态的)
  7. docker container ls //查看正在运行的容器
  8. docker rm 容器ID //只能删除没有在运行的容器
  9. docker rm -f 容器ID //可以删除正在运行的容器
  10. docker run -p 本地主机端口号:容器服务端口号 --name 容器名字 [-e 配置信息修改] -d 镜像名字
  11. docker start 容器ID //启动容器
  12. docker stop 容器ID //终止容器
  13. docker rmi 镜像名称orID //删除镜像
  14. docker rmi 镜像名称orI --force //强制删除镜像
复制代码
4.1、制止与启动容器

   制止正在运行的容器:  docker stop   容器名  /  容器  id     启动已运行过的容器:  docker start   容器名  /  容器  id   4.2、文件拷贝

   假如我们需要将文件拷贝到容器内可以使用  cp  命令   
  1. docker cp 需要拷贝的文件或目录容器名称:容器目录
复制代码
   也可以将文件从容器内拷贝出来   
  1. docker cp 容器名称:容器目录需要拷贝的文件或目录
  2. docker cp /1.txt redis:/ #把linux中的/1.txt文件,拷贝到redis容器中的 / 根目录 docker
  3. cp redis:/2.txt / #把redis容器中的 /2.txt ,拷贝到 linux的 / 根目录
复制代码

  4.3、目录挂载

        
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,如许我们就可以通过修改宿主机某个目录的文件从而去影响容器。

   创建容器 添加  -v  参数 后边为  宿主机目录  :  容器目录   
  1. docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos2 centos:7
复制代码

     假如你共享的是多级的目录,大概会出现权限不敷的提示:permission denied      这是因为CentOS7  中的安全模块  selinux  把权限禁掉了,我们需要添加参数  --privileged=true  来解决挂载的目录没有权限的题目   4.4、查看容器IP地点

   我们可以通过以下命令查看容器运行的各种数据   
  1. docker inspect mycentos2
复制代码
   也可以直接实行下面的命令直接输出  IP  地点   
  1. docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2
复制代码

  4.5、删除容器

   删除指定的容器:  docker rm   容器名  /  容器  ID     留意,只能删除制止的容器     删除全部容器:   
  1. docker rm docker ps -a -q
复制代码

  4.6、登录容器

   我们先查看一下正在运行的容器:     
    目前有  JDK  和  MySQL  都在运行,接着看   1、使用attach进入容器

  1. docker attach 53
复制代码
  此中的   “53”   指的是什么呢?     我们启动的  Java  镜像的容器  ID  是  “53d4afb331e4”  ,所以,   docker attach   命令后面,你可以指定容器  ID来进入具体的容器。可以指定  53  、  53d4  、  53d4afb  等任意长度的值,都代表了当前的  java  容器     
   除了使用容器ID进入容器之外,也可以使用容器的别名进入容器:
  1. docker attach java
复制代码

  2、使用exec命令进入容器

   通过容器别名进入容器:   
  1. docker exec -it java /bin/bash
复制代码

    通过容器  ID  进入容器:   
  1. docker exec -it 53 /bin/bash
复制代码

    进入容器后,可以查看  Java  的版本信息,如下图所示:     
  
5Docker安装常用软件

5.1、安装 MySQL

   起首在  Docker  仓库中搜索一下  MySQL  ,命令如下:   
  1. docker search mysql
复制代码

    结果:     
  
我们这里安装MySQL8.0 的,命令如下:
  
  1. docker pull mysql:8.0
  2. docker pull mysql //默认拉取最新版本
复制代码

    下载中,稍等一会     
  
   查看当地仓库镜像是否下载成功     
  
  
  1. docker images mysql:8.0
复制代码
  
   运行  MySQL8.0  容器:   
  1. docker run -p 3307:3306 --name mysql8.0 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
  2. 参数说明:
  3. -p 将本地主机的端口映射到docker容器端口(因为本机的3306端口已被其它版本占用,所以使用3307)
  4. --name 容器名称命名
  5. -e 配置信息,配置root密码
  6. -d 镜像名称
复制代码

  
    查看  mysql8.0  容器运行环境   
  1. docker ps
复制代码

  
    docker  登录  mysql   
  1. docker exec -it mysql8.0 bash
  2. mysql -uroot -p
复制代码

  
  然后输入暗码root就可以登录成功了
   接下来,我们用当地的【  Navicat Premium 15  】工具来毗连这个数据库试试:      
  
   查询版本号:   
  1. select version();
复制代码
   结果:   
  
5.2、安装JDK

   命令:   
  1. docker pull primetoninc/jdk:1.8
复制代码

  
    安装完成:     
  
   启动  JAVA  镜像容器:   
  1. docker run -d -it --name java primetoninc/jdk:1.8
  2. 参数说明:
  3. run:启动一个镜像容器
  4. -d:指定容器运行于后台
  5. -it:-i 和 -t 的缩写;
  6. -i:以交互模式运行容器,通常与 -t 同时使用
  7. -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用
  8. --name:第一个“java”是为容器指定了一个别名,而第二个“java”指的是下载镜像时的名称
复制代码

   看下是否安装成功:   
  1. java -versrion
复制代码
   
  
   搞定,安装成功了    6Docker中部署jar包运行

6.1、准备一个jar

   我这里趁便写了一个  SpringBoot  项目,里面什么都没有,只有一个定时任务,每隔两秒打印一句话而     已:  
  1. pom依赖:
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <project xmlns="http://maven.apache.org/POM/4.0.0"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  6. http://maven.apache.org/xsd/maven-4.0.0.xsd">
  7. <modelVersion>4.0.0</modelVersion>
  8. <groupId>cn.test</groupId>
  9. <artifactId>DockerDemo</artifactId>
  10. <version>1.0-SNAPSHOT</version>
  11. <!--1、引入SpringBoot-->
  12. <parent>
  13. <groupId> org.springframework.boot</groupId>
  14. <artifactId>spring-boot-starter-parent</artifactId>
  15. <version>2.0.5.RELEASE</version>
  16. </parent>
  17. <dependencies>
  18. <!--web依赖-->
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter-web</artifactId>
  22. </dependency>
  23. </dependencies>
  24. <build>
  25. <plugins>
  26. <plugin>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-maven-plugin</artifactId>
  29. <version>2.3.5.RELEASE</version>
  30. <configuration>
  31. <!--自己手动导入的jar包也需要打包-->
  32. <includeSystemScope>true</includeSystemScope>
  33. </configuration>
  34. </plugin>
  35. <plugin>
  36. <groupId>org.apache.maven.plugins</groupId>
  37. <artifactId>maven-surefire-plugin</artifactId>
  38. <version>2.12.4</version><configuration>
  39. <!--测试包下的代码出错不影响项目的编译-->
  40. <testFailureIgnore>true</testFailureIgnore>
  41. <!--跳过测试包代码-->
  42. <skipTests>true</skipTests>
  43. </configuration>
  44. </plugin>
  45. </plugins>
  46. <finalName>dockerDemo</finalName>
  47. </build>
  48. </project>
复制代码

    启动类:  
  1. @SpringBootApplication
  2. @EnableScheduling
  3. public class App {
  4.     public static void main(String[] args){
  5.         SpringApplication.run(App.class, args);
  6.     }
  7. }
复制代码

    定时任务:  
  1. import org.springframework.scheduling.annotation.Scheduled;
  2. import org.springframework.stereotype.Component;
  3. import java.util.Date;
  4. @Component
  5. public class TestTask {
  6.     @Scheduled(fixedRate = 2000)
  7.     public void test(){
  8.         System.out.println("定时任务:每隔两秒执行一次" + new Date());
  9.     }
  10. }
复制代码
   没有  yml  设置文件     windows  当地启动时可以出来结果的,如下图所示:   6.2、创建DockerFile文件

   在  Linux  的  opt  目录中新建  dockerTest  文件夹,如下:(  opt  目录自己任意选择,我这里以  opt  目录为例)     
  
   然后使用工具将我们准备好的  jar  包传到该目录:     
  
   OK  ,目前  jar  包已经上传完成了,接下来在该目录中,新建  DockerFile  文件,内容如下:(我这里是当地新建  DockerFile  编辑好内容后上传到)   
  1. # jdk 是一个已有的包含 jdk 的镜像
  2. FROM java
  3. # 作者签名
  4. MAINTAINER libigtong
  5. # 简化 jar 的名字路径
  6. COPY dockerDemo.jar /app.jar
  7. # 执行 java -jar 命令 (CMD:在启动容器时才执行此行。RUN:构建镜像时就执行此行)
  8. CMD java -jar /app.jar
  9. # 设置对外端口为 8080
  10. EXPOSE 8080
复制代码

    然后将【  DockerFile  】文件上传到【  dockerTest  】目录中,结果如下:     
  
6.3、生成镜像

   生成本工程的镜像:   
  1. docker build -t docker_test:docker_demo -f /opt/dockerTest/Dockerfile
  2. /opt/dockerTest
复制代码

    生成成功,然后使用【  docker images  】命令查看了全部的镜像,果然有  docker  这个镜像了     
  6.4、启动镜像

  1. docker run --name dockerApp -p 8080:8080 -d 28dae64bba9d
复制代码

   从上面实行结果可以看出,镜像已经启动了   6.5、启动容器

  1. docker start cc7c3a1582d0
复制代码
  查看正在运行的容器:     
  
6.6、运行结果查看

   上面我们将容器已经启动了,那么怎么看我们那个  jar  包的运行结果了?     现在我们只需要进入到容器中就可以了:   
  
  1. docker attach cc7c3a1582d0
复制代码
  
   阐明已经成功的运行  jar  包了     接下来我们关闭容器试试:   
  
  1. docker stop cc7c3a1582d0
复制代码

  
    别的一个不停做打印的窗口就立马制止打印了:     
  
      测试成功,   jar   包可以正常的启动和制止了   
        觉得有用,点赞收藏支持一下,大家的支持是我写下去的动力呀 QAQ~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

东湖之滨

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表