ToB企服应用市场:ToB评测及商务社交产业平台
标题:
docker从安装到部署项目,一篇文章教会你
[打印本页]
作者:
东湖之滨
时间:
2024-6-23 19:43
标题:
docker从安装到部署项目,一篇文章教会你
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.3
、
Docker
特点
1
、更高效的使用系统资源
Docker 对系统资源的使用率很高,无论是应用实行速度,内存损耗或者文件存储速度,都要比传统虚拟 机技能更高效。因此,对比虚拟化技能,一个相同设置的主机往往可以运行更多数量的应用
2
、更快速的启动时间
传统的虚拟化技能启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完备的操纵系统,因此可以做到秒级,乃至毫秒级的启动时间,大大节约了开辟测试,部署的时间
3
、一致的运行环境
开辟过程中常见的一个题目是环境一致题目,由于开辟环境、测试环境、生产环境不一致,导致有些 bug 并未在开辟过程中发现。 而 Docker 的镜像提供了除内核外完备的运行时环境,确保环境一致性,从而不会在出现这段代码在我呆板上没题目这类题目
Docker
是一个采用集装箱思想出现技能,把相关依赖及运行代码打到一起,到达开辟环境,测试环境,
部署环境一样,淘汰由于环境不一致而出现题目
4
、持续支付和部署
对开辟和运维人员来说,最希望就是一次创建和部署,可以在任意地方运行。而且使用 Docker file 使镜像构建透明化,不但仅开辟团队可以明白应用运行环境,也方便运维团队明白应用运行所需条件,资助 更好的生产环境中部署该镜像
5
、更轻松的迁移
由于 Docker 确保了实行环境的一致性,使得应用的迁移更加容易。 Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,乃至是笔记本、其运行结果是一致的。 因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的环境
6
、更轻松的维护和扩展
Docker 使用的分层存储以及镜像技能,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简朴,基于基础镜像进一步扩展镜像也变得十分简朴。 此外, Docker 团队同各个开源项目团队一起维护了一大批高质量的官网镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大降低了应用服务的镜像制作成本
2
、
Docker
组件学习
2.1
、
Docker
客户端和服务器
1. Docker 是一个客户端 - 服务器( C/S )架构程序。 2. Docker 客户端只需要向 Docker 服务器或者保卫历程发出请求,服务器或者保卫历程将完玉成部工作并返回结果。 3. Docker 提供了一个命令行工具 Docker 以及一整套 RESTful API 。 4. 你可以在同一台宿主机上运行 Docker 保卫历程和客户端,也可以从当地的 Docker 客户端毗连到运 行在另一台宿主机上的长途 Docker 保卫历程
2.2
、
Docker
镜像
1. 镜像是构建 Docker 的基石。 2. 用户基于镜像来运行自己的容器。 3. 镜像也是 Docker 生命周期中的 “ 构建 ” 部分。 4. 镜像是基于团结文件系统的一种层式结构,由一系列指令一步一步构建出来。 5. 例如:添加一个文件;实行一个命令;打开一个窗口。也可以将镜像当作容器的 “ 源代码 ” 。 6. 镜像体积很小,非常 “ 便携 ” ,易于分享、存储和更新
2.3
、
Registry
(注册中心
/
镜像仓库)
1. Docker 用 Registry 来生存用户构建的镜像。 2. Registry 分为公共和私有两种。 3. Docker 公司运营公共的 Registry 叫做 Docker Hub 。 4. 用户可以在 Docker Hub 注册账号,分享并生存自己的镜像 阐明:在 Docker Hub 下载镜像巨慢,可以自己构建私有的 Registry
2.4
、
Docker
容器
1. Docker 可以资助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。 2. 容器是基于镜像启动起来的,容器中可以运行一个或多个历程。 3. 我们可以以为,镜像是 Docker 生命周期中的构建或者打包阶段,而容器则是启动或者实行阶段。 4. 容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务
所以
Docker
容器就是:一个镜像格式;一些列尺度操纵;一个实行环境
Docker 鉴戒了尺度集装箱的概念: 尺度集装箱将货物运往天下各地, Docker 将这个模型运用到自己的筹划中,唯一不同的是:集装箱运输货物,而 Docker 运输软件(所以说 Docker 图标很形象) 》和集装箱一样,Docker 在实行上述操纵时,并不关心容器中到底装了什么,它不管是 web 服务器, 还是数据库,或者是应用程序服务器什么的。全部的容器都按照相同的方式将内容 “ 装载 ” 进去 》Docker也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到 Registry ,然 后下载到一个物理的或者虚拟的服务器来测试,再把容器部署到具体的主机中。像尺度集装箱一样, Docker 容器方便替换,可以叠加,易于分发,并且只管通用 》使用 Docker ,我们可以快速的构建一个应用程序服务器、一个消息总线、一套实用工具、一个持续 集成( CI )测试环境或者任意一种应用程序、服务或工具。我们可以在当地构建一个完备的测试环 境,也可以为生产或开辟快速复制一套复杂的应用程序栈
3
、
Docker
的安装
1. Docker 是一个开源的应用容器引擎,让开辟者可以打包他们的应用以及依赖包到一个可移植的镜 像中,然后发布到任何盛行的 Linux 或 Windows 呆板上,也可以实现虚拟化。容器是完全使用沙 箱机制,相互之间不会有任何接口。 2. 这是官网上对 Docker 的介绍。说白了, Docker 就是方便我们环境搭建和开辟使用的 本日告急是教大家怎样搭建一个 docker ,资助刚刚接触 docker 的同学快速搭建 docker 。好了,废话不多说,开始
3.1
、准备工作
1
、准备
Linux
服务器
Linux 服务器一台,且上面的安装的 Centos 系统内核要不低于 3.10 。你可以通过 uname -r 来查询当前内核版本,我当地的虚拟机:
2
、清除系统残余项
假如你的 Llinux 服务器之前没有装过 Docker ,可以直接跳过此步骤
sudo yum remove docker
复制代码
我这台 Linux 服务器上刚装的虚拟机,是新的,所以没有什么需要删除的
3
、安装下载
Docker
接下来我就通过 FinalShell 工具来输入命令了 安装下载 Docker 的命令如下:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
复制代码
输入命令后回车,等一会,等他安装完毕:
安装完毕是如许了:
4
、添加阿里云的软件源
输入下面命令:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo
复制代码
装这个的目的是以后每个软件都优先从阿里云的软件库中下载,假如阿里云仓库没有,才会去 docker.hub 中下载,提高我们的下载速度。(与 maven 仓库同理)
5
、更新
yum
缓存
为了保证能更新和下载需要的服务:如 docker 输入命令并且更新成功命令
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 ) 命令如下:
sudo yum -y install docker-ce
复制代码
开始下载并安装 Docker ,稍等一会,系统正在下载 看到 complete ,表示下载安装成功了
2
、启动
Docker
如下命令启动 Docker :
sudo systemctl start docker
复制代码
查看 Docker 是否成功,输入命令:
docker info
复制代码
我们可以看到 Docker 已经安装成功且容器与镜像数都为 0 ,是一个全新的 docker 服务 至此,我们 Docker 安装成功了
3
、开机启动
Docker
如下命令启动 Docker :
sudo systemctl start docker
复制代码
查看 Docker 是否成功,输入命令:
docker info
复制代码
我们可以看到 Docker 已经安装成功且容器与镜像数都为 0 ,是一个全新的 docker 服务 至此,我们 Docker 安装成功了
3
、开机启动
Docker
如下命令可以设置 Docker 随着 Linux 开机而启动
sudo systemctl enable docker
复制代码
4
、移除
Docker-ce
服务
sudo yum remove docker-ce
复制代码
5
、删除
Docker
依赖项
sudo rm -rf /var/lib/docker
复制代码
4
、
Docker
常用命令
docker search 镜像名称 //搜索镜像
docker pull 镜像名称:版本号 //拉取对应版本的镜像
docker pull 镜像名称 //默认拉取最新的镜像
docker images //查看本地已下载的镜像
docker ps //查看正在运行的容器
docker ps -a //查看所有的容器(包括run、stop、exited状态的)
docker container ls //查看正在运行的容器
docker rm 容器ID //只能删除没有在运行的容器
docker rm -f 容器ID //可以删除正在运行的容器
docker run -p 本地主机端口号:容器服务端口号 --name 容器名字 [-e 配置信息修改] -d 镜像名字
docker start 容器ID //启动容器
docker stop 容器ID //终止容器
docker rmi 镜像名称orID //删除镜像
docker rmi 镜像名称orI --force //强制删除镜像
复制代码
4.1
、制止与启动容器
制止正在运行的容器: docker stop 容器名 / 容器 id 启动已运行过的容器: docker start 容器名 / 容器 id
4.2
、文件拷贝
假如我们需要将文件拷贝到容器内可以使用 cp 命令
docker cp 需要拷贝的文件或目录容器名称:容器目录
复制代码
也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录需要拷贝的文件或目录
docker cp /1.txt redis:/ #把linux中的/1.txt文件,拷贝到redis容器中的 / 根目录 docker
cp redis:/2.txt / #把redis容器中的 /2.txt ,拷贝到 linux的 / 根目录
复制代码
4.3
、目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,如许我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器 添加 -v 参数 后边为 宿主机目录 : 容器目录
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos2 centos:7
复制代码
假如你共享的是多级的目录,大概会出现权限不敷的提示:permission denied 这是因为CentOS7 中的安全模块 selinux 把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的题目
4.4
、查看容器
IP
地点
我们可以通过以下命令查看容器运行的各种数据
docker inspect mycentos2
复制代码
也可以直接实行下面的命令直接输出 IP 地点
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2
复制代码
4.5
、删除容器
删除指定的容器: docker rm 容器名 / 容器 ID 留意,只能删除制止的容器 删除全部容器:
docker rm docker ps -a -q
复制代码
4.6
、登录容器
我们先查看一下正在运行的容器:
目前有 JDK 和 MySQL 都在运行,接着看
1
、使用
attach
进入容器
docker attach 53
复制代码
此中的 “53” 指的是什么呢? 我们启动的 Java 镜像的容器 ID 是 “53d4afb331e4” ,所以, docker attach 命令后面,你可以指定容器 ID来进入具体的容器。可以指定 53 、 53d4 、 53d4afb 等任意长度的值,都代表了当前的 java 容器
除了使用容器ID进入容器之外,也可以使用容器的别名进入容器:
docker attach java
复制代码
2
、使用
exec
命令进入容器
通过容器别名进入容器:
docker exec -it java /bin/bash
复制代码
通过容器 ID 进入容器:
docker exec -it 53 /bin/bash
复制代码
进入容器后,可以查看 Java 的版本信息,如下图所示:
5
、
Docker
安装常用软件
5.1
、安装
MySQL
起首在 Docker 仓库中搜索一下 MySQL ,命令如下:
docker search mysql
复制代码
结果:
我们这里安装MySQL8.0 的,命令如下:
docker pull mysql:8.0
docker pull mysql //默认拉取最新版本
复制代码
下载中,稍等一会
查看当地仓库镜像是否下载成功
docker images mysql:8.0
复制代码
运行 MySQL8.0 容器:
docker run -p 3307:3306 --name mysql8.0 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
参数说明:
-p 将本地主机的端口映射到docker容器端口(因为本机的3306端口已被其它版本占用,所以使用3307)
--name 容器名称命名
-e 配置信息,配置root密码
-d 镜像名称
复制代码
查看 mysql8.0 容器运行环境
docker ps
复制代码
docker 登录 mysql
docker exec -it mysql8.0 bash
mysql -uroot -p
复制代码
然后输入暗码root就可以登录成功了
接下来,我们用当地的【 Navicat Premium 15 】工具来毗连这个数据库试试:
查询版本号:
select version();
复制代码
结果:
5.2
、安装
JDK
命令:
docker pull primetoninc/jdk:1.8
复制代码
安装完成:
启动 JAVA 镜像容器:
docker run -d -it --name java primetoninc/jdk:1.8
参数说明:
run:启动一个镜像容器
-d:指定容器运行于后台
-it:-i 和 -t 的缩写;
-i:以交互模式运行容器,通常与 -t 同时使用
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用
--name:第一个“java”是为容器指定了一个别名,而第二个“java”指的是下载镜像时的名称
复制代码
看下是否安装成功:
java -versrion
复制代码
搞定,安装成功了
6
、
Docker
中部署
jar
包运行
6.1
、准备一个
jar
包
我这里趁便写了一个 SpringBoot 项目,里面什么都没有,只有一个定时任务,每隔两秒打印一句话而 已:
pom依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.test</groupId>
<artifactId>DockerDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<!--1、引入SpringBoot-->
<parent>
<groupId> org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
<dependencies>
<!--web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.5.RELEASE</version>
<configuration>
<!--自己手动导入的jar包也需要打包-->
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version><configuration>
<!--测试包下的代码出错不影响项目的编译-->
<testFailureIgnore>true</testFailureIgnore>
<!--跳过测试包代码-->
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
<finalName>dockerDemo</finalName>
</build>
</project>
复制代码
启动类:
@SpringBootApplication
@EnableScheduling
public class App {
public static void main(String[] args){
SpringApplication.run(App.class, args);
}
}
复制代码
定时任务:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class TestTask {
@Scheduled(fixedRate = 2000)
public void test(){
System.out.println("定时任务:每隔两秒执行一次" + new Date());
}
}
复制代码
没有 yml 设置文件 windows 当地启动时可以出来结果的,如下图所示:
6.2
、创建
DockerFile
文件
在 Linux 的 opt 目录中新建 dockerTest 文件夹,如下:( opt 目录自己任意选择,我这里以 opt 目录为例)
然后使用工具将我们准备好的 jar 包传到该目录:
OK ,目前 jar 包已经上传完成了,接下来在该目录中,新建 DockerFile 文件,内容如下:(我这里是当地新建 DockerFile 编辑好内容后上传到)
# jdk 是一个已有的包含 jdk 的镜像
FROM java
# 作者签名
MAINTAINER libigtong
# 简化 jar 的名字路径
COPY dockerDemo.jar /app.jar
# 执行 java -jar 命令 (CMD:在启动容器时才执行此行。RUN:构建镜像时就执行此行)
CMD java -jar /app.jar
# 设置对外端口为 8080
EXPOSE 8080
复制代码
然后将【 DockerFile 】文件上传到【 dockerTest 】目录中,结果如下:
6.3
、生成镜像
生成本工程的镜像:
docker build -t docker_test:docker_demo -f /opt/dockerTest/Dockerfile
/opt/dockerTest
复制代码
生成成功,然后使用【 docker images 】命令查看了全部的镜像,果然有 docker 这个镜像了
6.4
、启动镜像
docker run --name dockerApp -p 8080:8080 -d 28dae64bba9d
复制代码
从上面实行结果可以看出,镜像已经启动了
6.5
、启动容器
docker start cc7c3a1582d0
复制代码
查看正在运行的容器:
6.6
、运行结果查看
上面我们将容器已经启动了,那么怎么看我们那个 jar 包的运行结果了? 现在我们只需要进入到容器中就可以了:
docker attach cc7c3a1582d0
复制代码
阐明已经成功的运行 jar 包了 接下来我们关闭容器试试:
docker stop cc7c3a1582d0
复制代码
别的一个不停做打印的窗口就立马制止打印了:
测试成功, jar 包可以正常的启动和制止了
觉得有用,点赞收藏支持一下,大家的支持是我写下去的动力呀 QAQ~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4