docker从入门到入土

docker到底是什么?

  • docker是世界领先的软件容器平台,基于GO语言进行开发实现
  • docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放开发人员
  • 用户可以方便地创建和使用容器,把自己的应用放入容器,容器还可以进行版本管理,复制,分享,修改,就像管理普通的代码一样
  • docker可以对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器

为什么要使用docker

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

容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销低

传统的开发流程中,我们的项目通常需要使用Mysql,Redis等环境,这些环境都是需要我们手动去进行下载并配置的,安装配置流程极其复杂,而且不同操作下的操作也不一样。

docker的出现完美地解决了这一问题,我们可以在容器中安装mysql。redis等软件环境,使得应用和环境架构分开,它的优势在于:

  1. 一致的运行环境,能够更轻松地迁移
  2. 对进程进行封装隔离,容器与容器之间互不影响,更高效地利用系统资源
  3. 可以通过镜像复制多个一致的容器
  4. 更快速的启动时间
  5. 一致的运行环境
  6. 持续交付和部署

linux中安装docker centos7 为例

curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun

安装完成后直接启动服务:

systemctl start docker

推荐设置开机自启,执行指令 :

systemtl enable docker

Docker中的几个概念

镜像

镜像就是一个只读模版,镜像可以用来创建docker容器,一个镜像可以创建多个容器

容器

容器是用镜像创建的运行实例,Docker利用容器独立运行一个或一组应用。它可以被启动,开始,停止,删除,每个容器都是相互隔离的,保证安全的平台。可以把容器看作是一个简易的linux环境和运行在其中的应用程序,容器的定义和镜像几乎一模一样。也是一堆层的统一视角。唯一区别在于容器的最上面那一层是可读可写的

仓库

仓库是集中存放镜像文件的场所。仓库和仓库注册服务器是有去别的,仓库注册服务器上往往放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签。仓库分为公开仓库和私有仓库两种,最大的公开仓库是DockerHub,存放了数量庞大的镜像供用户下载,国内的公开仓库有阿里云,网易云等

总结

一个镜像代表一个软件;而基于某个镜像运行就是生成一个程序实例,这个程序实例就是容器;而仓库是用来存储Docker中所有镜像的

其中仓库又分为远程仓库和本地仓库,第一次访问依赖时,将其下载到本地仓库,第二次,第三次使用时直接用本地仓库的依赖即可

Docker初体验

可以去访问DockerHubhttps://hub.docker.com/open in new window

搜索想要下载的镜像,找到下载的指令

例如mysql的指令:

docker pull MySQL

该指令会下载MySQL镜像的最新版本

docker镜像指令

查看docker中当前拥有哪些镜像:

docker images

查询指定镜像名:

docker images MySQL 

-q表示仅显示镜像的id:

docker images -q

下载镜像使用:

docker pull MySQL:5.7

未指定则下载最新的

删除镜像使用指令 :

docker images rm MySQL 

还可以通过指定镜像id进行删除。

在删除之前应该先让容器停止

也可以进行强制执行删除

docker iamges rm -f id 

该指令会将镜像和通过该镜像执行的容器全部删除,谨慎使用

docker容器指令

容器是基于镜像的

若需要通过镜像运行一个容器,则使用:

docker run tomcat:8.0-jre8

如果没有这个镜像

所有就先去下载一个镜像

docker pull tomcat:8.0-jre8

下载完成之后就可以运行了,运行后查看一下当前运行的容器:docker ps

通过该方式运行的tomcat是不能直接被外部访问的,因为容器具有隔离性,若是想直接通过8080端口访问容器内部的tomcat,则需要对宿主机端口与容器内的端口进行映射:

docker run -p 8080:8080 tomcat:8.0-jre8

解释一下这两个端口的作用(8080:8080),第一个8080为宿主机端口,第二个8080为容器内的端口,外部访问8080端口就会通过映射访问容器内的8080端口。

此时外部就可以访问Tomcat了:

若是这样进行映射:

docker run -p 8088:8080 tomcat:8.0-jre8

则外部需访问8088端口才能访问tomcat,需要注意的是,每次运行的容器都是相互独立的,所以同时运行多个tomcat容器并不会产生端口的冲突。

容器还能够以后台的方式运行,这样就不会占用终端:

docker run -d -p 8080:8080 tomcat:8.0-jre8

启动容器时默认会给容器一个名称,但这个名称其实是可以设置的,使用指令:

docker run -d -p 8080:8080 --name tomcat01 tomcat:8.0-jre8

此时的容器名称即为tomcat01,容器名称必须是唯一的

该参数会将运行和非运行的容器全部列举出来:

docker ps -a

接下来是容器的开始,停止,重启指令,因为非常简单,

docker start xxx
docker restart xxx
docker stop xxx
docker kill xxx
docker rm xxx
docker rm -f xxx

查看容器的日志

docker logs xxx

查看实时的日志

docker logs -f xxx

通过-t参数还能够显示日志的时间戳,通常与-f参数联合使用

docker logs -ft xxx

查看容器内运行了哪些进程可以使用指令:

docker top xxx

若想与容器进行交互,则使用指令:

docker exec -it xxx bash

此时终端将会进入容器内部,执行的指令都将在容器中生效

若退出则使用exit

下面将介绍如何在容器中部署一个项目

docker cp ./test.html xxx:/usr/local/tomcat/webapps

通过docker cp 指令能够将文件从Centos复制到容器中,./test.html为centos中的资源路径,xxx为容器id,/usr/local/tomcat/webapps 为容器的资源路径,此时test.html文件将会被复制到该路径下

docker exec -it xxx bash
cd webapps
ls

若是想见容器内的文件复制到centos中,则反过来写即可

docker cp xxx:usr/local/tomcat/webapps/test.html./

所以现在若是想要部署项目,则先将项目上传到centos,然后将项目从centos复制到容器内,此时启动容器即可

看似使用docker中启动软件环境非常简单,但是同时也面临着一个问题,我们无法知晓容器内部具体细节,比如监听的端口,绑定的ip地址等

我们可以使用

docker inspect xxx

docker数据卷

学习了容器的相关指令之后,我们来学习一下docker中的数据卷,它能够实现宿主机与容器之间的文件共享,它的好处在于我们对宿主机的文件进行修改将直接影响容器,而无需再将宿主机的文件再复制到容器中

若是想将宿主机中/opt/apps目录与容器中webapps目录做一个数据卷,则应该这样编写指令:

docker run -d -p 8080:8080 --name tomcat01 -v /opt/apps:/usr/local/tomcat/webapps tomcat:8.0-jre8

若此时发现无法访问,这就说明我们的设置成功了。docker会将容器内的webapps目录与/opt/apps目录进行同步,而此时/opt/apps目录是空的,导致webapps目录也会变成空目录,所以无法访问

此时我们只需要向/opt/apps目录下添加文件,就会使得webapps目录也会拥有相同的文件,达到文件共享。

这种方式设置的数据卷称为自定义数据卷,因为数据卷的目录是我们自己设置的

docker还为我们提供了另一种设置数据卷的方式 :

docker run -d -p 8080:8080 --name tomcat01 -v aa:/usr/local/tomcat/webapps tomcat:8.0-jre8

此时的aa并不是数据卷的目录而是数据卷的别名,docker会自动为我们创建一个名为aa的数据卷,并且会将容器内webapps目录下所有的内容复制到数据卷中,该数据卷的位置在/var/lib/docker/volumes目录下:

此时我们只需要修改该目录的内用就能够影响到容器

最后再介绍几个容器和镜像相关的指令:

docker commit -m '描述信息' -a '镜像作者' tomcat01 my_tomcat:1.0

该指令能够将容器打包成一个镜像,此时查询docker中的镜像将会看到自己的镜像

若想将镜像备份出来,则可以使用指令:

docker save my_tomcat:1.0 -0 my-tomact-1.0.tar

拥有.tar格式的镜像,如何加载到docker中呢?

docker load -i my-tomcat-1.0.tar

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

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

相关文章

基于Robei EDA--实现串口通信

一、串口简介 串口作为常用的三大低速总线(UART、SPI、IIC)之一,在设计众多通信接口和调试时占有重要地位。但UART和SPI、IIC不同的是,它是异步通信接口,异步通信中的接收方并不知道数据什么时候会到达,所…

int VS Integer

在Java中,int 是一种基本数据类型(primitive type),而 Integer 是 int 的包装类(wrapper class)。它们之间的主要区别在于以下几点: 数据类型:int 是基本的整数类型,它在…

Linux gzip命令教程:如何有效地压缩和解压文件(附实例详解和注意事项)

Linux gzip命令介绍 gzip(GNU zip)是一种在Linux系统中常见的命令行压缩工具。它使用DEFLATE压缩算法来减小文件的大小,使文件更易于存储和传输。gzip主要用于压缩文本文件、Tar归档文件和网页。不建议使用gzip来压缩图像、音频、PDF文档和其…

【P1506 拯救oibh总部】

拯救oibh总部 题目背景 oibh 总部突然被水淹没了!现在需要你的救援…… 题目描述 oibh 被突来的洪水淹没了,还好 oibh 总部有在某些重要的地方起一些围墙。用 * 号表示,而一个四面被围墙围住的区域洪水是进不去的。 oibh 总部内部也有许…

【后端高频面试题--SpringBoot篇】

🚀 作者 :“码上有前” 🚀 文章简介 :后端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 这里写目录标题 1.什么是SpringBoot?它的主要特点是什么?2.列举一些Spri…

《CSS 简易速速上手小册》第4章:视觉美学(2024 最新版)

文章目录 4.1 颜色理论在 CSS 设计中的应用:网页的调色盘4.1.1 基础知识4.1.2 重点案例:创建一个具有情感设计的登录页面4.1.3 拓展案例 1:使用颜色增强信息的可视化表示4.1.4 拓展案例 2:利用颜色创建网站的品牌身份 4.2 字体与文…

JS逆向手记01__前端基础

系列文章目录 系列手记占位 文章目录 系列文章目录前言一、js自执行函数语法二、js变量类型的转换(与字符串相加)三、浏览器环境(BOM)四、html渲染环境(DOM)五、html发起请求(表单form&#xf…

书生·浦语大模型第四课作业

基础作业: 构建数据集,使用 XTuner 微调 InternLM-Chat-7B 模型, 让模型学习到它是你的智能小助手,效果如下图所示,本作业训练出来的模型的输出需要将不要葱姜蒜大佬替换成自己名字或昵称! 1.安装 # 如果你是在 Int…

Java是如何实现的平台无关?

🎬作者简介:大家好,我是小徐🥇☁️博客首页:CSDN主页小徐的博客🌄每日一句:好学而不勤非真好学者 📜 欢迎大家关注! ❤️ 1、什么是平台无关性 平台无关性就是一种语言在…

寒假作业

手写盗版微信登入界面 #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);this->resize(421,575);this->setFixedSize(421,575);th…

C#系列-C#EF框架实现雪花主键(20)

在C#中,使用Entity Framework (EF) 框架并不直接涉及到主键的生成策略。主键的生成通常是在数据库层面或者在应用程序层面处理的。雪花主键(Snowflake ID)是一种在分布式系统中生成唯一ID的算法,它通常是由Twitter的雪花算法演变而…

接口测试框架分析

框架大体上已经写完了,不过说实话好多代码让我自己写我也写不出来,那该怎么办呢?很简单,把现在已经写好的代码保存起来,等用的时候拿出来复制粘贴就好了,如果你是大神,自己会写,那就…

TikTok:短视频时代的崛起

导言: TikTok,作为一款全球短视频社交应用,正风靡全球,引领着数字娱乐的新潮流。其简洁的用户界面、创意无限的短视频内容,以及强大的社交互动功能,使其成为全球数以亿计的用户喜爱的平台。 TikTok的特点&a…

H5 红色文字抖动网址发布页/引导页源码

H5 红色文字抖动网址发布页/引导页源码 源码介绍:一款红色文字抖动网页源码,可用于引导页或网址发布页。 下载地址: https://www.changyouzuhao.cn/10470.html

第9讲用户信息修改实现

用户信息修改实现 后端修改用户昵称: /*** 更新用户昵称* param wxUserInfo* param token* return*/ RequestMapping("/updateNickName") public R updateNickName(RequestBody WxUserInfo wxUserInfo,RequestHeader String token){if(StringUtil.isNot…

在JavaScript或TypeScript中,@符号的用法

在JavaScript或TypeScript中,符号在导入语句中用作包名的一部分,表示该包是一个命名空间包(Namespace package)或作用域包(Scoped package)。这种命名方式主要用于组织和管理由同一组织或个人发布的相关包。…

MySQL篇----第二十二篇

系列文章目录 文章目录 系列文章目录前言一、什么是表级锁二、什么是页级锁三、什么是行级锁四、什么是悲观锁前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、…

selenium 驱动 Edge浏览器,解决selenium打开Edge浏览器闪退问题

一、Edge浏览器驱动下载 1、在设置中查看浏览器的版本号 2、在官网中进行对应下载 Microsoft Edge WebDriver - Microsoft Edge Developer 二、环境变量配置 1、打开设置界面 右击【此电脑】---选择【属性】----选择【高级系统设置】-----点击【环境变量】 2、变量设置 在…

SpringCloud-项目引入Nacos

一、安装Nacos服务 首先,我们需要从 Nacos 的官方网站下载发布版本。下载地址:Releases alibaba/nacos GitHub 选择合适的版本并下载,解压缩得到 Nacos 的安装包。 在解压后的 Nacos 目录中,找到 bin 文件夹。 用写字板编辑…

Git 为 ssh 协议设置代理

前言 我们为终端设置clash代理的时候,一般都是设置的http/https或者socks.但是我们用github的时候一般是用密钥也就是ssh链接. 教程 在~/.ssh/config文件中加入以下的代码. Host github.comHostname ssh.github.comPort 443User gitProxyCommand nc -v -x 172.28.208.1:789…