Docker基础(简单易懂)

目录

一、docker是什么

核心概念

二、docker安装

1、卸载docker

2、使用yum 安装

三、docker常用命令

1、帮助命令

2、镜像命令

1)查看镜像

2)查询镜像

3)拉取镜像

4)删除镜像

3、容器命令

四、容器数据卷

五、DockerFile

1、dockerFile介绍

2、基础命令

3、springboot制作镜像并推送(linux)

1)打包springboot工程

2)上传到已经安装好docker的操作系统

3)编写dockerfile

4)制作镜像

5)制作成功后查看镜像

6)将镜像推送到阿里云镜像仓库

7)测试拉取镜像


一、docker是什么

docker的理念来自于集装箱,本质上就是一种虚拟机技术。一个开源的应用容器引擎,

让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口。使用go语言编写的。

实际上就是docker上拉取应用,只要Linux上能装docker,它就能使用docker上拉取的应用,

解决了环境不一致、解决了扩容、解决了资源之间相互隔离,动态扩容、微服务组件等问题

注意:docker本身并不是容器,他是创建容器的工具,是一个应用容器引擎。  

简单来说:

  1. 就是可以快速部署启动应用
  2. 实现虚拟化,完整资源隔离
  3. 一次编写,四处运行(有一定的限制,比如Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用)

为什么要用?

  1. 提供一次性的环境,假如需要安装Mysql,则需要安装很多依赖库、版本等,如果使用Docker则通过镜像就可以直接启动运行。
  2. 快速动态扩容,使用docker部署了一个应用,可以制作成镜像,然后通过docker快速启动
  3. 组建微服务架构,可以在一个机器上模拟出多个微服务,启动多个应用
  4. 更好的资源隔离和共享。

一句话:开箱即用,快速部署,可移植性强,环境隔离

核心概念

  1. 镜像(image)。注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放Ubuntu操作系统镜像的仓库,称为Ubuntu仓库,其中可能包括14.04、12.04等不同版本的镜像。

  2. 容器(container)。Docker镜像(Image)类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统。例如:一个镜像可以只包含一个完整的Ubuntu操作系统环境,可以把它称为一个Ubuntu镜像。

  3. 仓库(repository)。容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。可以从一个镜像创建无数个容器。平时我们主要操作的就是容器。我们也可以把容器打包成镜像以方便再次使用。镜像自身是只读的。容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。


 

二、docker安装

下面命令中有些命令后面会带个 \ 是因为嫌这个命令太长了给分隔开来,

如果运行命令不成功可以把 \ 给去了

1、卸载docker

先卸载是怕虚拟机之前有docker相关的残留

# yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine

 去 \ 后写法:

# yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine

2、使用yum 安装

1) 安装yum命令的一些依赖包

# yum -y install yum-utils

2) 设置国内的yum源。这样下载会快,也稳定(可设可不设)

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3) 更新yum源缓存,并安装 docker-ce

# yum -y install docker-ce docker-ce-cli containerd.io

4) 测试docker是否安装成功,查看版本

# docker version

5)启动docker

# 开机自启动
# systemctl start docker
# 启动docker
# systemctl start docker

6) 测试docker是否启动成功(在仓库中拉取一个helloWorld镜像)

# docker run --rm hello-world

三、docker常用命令

1、帮助命令

# docker version #显示docker的版本信息。 
# docker info #显示docker的系统信息,包括镜像和容器的数量 
# docker 命令 --help #帮助命令 
#帮助文档的地址:https://docs.docker.com/engine/reference/commandline/build/

2、镜像命令

汇总:

# docker images #查看所有本地主机上的镜像 可以使用docker image ls代替 
# docker search 搜索镜像 
# docker pull 下载镜像 docker image pull 
# docker rmi 删除镜像 docker image rm

1)查看镜像

# docker images

执行结果如下:

REPOSITORY                              TAG       IMAGE ID       CREATED         SIZE
hello-world                            latest    d1165f221234   7 weeks ago     13.3kB
mysql                                  latest    e3fcc9e1cc04   9 months ago    544MB

说明:

REPOSITORY:镜像的名称;

TAG:版本,latest表示最新版本;

IMAGE  ID:镜像ID,自动生成不会重复;

CREATED:什么时候创建的;

SIZE:大小

2)查询镜像

# 以查询mysql镜像为例 
# docker search mysql

说明:

NAME: 镜像仓库源的名称

DESCRIPTION: 镜像的描述

OFFICIAL: 是否 docker 官方发布

stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。

AUTOMATED: 自动构建

3)拉取镜像

# docker pull mysql

4)删除镜像

# mysql为例
# docker rmi mysql

3、容器命令

# 创建并启动容器
# docker run 参数 image 
# 查看所有容器
# docker ps -a
# 删除容器
# docker rm 容器id
# 启动容器
# docker start 容器id
# 停止容器
# docker stop 容器id
# 重启容器
# docker restart 容器id
# 强制停止容器
# docker kill 容器id
# 在运行的容器中执行命令
# docker exec 参数 容器id 命令
# 查看容器日志
# docker logs 容器id

四、容器数据卷

如果数据都在容器中,那么我们容器删除,数据就会丢失。例如mysql,如果把mysql容器删除了,那么数据也没有了。这种情况是不好的。所以我们需要把容器和数据分开。我们想把Docker容器中产生的数据,同步到本地(宿主机)。这就是容器卷。

# 三种挂载: 匿名挂载、具名挂载、指定路径挂载 
-v 容器内路径 #匿名挂载 
-v 卷名:容器内路径 #具名挂载 
-v /宿主机路径:容器内路径 #指定路径挂载 docker volume ls 是查看不到的

例如mysql:

# 参数说明
# -d 程序后台运行
# -p 绑定宿主机端口和容器端口  
# --name 给容器起个名字
# -v 挂载容器卷
# -it 输出
# run --name=mysql -p 3316:3306 -v /etc/mysql/data:/data -it -e MYSQL_ROOT_PASSWORD=123456  -d mysql
#进入mysql容器
​​​​​​​docker exec -it mysql bash
#修改mysql密码
mysql -u root -p

五、DockerFile

1、dockerFile介绍

dockerfile 是用来构建docker镜像的文件!命令参数脚本!

构建步骤:

1、 编写一个dockerfile文件
2、 docker build 构建称为一个镜像
3、 docker run运行镜像
4、 docker push发布镜像(DockerHub 、阿里云仓库)

2、基础命令

# DockerFile常用指令 
FROM # 基础镜像,一切从这里开始构建 
MAINTAINER # 镜像是谁写的, 姓名+邮箱 
RUN # 镜像构建的时候需要运行的命令 
ADD # 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录 
WORKDIR # 镜像的工作目录 
VOLUME # 挂载的目录 
EXPOSE # 保留端口配置 
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。 
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令 
ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。
COPY # 类似ADD,将我们文件拷贝到镜像中 
ENV # 构建的时候设置环境变量!

3、springboot制作镜像并推送(linux)

1)打包springboot工程

mvn package

2)上传到已经安装好docker的操作系统

3)编写dockerfile

注意dockerfile和jar要在同一目录下

FROM java:8 
COPY *.jar /app9091.jar 
CMD ["--server.port=8080"] 
EXPOSE 8080 
ENTRYPOINT ["java","-jar","app9091.jar"]

4)制作镜像

# 注意 后面有个. 表示是同级目录
# docker build -t springboot01:v1 .

5)制作成功后查看镜像

# docker images

6)将镜像推送到阿里云镜像仓库

此部分命令参考阿里云镜像仓库页面

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

# 请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
# 镜像版本号tag和ImageId 通过 docker images 查看
# docker login --username=wujianyou10****@163.com registry.cn-hangzhou.aliyuncs.com
# docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/youyou102105/test01:[镜像版本号]
# docker push registry.cn-hangzhou.aliyuncs.com/youyou102105/test01:[镜像版本号]

7)测试拉取镜像

# docker pull registry.cn-hangzhou.aliyuncs.com/youyou102105/test01:[镜像版本号]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/130482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习之基于Tensorflow人脸面部表情识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于Tensorflow的人脸面部表情识别系统是一种基于深度学习技术的图像处理应用,该系统主要通过人脸图像数…

CoCa论文笔记

摘要 计算机视觉任务中,探索大规模预训练基础模型具有重要意义,因为这些模型可以可以极快地迁移到下游任务中。本文提出的CoCa(Contrastive Captioner),一个极简设计,结合对比损失和captioning损失预训练一…

Zabbix如何监控腾讯云NAT网关

1、NAT网关介绍 NAT 网关(NAT Gateway)是一种支持 IP 地址转换服务,提供网络地址转换能力,主要包括SNAT(Source Network Address Translation,源网络地址转换)和DNAT(Destination N…

如何使用Python和Matplotlib创建双Y轴动态风格折线图 | 数据可视化教程

前言 我的科研论文中需要绘制一个精美的折线图,我的折线图中有三条曲线,分别表示期望角速度指令信号,和实际的角速度信号,还有实际的航向角信号,现在我已经拥有了数据,使用Python中matplotlib.plt.plot来直…

Java线程的基本概念和五种状态

1. 线程 1.1 创建线程 创建线程通常有以下三种方式: 实现 Runnable 接口,并重写其 run 方法: public class J1_Method01 {public static void main(String[] args) {System.out.println("Main线程的ID为:" Thread.curr…

公安涉密视频会议建设方案

公安涉密视频会议建设方案的制定需要考虑多方面因素。其一般是在复杂涉密网络环境中部署,怎样的内部保密部署方可保障涉密会议最大程度的加密进行呢?以下是从不同维度建设方案,可以根据实际应用场景进行相应的修改以及配置与之匹配的视频会议…

〔001〕虚幻 UE5 发送 get、post 请求、读取 json 文件

✨ 目录 🎈 安装 varest 扩展🎈 开启 varest 扩展🎈 发送 get 请求🎈 发送 post 请求🎈 读取 json 文件🎈 安装 varest 扩展 打开 虚幻商城,搜索 varest 关键字进行检索, varest 是一个 api 调用插件,支持 http/https 请求,也支持 json 文件的读取,最关键是该…

mermaid学习第一天/更改主题颜色和边框颜色/《需求解释流程图》

mermaid 在线官网: https://mermaid-js.github.io/ 在线学习文件: https://mermaid.js.org/syntax/quadrantChart.html 1、今天主要是想做需求解释的流程图,又不想自己画,就用了,框框不能直接进行全局配置&#xff0…

动态路由协议OSPF优化提速特性

1.OSPF协议通信过程与部署; 2.OSPF协议在项目上的应用场景; 3.OSPF有哪些优化特性? - OSPF - 开放式最短路径优先 - 一个动态路由协议 - 路由协议 - 理解魏 运行在路由器的一个软件 - 目的:为了帮助路由器和路由器彼…

Spring Boot 常见面试题

目录 1.Spring Boot 快速入门什么是 Spring Boot?有什么优点?Spring Boot 与 Spring MVC 有什么区别?Spring 与 Spring Boot 有什么关系?✨什么是 Spring Boot Starters?Spring Boot 支持哪些内嵌 Servlet 容器?如何设…

【LeetCode刷题-队列】--933.最近的请求次数

933.最近的请求次数 class RecentCounter {Queue<Integer> queue new LinkedList<>();public RecentCounter() {}public int ping(int t) {queue.offer(t);while(t - queue.peek() > 3000){queue.poll();}return queue.size();} }/*** Your RecentCounter obje…

游戏在小米设备上因自适应刷新率功能,帧率减半

1&#xff09;游戏在小米设备上因自适应刷新率功能&#xff0c;帧率减半 2&#xff09;Lua在计算时出现非法值&#xff0c;开启Debugger之后不再触发 3&#xff09;如何在Unity中实现液体蔓延的效果 这是第357篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&…

R语言gplots包的颜色索引表--全平台可用

R语言gplots包的颜色索引表–全平台可用

花了三年时间开发的开源项目,终于500 个 Star 了!快收藏

waynboot-mall 商城项目从疫情开始初期着手准备&#xff0c;到现在已经经过了 3 年多的时间&#xff0c;从项目初期到现在&#xff0c;一个人持续迭代&#xff0c;修复漏洞&#xff0c;添加功能&#xff0c;经历了前端开发工具从 vue2、vue-cli 切换到 vue3、vite 的转变&#…

JavaScript 自定义对象

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>JS-定义对象</title> </head><body&g…

leetCode 137. 只出现一次的数字 II + 位运算 + 模3加法器 + 真值表(数字电路) + 有限状态机

给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 常规解法&#xff1a;哈希&#xff08;hash&#xff09; …

NSSCTF第十页(2)

[HNCTF 2022 WEEK3]ssssti 题目提示是jinja2模板 怎么感觉之前做过&#xff0c;看到了注入 随便进行一下注入&#xff0c;发现了过滤 大致的黑名单 " _ args -- 无法使用 request.args os -- 无法导入os 不允许post -- 无法使用 request.value 正常用的payloa…

什么是协议栈? 用户态协议栈设计(udp协议栈)

什么是协议栈呢&#xff1f; &#xff08;协议栈&#xff08;Protocol Stack&#xff09;是计算机网络和通信系统中的一个重要概念&#xff0c;它指的是一组协议层的层次结构&#xff0c;这些协议层一起协同工作&#xff0c;以便在不同计算机或设备之间实现数据通信和交换。每…

暴力递归转动态规划(十三)

题目 给定3个参数&#xff0c;N&#xff0c;M&#xff0c;K 怪兽有N滴血&#xff0c;等着英雄来砍自己 英雄每一次打击&#xff0c;都会让怪兽流失[0~M]的血量 到底流失多少&#xff1f;每一次在[0~M]上等概率的获得一个值 求K次打击之后&#xff0c;英雄把怪兽砍死的概率。 暴…

httpclient工具类(支持泛型转换)

1、网上搜到的httpclient工具类的问题&#xff1a; 1.1、如下图我们都能够发现这种封装的问题&#xff1a; 代码繁杂、充斥了很多重复性代码返回值单一&#xff0c;无法拿到对应的Java Bean对象及List对象集合实际场景中会对接大量第三方的OPEN API&#xff0c;下述方法的扩展…