docker简单快速使用上手

1.Docker是什么?

Docker 是一个开源的容器化平台,主要用于开发、运输和运行应用程序。它通过提供轻量级的虚拟化机制,使得开发者可以在一个隔离的环境中运行和管理应用程序及其依赖项。Docker 的核心组件包括镜像(Image)、容器(Container)、Docker 引擎(Docker Engine)和 Docker Hub。

以下是 Docker 的主要概念和功能:

  1. 镜像(Image)
  • 镜像是一个轻量、独立、可执行的软件包,包含了运行某个应用程序所需的所有代码、运行时、库、环境变量和配置文件。可以将镜像看作是一个应用程序的模板。
  1. 容器(Container)
  • 容器是镜像的运行实例。每个容器都是一个隔离的进程,可以在任何支持 Docker 的操作系统上运行。容器之间相互隔离,并且可以独立于主机操作系统进行部署和管理。
  1. Docker 引擎(Docker Engine)
  • Docker 引擎是一个轻量级的运行时和工具集,用于创建、管理和运行容器。它包括一个服务端守护进程(Docker Daemon)、一个 REST API 接口和一个命令行界面(CLI)。
  1. Docker Hub
  • Docker Hub 是一个云端的镜像仓库,允许用户存储、共享和管理 Docker 镜像。用户可以从 Docker Hub 拉取公共镜像,也可以推送自己的镜像到 Docker Hub。

Docker 的优势

  1. 轻量级
  • 与传统的虚拟机相比,Docker 容器共享操作系统内核,不需要额外的操作系统开销,因此启动速度快,资源消耗少。
  1. 一致性和可移植性
  • Docker 镜像包含了应用程序及其所有依赖项,可以在任何运行 Docker 的环境中一致地运行,从而消除了“在我机器上可以运行”的问题。
  1. 敏捷性和效率
  • 开发者可以快速构建、测试和部署应用程序,通过 Docker 容器可以轻松地在不同环境之间迁移和扩展应用。
  1. 隔离性
  • 每个容器在一个隔离的环境中运行,确保应用程序之间不会互相干扰,并且可以更容易地管理应用程序的依赖关系。

Docker 使用场景

  1. 持续集成和持续部署(CI/CD)
  • Docker 使得开发和运维团队可以在整个应用生命周期中保持一致的环境,从而加快软件交付周期。
  1. 微服务架构
  • Docker 非常适合部署和管理微服务,每个微服务可以在一个独立的容器中运行,便于扩展和维护。
  1. 云计算和多云环境
  • Docker 容器可以轻松地在各种云环境中迁移和运行,支持混合云和多云策略。

总的来说,Docker 通过容器化技术,简化了应用程序的开发、部署和运行过程,提供了一种高效、灵活和可靠的解决方案。

2.个人简单理解

docker就一个Liunx虚拟机,属于阉割版的系统,这个系统只会出现对应应用程序所需要的所有代码、运行时、库、环境变量和配置文件,好处就是体积小,性能好

3.那我们为什么需要使用docker呢?

因为我们平时不管是开发,还是测试,运维部署环境,都需要一步一步的安装程序所需要的依赖包和相关插件,如此反复工作效率非常地下,如果我们学会了使用docker,那就可以直接简单一点可以实现几行命令,即可一键部署环境。

在这里插入图片描述

4.什么是镜像和容器

镜像:Docker将应用程序及其所需要的以来,函数库,环境,配置文件打包在一起,称为镜像

容器:镜像中的应用程序运行后形成的进程就是容器,只是dockers会给容器做隔离,对外不可见

5.Docker架构

dockers是一个cs架构的程序,由两部分组成

服务端:docker守护进程,复制处理docker指令,管理镜像,容器

客户端:通道命令或RestAPI向服务端发送指令,可以在本地或远程服务器发送指令。

6.安装Docker

Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。下面的介绍都针对社区版。

6.1卸载(可选)

如果之前安装过旧版本的docker,可以使用命令卸载

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine # 卸载老版本Docker

/etc/systemd -name '*docker*' -exec rm -f {} ; #清除配置文件和依赖文件

find /etc/systemd -name '*docker*' -exec rm -f {} \;

find /lib/systemd -name '*docker*' -exec rm -f {} \;

6.2安装docker

.在下载docker之前, 最好安装yumutils,并配置yumutils的yum-config-manager来设置稳定版的仓库/源, 方便之后的更新

yum install -y yum-utils # 安装

然后更新本地镜像源(根据实际情况使用)

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

然后输入命令:

yum install docker-ce

docker-ce为社区免费版

6.3启动docker

docker应用需要用到各种端口,逐一修改i防火墙设备,非常麻烦因此建议

启动docker前一定要关闭防火墙!

启动docker前一定要关闭防火墙!

启动docker前一定要关闭防火墙!

#关闭
systemctl stop  firewalld
#禁止开机启动防火墙
systemctl disable firewall

通过命令启动docker:

systemctl start docker   #启动docker服务

systemctl stop docker  #停止docker服务

systemctl restart docker   #重启docker服务

然后输入命令,可以查看docker版本

docker -v 

6.4配置镜像

docker官方镜像仓库网速较差,我们需要设置国内镜像,我们可以参考一下菜鸟教程的配置方法

7.Docker基本操作

7.1镜像相关命令

  • 镜像名称一般分两个部分组成:[repository]:[tag]

  • 在没有指定tag,默认是lastest.代表最新版本的镜像

在这里插入图片描述

7.2镜像操作命令

在这里插入图片描述

7.3举例我们安装一个Nginx环境

7.3.1docker hub镜像网站拉取镜像

首先去镜像仓库搜索nginx 镜像,比如docker hub

官方镜像地址:https://hub.docker.com/

在这里插入图片描述
在这里插入图片描述

7.3.2拉取镜像
# 1.获取镜像(默认为最新版本)
docker pull nginx


# 2.获取镜像(指定版本)
docker pull nginx:1.24.0

在这里插入图片描述

7.3.4查看镜像
# 2.查看本地镜像
docker images

# REPOSITORY :镜像名称
# TAG        :镜像标签(版本)
# IMAGE ID   :镜像ID
# CREATED    :创建时间
# SIZE       : 镜像大小

在这里插入图片描述

7.3.5镜像导出磁盘
#镜像导出
# -o 指定镜像文件名称
#  nginx:latest  为镜像名称和TAG

 docker save -o nginx.tar nginx:latest

在这里插入图片描述

#如果需要导入镜像,首先需要把原有的镜像进行删除处理,才能进行镜像导入
  docker rmi nginx:lastest

  #查看镜像
  docker images
  
  # 查看docker load 使用
  docker load  --help
  
  # -i 是指需要读取的镜像文件
  docker load -i nginx.tar

8.操作容器

在这里插入图片描述

8.1创建Nginx容器

在这里插入图片描述

# docker run :创建并运行一个容器
# --name :给容器起一个名字,比如叫mn
# -p:将宿主端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
# -d:后台运行容器
# nginx :镜像名称,例如nginx

docker run --name some-nginx  -p 8080:80  -d nginx

8.2 容器操作

#查看容器是否运行,不支持查看未允许的容器
docker ps

#返回结果
# contaidner id 唯一id
#image 镜像名称
# command 容器内容运行的命令
# created 创建时间
# status 运行状态
#ports 端口
# names 名称

### 查看容器允许日志

```bash
#查看容器运行日志
docker logs mn


#查看容器运行日志
# -f 持续输出日志信息
docker logs -f mn

#停止容器操作
docer stop mn

#再次启动容器
docker start mn

# 查看所有容器(包含已经停止的容器)
docker ps -a 

# 强制删除容器,包含在允许的容器
# -f 强制删除
docker rm -f mn

8.3 进入Nginx容器

进入容器,修改HTML文件内容,添加"你好"

进入容器,进入我们刚刚创建的nginx容器命令为:
  docker exec -it mn bash 
  
    docker exec :进入容器内容,执行一个命令
    -it:给当前进入的容器创建一个标准输入,输出终端,允许我们与容器交互
    mn :要进入的容器的名字
    bash :进入的容器后执行的命令,bash是一个liunx终端交互命令
    

在这里插入图片描述

9. 数据卷

当Docker容器运行的时候,会产生一系列的数据文件,这些数据文件会在关闭Docker容器时,直接消失的。但是其中产生部分的数据内容,
我们是希望能够把它给保存起来,另作它用的。关闭Docker容器=删除内部除了image底层数据的其他全部内容,即删库跑路


#1.不便于修改
当我们要修改Nginx的html内容时,需要进入容器内部修改,很不方便
#2.数据不可复用
在容器内的修改对外是不可见的,所有修改对新创建的容器是不可复用的
#3.升级维护困难
数据在容器内,如果要升级容器必然删除旧容器,所有数据都跟着删除了

数据卷是一个虚拟目录,指向宿主机文件系统中的某个目录

在这里插入图片描述

数据卷操作的基本语法如下:
docker volume [COMMAND]

docker vloime 命令是数据卷操作,根据命令后跟随的command 来确定下一步的操作
create  创建一个volume
imspect 显示一个或多个volume的信息
ls      列出所有的volume
prune   删除未使用volume
rm      删除一个或多个指定的volume


创建一个数据卷,并查看数据卷在宿主机的目录位置
#查看帮助文档
docker volume --help

#创建数据卷
docker volume create html

#查看数据卷
docker volume ls

#数据卷存放在那个位置
docker volume inspect html

#Mountpotint 存放位置

#删除未使用的指定数据卷
docker volume prune

#删除指定数据卷
docker volume rm html

9.1 数据卷挂载

我们以Nginx镜像举例使用,挂载完成数据卷,我们就不需要进入容器内修改数据

#然后挂载数据卷 -v 数据卷:docker容器的目录文件 如果数据卷不存在,会自定创建数据卷
docker run --name mn -p 80:80 -v html:/usr/share/nginx/html -d nginx

#查看数据卷
docker inspect html

#进入数据卷
cd /var/lib/docekr/volumes/html/_data

# 修改HTML文件
vi index.html

9.2 目录挂载到容器上

我们以Mysql数据库镜像举例使用,我们可以把配置文件直接挂载到容器上,便于管理配置文件

#查看镜像文件
docker images


#创建文件
mkdr -p mysql/data
mkdr -p mysql/conf


# 换行符 \
#允许mysql 
docker run \
  -- name mysql
  -e MYSQL_ROOT_PASSWORD=123 \
  -p 3306:3306 \
  -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
  -v /tmp/mysql/data:/var/lib/mysql \
  -d \
  mysql:5.7.25


在这里插入图片描述
我们可以通过两种方式实现数据的持久化,避免了容器停止或者删除升级导致的数据丢失问题

以上的内容为学习笔记,只能为大家提供一个简单Docker入门学习,大佬勿喷,有误请指正!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库浅识及MySQL的二进制安装

数据库基础概念与MySQL二进制安装与初始化 使用数据库的必要性 数据库可以结构化储存大量数据信息,方便用户进行有效的检索访问 有效的保持数据信息的一致性,完整性,降低数据冗余 可以满足应用的共享和安全方面的要求 数据库基本概念 数据…

Redis学习|Redis 是什么、Redis 能干嘛、Window安装Redis、Linux下安装Redis、Redis测试性能

Redis 是什么? Redis(Remote Dictionary Server),即远程字典服务! 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API. redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记…

C++:STL容器-map

C:STL容器-map 1. map构造和赋值2. map大小和交换3. map插入和删除4. map查找和统计5. map容器排序 map中所有元素都是pair(对组) pair中第一个元素为key(键),起到索引作用,第二个元素为value(实…

揭秘古代手术工具与技术:从中国起源的医疗奇迹

在人类历史的长河中,医学的发展一直是推动社会进步的重要力量。而手术作为医学的一个重要分支,其发展历程同样充满了传奇色彩。今天,我们将带您走进古代手术的世界,揭秘那些令人惊叹的手术工具和技术。 这把手术刀出土于河北西村遗…

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇入口切换SMB共享WMI管道DCOM组件Impacket套件CS插件

红队内网攻防渗透 1. 内网横向移动1.1 WMI进行横向移动1.1.1 利用条件:1.1.1 利用详情1.1.1.1 wmic1.1.1.1.1 正向shell上线1.1.1.1.2 反向shell上线1.1.1.2 cscript(不建议使用)1.1.1.3 wmiexec-impacket1.1.1.4 cs插件1.2 SMB横向移动1.2.1 利用条件:1.2.2 利用详情1.2.2…

java中Object和json相互转换的方式

1.org中jackson转换json,springboot中内置jackson ObjectMapper onew ObjectMapper(); List<>listnew ArrayList(); String jonso.writeAsValueString(list); 2.alibaba中fastjson转换成json GetMapping("/test")public TbUser testHttpClient(){String url…

BFS:解决最短路问题

文章目录 什么是最短路问题&#xff1f;1.迷宫中离入口最近的出口2.最小基因变化3.单词接龙4.为高尔夫比赛砍树总结 什么是最短路问题&#xff1f; 最短路问题是图论中的经典问题&#xff0c;旨在寻找图中两个节点之间的最短路径。常见的最短路算法有多种&#xff0c;这次我们…

计算机组成原理 | 硬件电路整理

计算机组成原理 | 硬件电路整理 桶形移位器原理图 全加器逻辑框图 多位可控加减法电路逻辑框图 可级联的4位先行进位电路 4位快速加法器 16位组内并行、组间并行加法器 实现原码一位乘法的逻辑框图 补码一位乘法的逻辑框图 无符号数阵列乘法器 原码不恢复余数法硬件逻辑框图 基…

代码随想录第31天|贪心算法

134. 加油站 参考 思路: 以每个油站相差作为判断, 比如: gas [5 8 2 8]cost [6 5 6 6] [-1 3 -4 2]错误 : 把相差最大点当作起点判断能否绕一圈 : 相加数组是否小于0局部最优: 当前累加rest[i]的和curSum一旦小于0&#xff0c;起始位置至少要是i1&#xff0c;因为从i…

中国信通院专访镜舟科技:开源商业化走了多远?

据《2023 中国开源发展蓝皮书》显示&#xff0c;随着数字化转型的深入&#xff0c;开源生态在去年快速发展&#xff0c;开源商业化的模式也逐渐成型。镜舟科技作为开源商业化的先行者&#xff0c;也在技术创新和商业拓展中稳步增长。 日前&#xff0c;中国信息通信研究院&…

【Gradio】如何设置 Gradio 数据框的样式

简介 数据可视化是数据分析和机器学习的关键方面。Gradio DataFrame 组件是一种流行的方式&#xff0c;在网络应用程序中显示表格数据&#xff08;特别是以 pandas DataFrame 对象的形式&#xff09;。 本文将探讨 Gradio 的最新增强功能&#xff0c;这些功能允许用户整合 pand…

21.智能指针(上)

目录 一、概念二、Box\<T\>2.1 概念与应用场景2.2 简单应用2.3 递归类型的创建 三、通过Deref trait将智能指针当作常规引用处理3.1 常规引用3.2 像引用一样使用Box\<T\>3.3 自定义智能指针3.4 函数和方法的隐式解引用强制转换3.5 解引用强制转换与可变性交互 四、…

WPF文本绑定显示格式StringFormat设置-数值类型处理

绑定显示格式设置 在Textblock等文本控件中&#xff0c;我们经常要绑定一些数据类型&#xff0c;但是我们希望显示的时候能够按照我们想要的格式去显示&#xff0c;比如增加文本前缀&#xff0c;后面加单位&#xff0c;显示百分号等等&#xff0c;这种就需要对绑定格式进行处理…

SpringBoot 搭建sftp服务 实现远程上传和下载文件

maven依赖&#xff1a; <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version> </dependency>application.yml sftp:protocol: sftphost: port: 22username: rootpassword: sp…

【CSS in Depth2精译】1.4 简写属性

文章目录 1.4 简写属性1.4.1 当心简写属性悄悄覆盖其他样式1.4.2 记住简写值的顺序1 上、右、下、左顺序2 先水平、再垂直的顺序 1.4 简写属性 简写属性&#xff08;Shorthand properties&#xff09; 是可以一次性设置多个属性值的样式属性。例如&#xff0c; font 就是一个简…

考前刷题练手感(北航期末往年数据结构编程题)

本次因为是考前一天极速刷题&#xff0c;所以没有讲解&#xff0c;若有问题可私信。 目录 一、 查找同时空人员二、 老鼠回家-无回路三、函数调⽤关系四、东二食堂模拟五、栈帧 一、 查找同时空人员 【问题描述】 假设一共有6个手机基站&#xff0c;都具有记录手机连接基站状…

【MMSegmentation 环境配置】

MMSegmentation 环境配置 1. 创建python 环境2. 安装pytorch3. 安装MMCV4. 安装 MMSegmentation.5. 测试是否安装成功 1. 创建python 环境 conda create --name openmmlab python3.8 -y conda activate openmmlab2. 安装pytorch On GPU platforms: conda install pytorch tor…

C语言第17篇:预处理详解

1、预定义符号 C语言设置了一些预定义符号&#xff0c;可以直接使用。预定义符号也是在预处理期间处理的。 __FILE__ //进行编译的源文件 __LINE__ //文件当前的行号 __DATE__ //文件被编译的日期 __TIME__ //文件被编译的时间 __STDC__ //如果编译器遵循ANSI…

国产化操作系统杂谈

目录 操作系统国产化背景国产化操作系统名录优秀操作系统介绍1.深度Linux&#xff08;deepin&#xff09;2.FydeOS3.AliOS&#xff08;openAliOS&#xff09;4.openEuler5.红旗Linux6. startOS 总结 操作系统国产化背景 官方的说法是为了打破长期以来国外对中国的操作系统的垄…

高级算法入门必看—21个NPC问题及其证明

文章目录 前言一、布尔可满足性问题二、每子句至多3个变量的布尔可满足性问题&#xff08;3-SAT&#xff09;三、0-1整数规划&#xff08;0-1 integer programming&#xff09;四、Set packing&#xff08;Set packing&#xff09;五、最小顶点覆盖问题&#xff08;Vertex cove…