docker容器的安装以及用法
1、了解docker
1.1、docker是什么
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)。
官方地址:docker地址
1.2、docker历史
2010年,几个搞IT的年轻人,就在美国成立了一家公司dotcloud做一些pass的云计算服务!
LXC有关的容器技术!他们将自己的技术(容器化技术)命名就是Docker!
Docker刚刚诞生的时候,没有引起行业的注意!(dotCloud就活不下去)
开源(开放源代码)
2013年,Docker开源!
Docker越来越多的人发现了docker的优点!就火了,Docker每个月都会更新一个版本!
2014年4月9日,Docker1.0发布!
Docker为什么这么火?十分的轻巧
在容器技术出来之前,我们都是使用虚拟机技术!
虚拟机:在window中装一个Vmware,通过这个软件我们可以虚拟出来一台或者多台电脑!(很笨重)
虚拟机也是属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!
2.docker的基本操作
2.1基本准备
这篇文章中我的运行环境都是在CentOS7中运行。
所以各位需要首先准备VMware Workstation Pro软件
1、去官网下载:VM官网
2、在官网下载可能会下载速度非常的慢, 所以这里给大家分享一个网盘(不是作者的网盘)
网盘地址
提取码:fmp2
下载安装后,还需要安装一台虚拟机,具体操作如下:
2.1.1 创建CentOS
这里可以选择你适合的大小,推荐至少2GB
这里内存根据自己电脑适合的大小来选择,推荐至少20G
最后确定是不是刚刚选择的信息
进入这个页面表示成功创建,现在进行下一步操作
这边选择《 简体中文 》
这一步一定需要选择,要不然进去后就看不到虚拟机的视图化,只有纯指令的页面,对于我们开发非常不便
选择完成后,就可以开始安装了
密码随意设置,我这里设置的是123456
出现这个页面,就代表我们的CentOS已经正在安装了,只需要等着结束即可
等进来之后,就是这个页面
这个时候,电脑是没有网络的,我们需要为他配置网络,可以查看以下博主的作品,质量非常高
CentOs配置网络
网络配置成功之后,就可以对虚拟机开始操作了
2.2、安装docker容器
2.2.1、docker基本组成
镜像(Image):
docker镜像就好比一个模板,我们可以通过这个模板来创建容器服务,tomcat镜像===>run==>tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
容器(container):
docker利用容器技术,独立运行一个或者一组应用 通过镜像来创建
启动,停止,删除,基本命令!
目前就可以把这个容器理解为就是一个简易的linux系统
仓库(repository):
仓库就是存放 镜像(image)的地方!
仓库又可以分为 公有仓库和私有仓库
2.2.2、创建yum
首先安装一个yum工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
安装成功后,执行命令,配置Docker的yum源(已更新为阿里云源):
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
更新yum,建立缓存
sudo yum makecache fast
2.2.3、创建docker
如果项目中有旧的docker,请先删除
yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine \docker-selinux
如果从来没安装过docker,可以省略这一步,直接进行下一步安装docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
启动和校验
# 启动Docker
systemctl start docker# 停止Docker
systemctl stop docker# 重启
systemctl restart docker# 设置开机自启
systemctl enable docker# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
镜像地址可能会变更,如果失效可以百度找最新的docker镜像。
配置镜像步骤如下:
# 创建目录
mkdir -p /etc/docker# 复制内容
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["http://hub-mirror.c.163.com","https://mirrors.tuna.tsinghua.edu.cn","http://mirrors.sohu.com","https://ustc-edu-cn.mirror.aliyuncs.com","https://ccr.ccs.tencentyun.com","https://docker.m.daocloud.io","https://docker.awsl9527.cn"]
}
EOF# 重新加载配置
systemctl daemon-reload# 重启Docker
systemctl restart docker
此镜像可能不太好用,速度有点慢,可以去下方链接中查找最新的镜像
国内镜像链接
推荐镜像:
#复制粘贴即可
echo '{"registry-mirrors": ["https://docker.1ms.run"]}' | sudo tee /etc/docker/daemon.json > /dev/null#刷新
systemctl daemon-reload#重启docker
systemctl restart docker
至此,整个docker的安装就完成了
2.3、docker快速入门
现在可以先安装一个MySQL,试一下我们的docker容器到底安装好了没
如果按传统的方式的话,分为以下几个步骤
(1):网站搜索MySQL的安装包并下载
(2):上传到linux环境中
(3):编译和配置环境
(4):安装并使用
而使用Docker安装,仅仅需要一步即可,在命令行输入下面的命令:
docker run -d \--name mysql \-p 3307:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=root \-v /mysql/data:/var/lib/mysql \-v /mysql/conf:/etc/mysql/conf.d \-v /mysql/init:/docker-entrypoint-initdb.d \mysql:8.0.26
这样可以直接去网站上找到对应的MySQL版本进行下载
(--name):MySQL容器的名称(可改)
(-p):前面的3307指的是安装的MySQL端口(可改),后面的3306指的是默认端口(不可改)
(-e):第一个指时区,设置后可以防止我们时间与本地时间对不上(可改,但建议不改)
(-e):第二个指MySQL容器的密码,可以根据自己的需求更改(可改)
后面三个无需管,直接粘贴即可
最后的MySQL如果未写版本,那么默认就是下载最新的版本,所以可以根据需求进行更改
如果出现上面这种情况,表示我们的MySQL容器正常安装成功了,如果不是这种情况很可能是出现了问题
大家可以发现,当我们执行命令后,Docker做的第一件事情,是去自动搜索并下载了MySQL,然后会自动运行MySQL,我们完全不用插手,是不是非常方便。
而且,这种安装方式你完全不用考虑运行的操作系统环境,它不仅仅在CentOS系统是这样,在Ubuntu系统、macOS系统、甚至是装了WSL的Windows下,都可以使用这条命令来安装MySQL。
要知道,不同操作系统下其安装包、运行环境是都不相同的!如果是手动安装,必须手动解决安装包不同、环境不同的、配置不同的问题!
而使用Docker,这些完全不用考虑。就是因为Docker会自动搜索并下载MySQL。注意:这里下载的不是安装包,而是镜像。镜像中不仅包含了MySQL本身,还包含了其运行所需要的环境、配置、系统级函数库。因此它在运行时就有自己独立的环境,就可以跨系统运行,也不需要手动再次配置环境了。这套独立运行的隔离环境我们称为容器。
说明:
-
镜像:英文是image
-
容器:英文是container
那么,docker到底是从哪里去下载镜像的呢?
docker官网
点击这里就可以进入docker的官网了
2.3、常用指令
docker的指令是非常多的,所以是非常难记的,那么我们就可以查看官方文档来提高我们开发的效率
dockcer指令
2.3.1、命令介绍
其中,比较常见的命令有:
命令 | 说明 |
---|---|
docker images | 查看本地镜像 |
docker rmi | 删除本地镜像 |
docker run | 创建并运行容器(不能重复创建) |
docker stop | 停止指定容器 |
docker start | 启动指定容器 |
docker restart | 重新启动容器 |
docker rm | 删除指定容器 |
docker ps | 查看容器 |
docker logs | 查看容器运行日志 |
docker exec | 进入容器 |
docker save | 保存镜像到本地压缩文件 |
docker load | 加载本地压缩文件到镜像 |
docker inspect | 查看容器详细信息 |
为了防止每次打开虚拟机都需要重启docker容器,所以我们在这里直接为它设置开机自启动
systemctl enable docker
这样下次启动虚拟机后就无需再次打开docker了,非常方便
并且docker里面的容器也同样可以进行自启动,根据需求制定即可
docker update --restart=always [容器名/容器id]
2.3.2、操作MySQL
刚刚我们安装了一个MySQL容器,现在查看它是否存在
使用命令:docker images,即可查看所有下载的镜像
docker images
由于我的之前下载过其他的镜像,所以显示比较多,如果是第一次下载那么就只有一个MySQL镜像,不会有其他的
现在我们查看MySQL的容器是否存在
使用命令docker ps即可查看所有下载的容器,这里为什么一个也没有呢?
因为docker ps只是显示所有正在运行的容器,而我们没有对MySQL设置自启动,所以说他现在是未启动的状态,所以我们可以使用另一个指令,将启动和没启动的全查出来
docker ps -a
(-a)指的是-all的简写,意思是所有都查出来
显而易见,所有的容器都查出来了
那么我们现在将MySQL的容器启动,用来后面的操作
docker start 【名字/ID】
执行这段命令就可以启动了,名字或者ID自己可以选择
启动完成后,我们可以在这里对数据库进行操作,也可以从Windows系统中对它进行操作
我这边使用的软件是navicat,软件可以自己选择,如果没有MySQL软件可以安装一个
Navicat2024最新版下载 (belacad.cn)
这边可以从官网进行下载
进软件后,点击连接后,选择MySQL,然后就可以进行连接了
后面的用户名密码也是根据安装来,可以看之前的设置
然后《主机》就是根据虚拟机的ip地址来决定的
使用 ifconfig 命令可以查看ip地址
需要找到ens33,下面的inet就是ip地址,所以我的ip地址就是(192.168.87.99)
双击连接,就可以看到很多的库,这样就表示我们的数据库就外部连接成功了
如果出现这种问题,可能是因为docker中的数据库容器未启动或者是信息填错了导致的
再根据上面检查一遍即可
想删除容器也很简单,使用docker rm 【名字/ID】就可以了
但是如果容器正在使用,那么就不可删除,这个时候就需要强制删除
docker rm -f 【名字/ID】
2.4、命令别名
在使用docker的过程中,有的命令执行很频繁,并且很长,所以我们就可以使用别名,减少代码
# 修改/root/.bashrc文件
vi /root/.bashrc
内容如下:
# .bashrc# User specific aliases and functionsalias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'# Source global definitions
if [ -f /etc/bashrc ]; then. /etc/bashrc
fi
首先使用vi 命令进入.bashrc文件进行修改
这边我举了几个例子,比如说:
《dis》就是《docker images》的简写
《rm》就是《rm -i》的简写
《dps》就是《docker ps》的简写
这样我们只需要执行简写后的命令,就可以以原命令的方式输出结果
这样减少了很多的代码,非常便利
注意:
执行完毕后需要执行《source /root/.bashrc》命令,让别名生效
2.5、数据卷
数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。
以Nginx为例,我们知道Nginx中有两个关键的目录:
-
html
:放置一些静态资源 -
conf
:放置配置文件
如果我们要让Nginx代理我们的静态资源,最好是放到html
目录;如果我们要修改Nginx的配置,最好是找到conf
下的nginx.conf
文件。
为了部署SSM的工程,需要使用到cp的命令将宿主机内的ssm.war文件复制到容器内部。
数据卷:将宿主机的一个目录映射到容器的一个目录中。
可以在宿主机中操作目录中的内容,那么容器内部映射的文件,也会跟着一起改变。
# 1. 创建数据卷
docker volume create 数据卷名称
# 创建数据卷之后默认会存放在一个目录下 /var/lib/docker/volumes/数据卷名称/_data
# 2. 查看数据卷的详细信息
docker volume inspect 数据卷名称
# 3. 查看全部数据卷
docker volume ls
# 4. 删除数据卷
docker volume rm 数据卷名称
# 5. 应用数据卷
# 当你映射数据卷时,如果数据卷不存在。Docker会帮你自动创建
docker run -v 数据卷名称:容器内部路径 镜像id
# 直接指定一个路径作为数据卷的存放位置。这个路径下是空的。
docker run -v 路径:容器内部的路径 镜像id
也就是说在创建容器的时候,就将数据卷配置好了,所以说如果想给已经安装的的容器再配置数据卷,最好的方法建议是重新再次安装一遍,安装时就配置好数据卷
相关文章:

docker容器的安装以及用法
1、了解docker 1.1、docker是什么 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现…...

Java中的Consumer接口应该如何使用(通俗易懂图解)
应用场景: 第一次程序员A写好了个基础的遍历方法: public class Demo1 {public static void main(String[] args) {//假设main方法为程序员B写的,此时需要去调用A写好的一个遍历方法//1.如果此时B突然发现想将字符串以小写的形式打印出来,则…...

D102【python 接口自动化学习】- pytest进阶之fixture用法
day102 pytest的usefixtures方法 学习日期:20241219 学习目标:pytest基础用法 -- pytest的usefixtures方法 学习笔记: fixture调用方法 实际应用 总结 pytest.mark.usefixtures(func),pytest的usefixtures方法,无…...

从零玩转CanMV-K230(4)-小核Linux驱动开发参考
前言 K230 芯片是一款基于 RISC-V 架构的端侧 AIoT 芯片,包含两个核心: CPU 1: RISC-V 处理器,1.6GHz,32KB I-cache, 32KB D-cache, 256KB L2 Cache,128bit RVV 1.0扩展 CPU 0: RISC-V 处理器,0.8GHz&am…...

上汽大通汽车CAN数据解析开发服务及技术商用领域详细解析
上汽大通G90是一款集豪华、科技与舒适于一身的中大型MPV,号称“国产埃尔法”。在国内市场,作为“卷王”的G90主要面向中大型MPV市场,满足家庭出行、商务接待和客运租赁等多元化场景需求,在国内市场上取得了不错的销售成绩。在海外…...

基于SCUI的后台管理系统
一、SCUI Admin 官方地址:https://python-abc.xyz/scui-doc/ 高性能中后台前端解决方案,基于 Vue3、elementPlus 持续性的提供独家组件和丰富的业务模板帮助你快速搭建企业级中后台前端任务。 预览地址:https://python-abc.xyz/scui-doc/de…...

使用频谱分析仪:RBW,Res BW,分辨率带宽;Sweep,扫描;noise floor,底噪,如何降低底噪?
RBW与Sweep的定义及其特性阐述: Res BW,即Resolution Bandwidth(分辨率带宽),是衡量仪器分辨信号细节能力的重要参数。当RBW的数值越小,意味着像素点的尺寸更为精细,从而能够观察到更为细微的信…...

项目管理工具Maven(一)
Maven的概念 什么是Maven 翻译为“专家”,“内行”Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。什么是理想的项目构建? 高度自动化,跨平台,可重用的组件,标准…...

阿里云ESC服务器一次性全部迁移到另一个ESC
摘要: 在云计算时代,服务器迁移是企业优化资源配置、提升业务灵活性的常见需求。本文将详细介绍如何将阿里云ECS(Elastic Compute Service)服务器一次性迁移到另一个ECS实例。整个迁移过程分为四个关键步骤: 创建自定义…...

搭建分布式Kafka集群
title: 搭建分布式Kafka集群 date: 2024-12-1 14:00:00 categories: - 服务器 tags: - Kafka - 大数据搭建分布式Kafka集群 在主节点上安装Kafka; Kafka使用Zookeeper服务器来存储元数据信息 本次实验环境:Centos 7-2009、Hadoop-3.1.4、JDK 8、Zookeep…...

【后端面试总结】深入解析进程和线程的区别
在操作系统和并发编程中,进程和线程是两个核心概念。它们各自承担着不同的职责,并在多任务处理中发挥着关键作用。本文将从定义、特性、应用场景以及优缺点等多个方面对进程和线程进行详细对比,帮助读者深入理解它们之间的区别。 一、进程和…...

java版电子招投标采购|投标|评标|竞标|邀标|评审招投标系统源码
招投标管理系统是一款适用于招标代理、政府采购、企业采购和工程交易等领域的企业级应用平台。该平台以项目为主线,从项目立项到项目归档,实现了全流程的高效沟通和协作。通过该平台,用户可以实时共享项目数据信息,实现规范化管理…...

SSM 赋能 Vue 助力:新锐台球厅管理系统的设计与实现的辉煌之路
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适…...

C++ 并发专题 - C++线程同步的几种方法
一:概述 线程同步是多线程编程中的一个重要概念,它用于控制多个线程之间对共享资源的访问,避免竞态条件(race condition)和数据不一致的问题。线程同步确保在多线程环境中,多个线程访问共享数据时能够按照某…...

使用Python脚本进行编写批量根据源IP进行查询的语句用于态势感知攻击行为的搜索
使用Python脚本进行编写批量根据源IP进行查询的语句 以下根据ip-list集里面的IP地址(可以自行扩充),然后采用srcaddress "{ip}" or 的形式进行打印并存储在路径为:桌面的IOC结果.txt --------------------------代码如…...

Python中的zip/unzip:像拉拉链一样组合数据的艺术
今天让我们一起探讨Python中一个优雅而强大的内置功能: zip 和 unzip 。听名字就知道,它就像我们衣服上的拉链一样,能把两边的数据完美地咬合在一起。 从一个有趣的例子开始 想象你正在开发一个班级管理系统。每个学生都有名字、成绩和评语…...

数电课设·简易数字钟(Quartus Ⅱ)
忽如一夜春风来,千树万树梨花开 —— 《白雪歌诵武判官归京》 岑参 【唐】 目录 简易数字钟 要点剖析: 逐步分析: 端口说明: 代码展示: 分部解释: 代码编译结果: 提醒 : …...

大模型中RAG模型的检索过程是如何实现的?(附最佳实践资料)
RAG模型的检索过程主要涉及以下几个步骤: 向量化(Embedding):首先,需要将外部知识库中的文档转换为计算机能够理解的向量形式。这一步骤通常使用预训练的嵌入模型(如BERT、GPT等)将文本转换为高…...

python:用 sklearn.metrics 评价 K-Means 聚类模型
sklearn 的 metrics 模块提供的聚类模型评价指标如下: ARI 评价法(兰德系数): adjusted_rand_score AMI 评价法(相互信息): adjusted_mutual_info_score V-measure 评分 : completeness_score FMI 评价法 : fowlkes_m…...

Spring依赖注入不同类型的数据
目录 前言 回顾 注入集合 List与set集合 Map集合 前言 前面学习依赖注入时注入的都是对象,这里记录注入的值为集合的情况 回顾 在注入的时候,如果要注入的属性的值为字符串或基本数据类型,用value即可;如果要注入一个对象的…...

Linux大杂烩!!!
Linux 命令大全 https://www.runoob.com/linux/linux-command-manual.html Linux下打印ASCII字符 ASCII码对照表及转换器 [rootuntifa_80 ~]# printf "\x30\n" 0 [rootuntifa_80 ~]# echo -e "\u0030" 0tar、gzip 打包解压命令 参考文章:ta…...

12.19问答解析
概述 某中小型企业有四个部门,分别是市场部、行政部、研发部和工程部,请合理规划IP地址和VLAN,实现企业内部能够互联互通,同时要求市场部、行政部和工程部能够访问外网环境(要求使用OSPF协议),研发部不能访问外网环境…...

C语言——实现杨氏矩阵
什么是杨氏矩阵? 概念: 有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的 eg: 1 2 3 4 5 6 7 8 9 题目: 请编写程序在这样的矩阵中查找某个数字是否存在。 要求:时间复…...

授权模型PAM
PAM(Privileged Access Management)是一种授权模型,用于管理和控制特权用户的访问权限。PAM的目标是确保特权用户只能在需要时获得所需的特权,并且他们的活动得到适当的监控和审计。 PAM的核心思想是将特权访问权限视为一种受限的…...

【Leecode】子集⭐⭐
子集 [78]子集I 题目描述 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例输入 示例 1: 输入:nums [1, 2, 3…...

Linux高性能服务器编程 | 读书笔记 | 12. 多线程编程
12. 多线程编程 注:博客中有书中没有的内容,均是来自 黑马06-线程概念_哔哩哔哩_bilibili 早期Linux不支持线程,直到1996年,Xavier Leroy等人开发出第一个基本符合POSIX标准的线程库LinuxThreads,但LinuxThreads效率…...

[HNCTF 2022 Week1]baby_rsa
源代码: from Crypto.Util.number import bytes_to_long, getPrime from gmpy2 import * from secret import flag m bytes_to_long(flag) p getPrime(128) q getPrime(128) n p * q e 65537 c pow(m,e,n) print(n,c) # 62193160459999883112594854240161159…...

解析Java中的Stream API:函数式编程与性能优化
自Java 8以来,Java语言引入了Stream API,为开发者提供了一种全新的数据处理方式。Stream API支持函数式编程风格,使得对集合、数组、IO流等数据源的操作更加简洁、直观且具有高效的性能优势。通过Stream API,我们可以在不修改原有…...

java简单题目练习
大家好,今天我们不学习新的内容,今天给大家分享一些简单的java算法题供大家练练手,那么我们下面就来看看。 那么大家下去练习一下,我们明天继续讲解类和对象的相关知识,谢谢大家!!!...

Kaggler日志--Day9
进度24/12/18 昨日复盘: 补充并解决Day7Kaggler日志–Day7统计的部分问题 今日进度: 继续完成Day8Kaggler日志–Day8统计问题的解答 明日规划: 今天报名了Regression with an Insurance Dataset算是新手村练习比赛,截止时间是2…...