Docker 基础与实战指南(1)

米饭9个月前行业资讯526

Docker 可以使项目的部署变得简单,大大减少了运维工作量。


即便你对 Linux 不熟悉,你也能轻松部署各种常见软件、Java项目。


linux 上安装 docker 这里就不进行讲解,我使用的 linux 是 ubuntu。如果一样的友友,可以参考下面这个视频,进行安装,或者自己网上找资料,只要能装上就行。


Ubuntu安装docker并运行测试【docker默认最新,虚拟机版本22.04】_哔哩哔哩_bilibili


一、Docker 快速入门

1.1 部署 MYSQL

首先,我们利用 Docker 来安装一个 MySQL 软件,大家可以对比一下之前传统的安装方式,看看哪个效率更高一些。


如果是利用传统方式部署 MySQL,大概的步骤有:


搜索并下载MySQL安装包

上传至Linux环境

编译和配置环境

安装

而使用 Docker 安装,仅仅需要一步即可,在命令行输入下面的命令(建议采用 CV 大法):

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

运行效果如图:(大家安装的时候,在红色的地方可能会卡住,请耐心等待)

image-20241111100516843 MySQL 安装完毕!通过任意客户端工具即可连接到 MySQL,大家可以使用自己的 Mysql 客户端工具,进行连接,如果连接上,说明 mysql 就安装成功了。(注意:这里安装的 Mysql 的密码为:123,上面安装时指定的)。

image-20241111101125673

大家可以发现,当我们执行命令后,Docker 做的第一件事情,是去自动搜索并下载了 MySQL,然后会自动运行 MySQL,我们完全不用插手,是不是非常方便。


而且,这种安装方式你完全不用考虑运行的操作系统环境,它不仅仅在 Ubuntu 系统是这样,在 CentOS 系统、macOS 系统、甚至是装了 WSL 的 Windows 下,都可以使用这条命令来安装 MySQL。


要知道,不同操作系统下其安装包、运行环境是都不相同的!如果是手动安装,必须手动解决安装包不同、环境不同的、配置不同的问题!(已经头大了)


而使用 Docker,这些完全不用考虑。就是因为 Docker 会自动搜索并下载 MySQL。注意:这里下载的不是安装包,而是镜像。镜像中不仅包含了 MySQL 本身,还包含了其运行所需要的环境、配置、系统级函数库。因此它在运行时就有自己独立的环境,就可以跨系统运行,也不需要手动再次配置环境了。这套独立运行的隔离环境我们称为容器。


说明:


镜像:英文是image

容器:英文是container

因此,Docker安装软件的过程,就是自动搜索下载镜像,然后创建并运行容器的过程。


Docker 官方提供了一个专门管理、存储镜像的网站,并对外开放了镜像上传、下载的权利。Docker 官方提供了一些基础镜像,然后各大软件公司又在基础镜像基础上,制作了自家软件的镜像,全部都存放在这个网站。这个网站就成了 Docker 镜像交流的社区:


hub.docker.com


这个网站是在海外,访问起来会比较慢。


像这种提供存储、管理 Docker 镜像的服务器,被称为 DockerRegistry,可以翻译为镜像仓库。DockerHub 网站是官方仓库,阿里云、华为云会提供一些第三方仓库,我们也可以自己搭建私有的镜像仓库。


官方仓库在国外,下载速度较慢,一般我们都会使用第三方仓库提供的镜像加速功能,提高下载速度。而企业内部的机密项目,往往会采用私有镜像仓库。


总结:


Docker 本身包含一个后台服务,我们可以利用 Docker 命令告诉 Docker 服务,帮助我们快速部署指定的应用。Docker 服务部署应用时,首先要去搜索并下载应用对应的镜像,然后根据镜像创建并允许容器,应用就部署完成了。


用一幅图标示如下:

image-20241111103123719

1.2 命令解读:

利用 Docker 快速的安装了 MySQL,非常的方便,下面我们来学习一下上面安装 Mysql 执行的指令。

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

解读:


最后面的 \ 是换行,我们可以将上面这些指令放在一行内执行。


docker run -d :创建并运行一个容器,-d则是让容器以后台进程运行。


--name mysql : 给容器起个名字叫mysql,可以叫别的。


-p 3306:3306 : 设置端口映射。


容器是隔离环境,外界不可访问。但是可以将宿主机端口映射到容器内的端口,当访问宿主机指定端口时,就是在访问容器内的端口了。

容器内端口往往是由容器内的进程决定,例如 MySQL 进程默认端口是 3306,因此容器内端口一定是 3306;而宿主机端口则可以任意指定,一般与容器内保持一致。

格式: -p 宿主机端口:容器内端口,示例中就是将宿主机的 3306 映射到容器内的 3306 端口。

-e TZ=Asia/Shanghai : 配置容器内进程运行时的一些参数。


格式:-e KEY=VALUE,KEY 和 VALUE 都由容器内进程决定。

案例中,TZ=Asia/Shanghai是设置时区;MYSQL_ROOT_PASSWORD=123是设置 MySQL 默认密码。

mysql : 设置镜像名称,Docker 会根据这个名字搜索并下载镜像。


格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是版本号。

在未指定TAG的情况下,默认是最新版本,也就是mysql:latest。

镜像的名称不是随意的,而是要到 DockerRegistry 中寻找,镜像运行时的配置也不是随意的,要参考镜像的帮助文档,这些在DockerHub 网站或者软件的官方网站中都能找到。


如果我们要安装其它软件,也可以到 DockerRegistry 中寻找对应的镜像名称和版本,阅读相关配置即可。


本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!  

云掣基于多年在运维领域的丰富时间经验,编写了《云运维服务白皮书》,欢迎大家互相交流学习:

《云运维服务白皮书》下载地址:https://fs80.cn/v2kbbq

想了解更多大数据运维托管服务、数据库运维托管服务、应用系统运维托管服务的的客户,欢迎点击云掣官网沟通咨询:https://yunche.pro/?t=shequ


相关文章

大数据存储方案

大数据存储方案

1 结构布局目前大数据存储有两种方案可供选择:行存储和列存储。业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全、可靠、完整性。从目前发展情况看,关系数据库已经不适应这种...

浅谈linux性能调优之六:IO调度算法的选择

浅谈linux性能调优之六:IO调度算法的选择

一) I/O调度程序的总结     1) 当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成.    2) 每个块设备都有它自...

一个初级运维工程师对于运维工作的一些浅显认知

一个初级运维工程师对于运维工作的一些浅显认知

最近因为部门架构调整,之前工作做了交接,新的安排又没有确定,领导建议学习下JAVA开发,后续直接参与到研发工作中而不再负责运维工作。周围同事也都在说运维工作比较low,转研发会好一些。但是毕竟从毕业之...

RabbitMQ 进阶1(发送者和MQ的可靠性)

RabbitMQ 进阶1(发送者和MQ的可靠性)

我们可以通过 MQ 异步调用,来使程序的性能更好和解耦合。但是如果 MQ 的消息没有成功的被对应的程序处理,那么这样不就会造成数据不一致的情况。因此,我们这里必须要尽可能的确保 MQ 消息的可靠性,即...

Linux 部署Java项目-jar包和war包(五)

Linux 部署Java项目-jar包和war包(五)

一、前景(jar包和war包区别)部署之前先说下两种包,java项目部署到服务器一般有用war包的,也有用jar包的,微服务spring-cloud普及后大部分打包都是jar,部署之前先搞清楚自己要打...

Elasticsearch - 原理剖析 倒排索引与读写流程

Elasticsearch - 原理剖析 倒排索引与读写流程

倒排索引Elasticsearch 是一个基于 Lucene 构建的分布式搜索引擎,它能够以非常高的效率执行全文搜索查询。在 Elasticsearch 的核心,倒排索引(Inverted Index...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。