Docker快速入门

要想让Docker帮我们安装和部署软件,肯定要保证你的机器上有Docker. 由于大家的操作系统各不相同,安装方式也不同。为了便于大家学习,我们统一在CentOS的虚拟机中安装Docker,统一学习环境。

注意:使用MacBook的请利用 VMwareFusion来安装虚拟机,并在虚拟机中学习Docker使用。

部署MySQL

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

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

  • 搜索并下载MySQL安装包
  • 上传至Linux环境
  • 编译和配置环境
  • 安装

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

PowerShell 复制代码
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

出现问题:

复制代码
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
See 'docker run --help'.

解决方法:

MobaXterm中编写

Bash 复制代码
vi /etc/docker/daemon.json

修改里面配置文件为如下代码"{https://docker.fxxk.dedyn.io}"

复制代码
{
 "registry-mirrors": ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"]
}

:wq保存修改

执行下面代码:

复制代码
# 重新加载配置
sudo systemctl daemon-reload
# 重启Docker
sudo systemctl restart docker

最后重新执行拉取mysql代码,运行效果如图:

MySQL安装完毕!通过任意客户端工具即可连接到MySQL.

大家可以发现,当我们执行命令后,Docker做的第一件事情,是去自动搜索并下载了MySQL,然后会自动运行MySQL,我们完全不用插手,是不是非常方便。而且,这种安装方式你完全不用考虑运行的操作系统环境,它不仅仅在CentOS系统是这样,在Ubuntu系统、macOS系统、甚至是装了WSL的Windows下,都可以使用这条命令来安装MySQL。要知道,不同操作系统下其安装包、运行环境是都不相同的 !如果是手动安装,必须手动解决安装包不同、环境不同的、配置不同的问题 !而使用Docker,这些完全不用考虑。就是因为Docker会自动搜索并下载MySQL。注意:这里下载的不是安装包,而是镜像。

镜像中不仅包含了软件本身,还包含了其运行所需要的环境、配置、系统级函数库。因此它在运行时就有自己独立的环境,就可以跨系统运行,也不需要手动再次配置环境了。Docker会在运行镜像时创建一个隔离环境,这套独立运行的隔离环境我们称为容器,一个镜像可以启动多次,互不影响。

说明:

  • 镜像:英文是image
  • 容器:英文是container

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

镜像仓库存储和管理镜像的平台,Docker官方维护了一个公共仓库:Docker Hub。然后各大软件公司又在基础镜像基础上,制作了自家软件的镜像,全部都存放在这个网站。基本上我们常用的各种软件都能在这个网站上找到,我们甚至可以自己制作镜像上传上去。

DockerHub网站是官方仓库,阿里云、华为云会提供一些第三方仓库,我们也可以自己搭建私有的镜像仓库。官方仓库在国外,下载速度较慢,一般我们都会使用第三方仓库提供的镜像加速功能,提高下载速度。而企业内部的机密项目,往往会采用私有镜像仓库。

总结一下

命令是由Docker服务执行的,安装完Docker之后,启动Docker就是启动的Docker服务,也就是Docker的守护进程,这个进程会一直等待输入命令。守护进程会根据命令的参数判断运行什么,然后去镜像仓库中寻找相关的镜像。找到镜像之后就会拉取到本地,这个镜像是安装好的应用,可以直接运行。在运行镜像的时候Docker还会给镜像创建一个隔离的环境,也就是容器,多个容器之间是相互隔离的。同一个Mysql想要部署多个应用也是没有问题的,可以多实例部署,形成集群,相互之间是没有干扰的。也可以在一个服务上部署多个不同应用的实例,部署的时候也不需要担心相互干扰的问题。

用一幅图标示如下:

命令解读

PowerShell 复制代码
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

解读:

  • docker run -d :创建并运行一个容器,-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网站或者软件的官方网站中都能找到。

相关推荐
XIAOHEZIcode11 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220701 天前
如何搭建本地yum源(上)
运维
武子康1 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化