Docker快速入门

Docker是一个用来快速构建、运行和管理应用的工具。

Docker的出现主要就是为了解决"在我的机器上是正常的,为什么到你的机器上就不正常了"的问题,Docker已经成为高可用服务集群、持续交付、持续集成以及云原生的关键技术!

Docker四部分:

远程镜像仓库、本地镜像、本地仓库、Docker软件

  • 远程镜像仓库是云端的镜像仓库默认是Docker Hub,供用户上传、下载需要的镜像。
  • 本地镜像是下载好的镜像镜像是只读的,不能对其修改,镜像是容器的模版,镜像可以理解为电脑安装操作系统的光盘,Linux镜像可以在Linux、Windows中的Docker中使用,Windows镜像只能在Windows的Docker中使用。Docker镜像名称是由两部分组成的,镜像名:tag版本,tag版本可以忽略,默认会选择latest,也就是最新的镜像版本,
  • 本地容器,容器是真正运行的实例, 容器是 根据 / 基于镜像创建的(根据镜像来创建容器),修改容器文件不会影响镜像,容器被创建后,即可跟Linux系统一样独立使用,容器可以隔离网络、文件、进程等环境。
  • Docker软件是连接以上三个部分的基座,也是运行容器的引擎,Docker是可以跨平台安装的!

Docker容器跟虚拟机技术是不同的,Docker容器是基于系统内核的相关容器技术,不需要独立分配物理资源,不需要启动完整的操作系统,所以Docker容器启动速度更快、更轻量,但是多个容器是共用宿主机的内存、CPU等物理资源的,多容器可能会出现互相抢占物理资源的情况。

创建Docker容器的两种方式:
  1. 通过命令直接创建
  2. 通过dockerfile创建

两者都是基于Docker镜像创建的,但两者的区别是通过命令直接创建需要完整的镜像,dockerfile则可以使用不完整的镜像,dockerfile虽然更灵活一些,但是容器创建的时间更长、稳定性也不佳,特别是需要下载文件但网络不好的情况,我们更偏向使用命令直接创建容器。

Docker技术能够避免对服务器环境的依赖,减少复杂的部署流程,有了Docker以后,可以实现一键部署,项目的部署如丝般顺滑,大大减少了运维工作量。

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

学习目标:

  • 能利用Docker部署常见软件
  • 能利用Docker打包并部署Java应用
  • 理解Docker数据卷的基本作用
  • 能看懂DockerCompose文件

1. 快速入门

要想让Dockert帮我们安装和部署软件,首先要保证你的机器上有Docker,我们可以在CentOS的虚拟机中安装Docker。

Docker安装的官方文档:

Install Docker Engine on CentOS | Docker DocsLearn how to install Docker Engine on CentOS. These instructions cover the different installation methods, how to uninstall, and next steps.https://docs.docker.com/engine/install/centos/首先使用SSH客户端连接到我们的Linux虚拟机:

1.1 卸载旧版

首先如果系统中已经存在旧的Docker,则先卸载:

bash 复制代码
yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

1.2 配置Docker的yum库

首先要安装一个yum工具

bash 复制代码
yum install -y yum-utils

安装成功后,执行命令,配置Docker的yum源:

bash 复制代码
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

1.3 安装Docker

  • 最后,执行命令,安装Docker
bash 复制代码
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

验证Docker是否安装成功,输入:docker -v,查看Docker的安装版本

docker image命令:用于列出本地系统中存在的Docker镜像!

  • 在Docker中,镜像是用于运行Docker容器的构建块,镜像是Docker容器的基础,即容器运行时所需要使用的文件系统。

Docker也是一个服务,需要启动起来!

1.4 启动和校验

bash 复制代码
# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

输入systemctl enable docker命令,让Docker开启自启:

输入systemctl start docker,启动Docker:

1.5 配置镜像加速

这里以阿里云镜像加速为例

5.1 首先访问阿里云网站,注册一个阿里云账号:

阿里云-计算,为了无法计算的价值阿里云------阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司之一。提供免费试用、云服务器、云数据库、云安全、云企业应用等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。免费备案,7x24小时售后支持,助企业无忧上云。https://www.aliyun.com/

5.2 开通镜像服务
  1. 在首页的产品中,找到阿里云的容器镜像服务:
5.3 点击管理控制台
5.4 找到镜像工具下的镜像加速器
具体命令如下:
bash 复制代码
# 创建目录
mkdir -p /etc/docker

# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF

# 重新加载配置
systemctl daemon-reload

# 重启Docker
systemctl restart docker

2. 部署MySQL

  • Docker部署 VS 传统的Linux部署
回忆,利用传统方式部署MySQL,大概的步骤有:
  • 搜索并下载MySQL安装包
  • 上传至Linux环境
  • 编译和配置环境
  • 安装

步骤一:先检测系统是否自带安装mysql:yum list installed | grep mysql

步骤二:删除系统自带的MySQL及其依赖(防止后面安装发生冲突)

  • yum -y remove mysql-libs.x86_64

而我们利用Docker来安装一个MySQL软件,仅仅需要一步即可:

首先需要先停掉虚拟机中的MySQL,确保你的虚拟机已经安装Docker,且网络开通的情况下,执行下面的命令即可安装Docker:

  • \ 表示换行的意思!
bash 复制代码
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

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

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

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

要知道,不同操作系统下的安装包、运行环境都是不相同的,如果是手动安装,必须手动解决安装包不同、环境不同、配置不同的问题。

镜像和容器

  • 当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image),镜像不仅包含应用本身,还包含应用运行时所需要的环境、配置、系统函数库,Docker会在运行镜像时创建一个隔离(的)环境,称为容器(Container)。
  • Docker的镜像能够做到跨平台,忽略不同的操作系统之间的差异!

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

说明:

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

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

镜像仓库

Docker会根据命令中的镜像名称自动搜索并下载镜像image,那么问题来了,它是去哪里搜索和下载镜像的呢?这些镜像又是谁制作的呢?

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

https://hub.docker.com/https://hub.docker.com/基本上我们常用的各种软件都能在这个网站上找到,我们甚至可以自己制作镜像上传上去。

像这种提供存储、管理Docker镜像的服务器,被称为DockerRegistry,可以翻译为镜像仓库。

  • **镜像仓库:**存储和管理镜像的平台,Docker官方维护了一个公共的镜像仓库:Docker Hub。

DockerHub网站是官方仓库,阿里云、华为云会提供一些第三方仓库,我们也可以自己搭建私有的镜像仓库。

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

总之,镜像的来源有两种:
  • 基于官方基础镜像自己制作
  • 直接去DockerRegistry下载
总结:
  • Docker本身包含一个后台服务,我们可以利用Docker命令告诉Docker服务,帮助我们快速部署指定的应用。
  • Docker服务部署应用时,首先要去搜索并下载应用对应的镜像,然后根据镜像创建并运行容器,应用就部署完成了。
Docker是做什么的?
  • Docker可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用。
什么是镜像?
  • 将应用所需的函数库、依赖、配置等与应用一起打包得到的就是镜像。
什么是容器?
  • 为每个镜像的应用进程创建的隔离运行环境就是容器。
什么是镜像仓库?
存储和管理镜像的服务就是镜像仓库。
  • DockerHub是目前最大的镜像仓库,其中包含各种常见的应用镜像。

3. 命令解读

利用Docker快速的安装了MySQL,非常的方便,不过我们执行的命令到底是什么意思呢?

  • 所有的Docker命令都是以Docker为前缀!
解读:

docker run -d:创建并运行一个容器(容器是一个隔离环境),-d则是让容器以后台进程运行

--name mysql:-name给容器命名,给容器起个名字叫mysql,方便我们去区分不同的容器,名字必须唯一,当然也可以叫别的

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

  • 容器是隔离环境,外界不可访问(容器它也有自己的IP地址),但是可以将宿主机(容器所在的机器称为宿主机)端口映射到容器内的端口当访问宿主机指定端口时,就是在访问容器内的端口了。
  • 容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内的端口一定是3306而宿主机端口则可以任意指定,一般与容器内保持一致。
  • 格式:-p 宿主机端口:容器内端口,示例中就是将宿主机的3306端口映射到容器内的3306端口
  • MySQL客户端直连容器的端口会被拒绝访问!

docker inspect 容器名称:该命令将返回JSON格式的容器的详细信息,例如容器的ID、名称、状态、IP地址等。

​​​-e TZ=Asia/Shanghai

-e MYSQL_ROOT_PASSWORD=123

  • 格式:-e KEY=VALUE,是设置环境变量,配置容器内进程运行时的一些参数KEY和VALUE都由容器内进程决定
  • 案例中,TZ=Asia/Shanghai是设置时区;MYSQL_ROOT_PASSWORD=123是设置MySQL默认密码

mysql:设置镜像名称 或 指定运行的镜像名称,Docker会根据这个名字搜索并下载镜像

  • 镜像的名称不是随意的,而是要到DockerRegistry中寻找镜像运行时的配置也不是随意的,要参考镜像的帮助文档,这些在DockerHub网站或者软件的官方网站中都能找到。
  • 镜像名称结构的格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是镜像的版本号
  • 在未指定TAG版本号的情况下,默认是latest,代表最新版本的镜像,也就是mysql:latest

docker ps是一个Docker命令,用于列出正在运行的Docker容器的信息:

  • CONTAINER ID(容器ID):每个容器都有唯一的ID。
  • IMAGE(镜像):容器所使用的镜像
  • COMMAND(命令):容器启动时执行的命令
  • CREATED(创建时间):容器的创建时间
  • STATUS(状态):容器的运行状态
  • PORTS(端口映射):容器内部服务与宿主机之间的端口映射关系

如果需要显示所有容器(包括已经停止的容器),可以使用docker ps -a命令!

  • Nginx容器的默认端口是80端口!
相关推荐
TO_ZRG17 分钟前
使用jenkins打包unity工程
运维·unity·jenkins
liujiangxu23 分钟前
jenkins声明式流水线语法详解
运维·自动化·jenkins
攸攸太上37 分钟前
Docker学习
java·网络·学习·docker·容器
Sylvan Ding44 分钟前
Docker+PyCharm远程调试&环境隔离解决方案
docker·容器·pycharm
guoguoqiang.1 小时前
我与Linux的爱恋:命令行参数|环境变量
linux·运维·服务器·c语言·学习
客观花絮说2 小时前
DSC+DW实时+异步搭建部署
运维
x66ccff2 小时前
【linux】4张卡,坏了1张,怎么办?
linux·运维·服务器
_道隐_4 小时前
如何在Windows上安装Docker
windows·docker
我命由我123454 小时前
GPIO 理解(基本功能、模拟案例)
linux·运维·服务器·c语言·c++·嵌入式硬件·c#
kka杰4 小时前
Linux 进程3
linux·运维·服务器