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.hqwc.cn/news/160698.html

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

相关文章

Linux的指令和用途(持续更新)

1. 基本指令: 概念介绍: 1. 目录🟰文件夹 Linux指令用法说明who查看哪些人登陆我的机器whoami (who am i)查看当前账号是谁 pwd 查看当前我所在的目录clear 清屏 tree 目录名(文件夹名)以树形结构列出该文件夹下的所有…

【软件STM32cubeIDE下H73xx配置串口uart1+中断接收/DMA收发+HAL库+简单数据解析-基础样例】

#【软件STM32cubeIDE下H73xx配置串口uart1中断接收/DMA收发HAL库简单数据解析-基础样例】 1、前言2、实验器件3-1、普通收发中断接收实验第一步:代码调试-基本配置(1)基本配置(3)时钟配置(4)保存…

将Bean注入Spring容器的五种方式

将bean放入Spring容器中有哪些方式? 我们知道平时在开发中使用Spring的时候,都是将对象交由Spring去管理,那么将一个对象加入到Spring容器中,有哪些方式呢,下面我就来总结一下 1、Configuration Bean 这种方式其实也是…

最长回文子串-LeetCode5 动态规划

由于基础还不是很牢固 一时间只能想到暴力的解法: 取遍每个子串 总数量nn-1n-2…1 O(n^2) 判断每个子串是否属于回文串 O(n) 故总时间复杂度为O(n^3) class Solution { public:string longestPalindrome(string s) { int max0;string ret;for(int i0;i<s.size();i)for(int…

needle库下载TypeScript程序用HTTP做个爬虫模版

下面是一个使用needle库进行下载的TypeScript程序&#xff0c;它下载了pinduoduo的内容&#xff0c;并且使用了proxy_host为duoip&#xff0c;proxy_port为8000的爬虫IP。 import needle from needle;// 设置爬虫IP needle.requestDefaults({proxy: {host: duoip,port: 8000} }…

基于match_phrase搜索的分词优化

ES 的match_phrase 搜索需要完整匹配输入的内容&#xff0c;比如我们搜索 ‘中国人民’ &#xff0c;要保证的是doc中必须有 ‘中国人民’ 的内容出现。再比如我们搜索 ‘国人民’ 时&#xff0c;结果集中的 doc 中就要有 ‘国人民’ 的内容。一般在使用match 或 term 搜索的时…

Redis中Hash类型的命令

目录 哈希类型的命令 hset hget hexists hdel hkeys hvals hgetall hmget hlen hsetnx hincrby hincrbyfloat 内部编码 Hash类型的应用场景 作为缓存 哈希类型和关系型数据库的两点不同之处 缓存方式对比 Redis自身已经是键值对的结构了,Redis自身的键值对就…

体验SOLIDWORKS钣金切口工具增强 硕迪科技

在工业生产制造中&#xff0c;钣金加工是一种常用的加工方式&#xff0c;在SOLIDWORKS2024新版本中&#xff0c;钣金切口工具再次增强了&#xff0c;从SOLIDWORKS 2024 开始&#xff0c; 您可以使用切口工具在空心或薄壁圆柱体和圆锥体中生成切口。 只需在现有空心或薄壁圆柱体…

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

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

Linux常用命令——chage命令

在线Linux命令查询工具 chage 修改帐号和密码的有效期限 补充说明 chage命令是用来修改帐号和密码的有效期限。 语法 chage [选项] 用户名选项 -m&#xff1a;密码可更改的最小天数。为零时代表任何时候都可以更改密码。 -M&#xff1a;密码保持有效的最大天数。 -w&…

WiFi模块在智能家居中的应用与优化

智能家居技术的迅速发展已经改变了我们对家庭的定义。WiFi模块作为智能设备连接的核心&#xff0c;扮演着连接和控制智能家居生态系统的关键角色。本文将深入研究WiFi模块在智能家居中的应用&#xff0c;同时探讨如何通过优化来提升其性能和用户体验。 1. 智能家居中WiFi模块的…

python加上ffmpeg实现音频分割

前言: 这是一个系列的文章,主要是使用python加上ffmpeg来对音视频文件进行处理,包括音频播放、音频格式转换、音频文件分割、视频播放等。 系列文章链接: 链接1: python使用ffmpeg来制作音频格式转换工具(优化版) 链接2:<Python>PyQt5+ffmpeg,简单视频播放器的编写(…