Docker保姆级学习教程
文章目录
- 1、什么是Docker
- 1.1、容器技术
- 1.2、容器与虚拟机比较
- 1.3、Docker特点
- 1、更高效的利用系统资源
- 2、更快速的启动时间
- 3、一致的运行环境
- 4、持续支付和部署
- 5、更轻松的迁移
- 6、更轻松的维护和扩展
- 2、Docker组件学习
- 2.1、Docker客户端和服务器
- 2.2、Docker镜像
- 2.3、Registry(注册中心/镜像仓库)
- 2.4、Docker容器
- 3、Docker的安装
- 3.1、准备工作
- 1、准备Linux服务器
- 2、清除系统残余项
- 3、安装下载Docker
- 4、添加阿里云的软件源
- 5、更新yum缓存
- 3.2、安装Docker
- 1、安装Docker
- 2、启动Docker
- 3、开机启动Docker
- 4、移除Docker-ce服务
- 5、删除Docker依赖项
- 4、Docker常用命令
- 4.1、停止与启动容器
- 4.2、文件拷贝
- 4.3、目录挂载
- 4.4、查看容器IP地址
- 4.5、删除容器
- 4.6、登录容器
- 1、使用attach进入容器
- 2、使用exec命令进入容器
- 5、Docker安装常用软件
- 5.1、安装 MySQL
- 5.2、安装JDK
- 6、Docker中部署jar包运行
- 6.1、准备一个jar包
- 6.2、创建DockerFile文件
- 6.3、生成镜像
- 6.4、启动镜像
- 6.5、启动容器
- 6.6、运行效果查看
1、什么是Docker
首先看下Docker图标:
一条小鲸鱼上面有些集装箱,比较形象的说明了Docker的特点,以后见到这个图标等同见到了Docker
1.1、容器技术
- Docker是一个开源的应用容器引擎,它基于Go语言开发,并遵从Apache2.0开源协议
- 使用Docker可以让开发者封装他们的应用以及依赖包到一个可移植的容器中,然后发布到任意Linux机器上,也可以实现虚拟化
- Docker容器完全使用沙箱机制,相互之间不会有任何接口,这保证了容器之间的安全性
- Docker诞生于2013年初,目前有两个版本:Community Edition(CE,社区版)和EnterpriseEdition(EE,企业版)
1.2、容器与虚拟机比较
虚拟机:
- 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统
- 在实体计算机中能够完成的工作在虚拟机中都能够实现
- 在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量
- 每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作
区别:
- 虚拟机是在一台物理机上,利用虚拟化技术,虚拟出来多个操作系统,每个操作系统之间是隔离的。Docker是开源的应用容器引擎,依然需要先在电脑上安装操作系统,然后安装Docker容器管理器
- 虚拟机是在硬件级别进行虚拟化,而Docker是在操作系统的层面虚拟化
- 虚拟机是通过模拟硬件搭建操作系统,而Docker则是复用操作系统
- 虚拟机实现了操作系统之间的隔离,Docker只是进程之间的隔离,所以虚拟机的隔离级别更高,安全性更强
- Docker的运行速度更快
- 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客户端和服务器
- Docker是一个客户端-服务器(C/S)架构程序。
- Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。
- Docker提供了一个命令行工具Docker以及一整套RESTful API。
- 你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程
2.2、Docker镜像
- 镜像是构建Docker的基石。
- 用户基于镜像来运行自己的容器。
- 镜像也是Docker生命周期中的“构建”部分。
- 镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。
- 例如:添加一个文件;执行一个命令;打开一个窗口。也可以将镜像当作容器的“源代码”。
- 镜像体积很小,非常“便携”,易于分享、存储和更新
2.3、Registry(注册中心/镜像仓库)
- Docker用Registry来保存用户构建的镜像。
- Registry分为公共和私有两种。
- Docker公司运营公共的Registry叫做Docker Hub。
- 用户可以在Docker Hub注册账号,分享并保存自己的镜像
说明:在Docker Hub下载镜像巨慢,可以自己构建私有的Registry
2.4、Docker容器
- Docker可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。
- 容器是基于镜像启动起来的,容器中可以运行一个或多个进程。
- 我们可以认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。
- 容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务
所以Docker容器就是:一个镜像格式;一些列标准操作;一个执行环境
Docker借鉴了标准集装箱的概念:
标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件(所以说Docker图标很形象)
- 和集装箱一样,Docker在执行上述操作时,并不关心容器中到底装了什么,它不管是web服务器,还是数据库,或者是应用程序服务器什么的。所有的容器都按照相同的方式将内容“装载”进去
- Docker也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到Registry,然后下载到一个物理的或者虚拟的服务器来测试,再把容器部署到具体的主机中。像标准集装箱一样,Docker容器方便替换,可以叠加,易于分发,并且尽量通用
- 使用Docker,我们可以快速的构建一个应用程序服务器、一个消息总线、一套实用工具、一个持续集成(CI)测试环境或者任意一种应用程序、服务或工具。我们可以在本地构建一个完整的测试环境,也可以为生产或开发快速复制一套复杂的应用程序栈
3、Docker的安装
- Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
- 这是官网上对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/docker-ce/linux/centos/docker-ce.repo
装这个的目的是以后每个软件都优先从阿里云的软件库中下载,如果阿里云仓库没有,才会去docker.hub中下载,提高我们的下载速度。(与maven仓库同理)
5、更新yum缓存
为了保证能更新和下载需要的服务:如docker
输入命令并且更新成功命令
sudo yum makecache fast
- 我们在更新 yum 源或者出现配置yum源之后,通常都会使用 yum makecache 生成缓存,这个命令是将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度
- 如果觉得占用磁盘空间,可以使用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随着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 -version
搞定,安装成功了
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.wujiangbo</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>
启动类:
package cn.wujiangbo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;@SpringBootApplication
@EnableScheduling
public class App {public static void main(String[] args){SpringApplication.run(App.class, args);}}
定时任务:
package cn.wujiangbo.task;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 primetoninc/jdk:1.8# 作者签名MAINTAINER wujiangbo# 简化 jar 的名字路径COPY dockerDemo.jar /app.jar# 执行 java -jar 命令 (CMD:在启动容器时才执行此行。RUN:构建镜像时就执行此行)CMD java -jar /app.jar# 设置对外端口为 8080EXPOSE 8080
然后将【DockerFile】文件上传到【dockerTest】目录中,结果如下:
6.3、生成镜像
生成本工程的镜像:
docker build -t docker_test:docker_demo -f /opt/dockerTest/DockerFile /opt/dockerTest --no-cache --force-rm
生成成功,然后使用【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包可以正常的启动和停止了
Docker保姆级学习教程相关推荐
- Yunzai-Bot(云崽) | Linux Docker保姆级安装教程
看了很多网上讲解的云崽,都感觉没有完全讲清楚Linux用户使用docker方法(windows我没咋用过,这里windows怎么套娃我就不说了) 而且官方文档内的docker脚本中gitee内部三个j ...
- Redis保姆级学习教程
文章目录 前言 一.基本命令 二.数据类型 1.String 2.List 集合 3.Set 集合 4.Hash集合 5.Zset集合 6.Bitmaps 7.HyperLogLog 8.Geospa ...
- Promox VE安装黑群晖保姆级图文教程
本教程是PVE家用All in one一体机方案的保姆级攻略之一,将详细介绍在PVE虚拟环境用xpenology大神Jun的引导镜像引导安装黑群晖的详细过步骤. PVE虚拟环境的构建请移步:Proxm ...
- 保姆级黑苹果教程:让你的Ryzen+A卡用上最新版本的MacOS
保姆级黑苹果教程:让你的Ryzen+A卡用上最新版本的MacOS 0x00:前言 教程那么多了,为什么要还要写?(博主的废话,可跳过) 几个月前,博主(学生狗一枚)在用GoodNotes(一个很有名的 ...
- [黑群晖]DSM7.1 ds3617xs 志强e3 1265lv3 b85保姆级安装教程
[黑群晖]DSM7.1 ds3617xs 志强e3 1265lv3 b85保姆级安装教程 鉴于网上几乎没有志强cpu安装的教程,我走了相当多的弯路,不一定适合你的cpu,但是有一些小问题的解决办法,可 ...
- yolov5 6.1官方模板TensorRT加速保姆级图文教程
加速的基础流程今年春季已经写好了,可以完美复现加速. 需要补充的是运行export.py的报错,加一句: pip install onnx 这会写教程的时候,电脑是昨天新做的系统,没有python以及 ...
- PID 控制保姆级培训教程下-全国大学生电子设计大赛赛前必备
紧接上回<PID 控制保姆级培训教程上-全国大学生电子设计大赛赛前必备> http://t.csdn.cn/TY4eB 上回介绍到 书接上回,实操设计,干货满满.... 3 数字控制器的模 ...
- matlab按图像边缘抠图_不会抠图?保姆级抠图教程!手把手教你抠图(一)
本篇教程由浅入深的了解ps当中的每一个抠图工具以及原理,帮助大家提升工作效率的同时,还能打破很多同学对抠图的一些刻板印象. 抠图是我们几乎每一天都能接触到的工作,说到最好用的抠图工具,有的同学觉得是魔 ...
- Alexa对接开发java版(保姆级图文教程)
文章目录 前言 一.准备工作? 二.使用步骤 1.登陆科技账号创建函数 2.登陆开发在账号创建技能 3.测试 总结 前言 提示:真正的保姆级图文教程,因本人java开发,准备写篇java+node版本 ...
最新文章
- 清华大学开源迁移学习算法库:基于PyTorch实现,支持轻松调用已有算法
- 阿里云服务器ecs绑定域名,端口的问题,不用80端口
- [攻防世界 pwn]——welpwn
- 我遇到的Quartus II警告及原因——持续更新
- ajax返回数据报406,ajax – 406返回JSON对象时出错 – 意外内容
- 一步一步教你实现iOS音频频谱动画(一)
- runtime--实现篇02(Category增加属性)
- JavaWeb工程师知识图谱
- JAVA基础整理-6.Java数据类型
- php 把java list对象转成数组,java_JSON的String字符串与Java的List列表对象的相互转换,在前端:
1.如果json是List对象 - phpStudy...
- 程序员面试宝典 笔记 第七章
- 西南科技大学OJ题 约瑟夫问题的实现0956
- CHM电子书木马制作攻略
- vbscript for 转 php for,VBS教程:VBScript 基础-使用循环语句
- esp分区引导修复失败_gpt分区怎么修复引导?uefi+gpt分区修复esp引导教程
- 博大考神》2006版之Word2003题库版操作提示
- 使用fsck命令检查并修复linux文件系统
- fiddler 抓取手机上点击微信公众号的链接
- 23种java设计模式详解-代理模式
- 百度,dingding 安装在ubuntu1604
热门文章
- java如何隐藏sheet,Java 添加、隐藏、删除Excel工作表(基于Spire.Cloud.Sdk for Java)
- RocketMQ学习笔记(二)
- 百度、谷歌、雅虎网站地图提交地址
- 半年卖出4.6亿只粽子,老字号的“想象空间”有多大?
- MySQL TRIGGER
- VBA,如何使用类msgbox的效果,但是让窗口过几秒自动关闭? (未完成)
- 【C语言】输入一个年份和月份,输出该月的天数
- 3 分钟生成一个单元测试报告,这个样式爱了
- 四.设备某一参数的标示方法。 一般是结构体,结构体嵌套结构体
- 计算机联锁控制系统的软件应具备信号操作功能,车站信号计算机联锁控制系统—软件.ppt...