Docker入门

54 阅读5分钟

为什么要学习Docker

没有使用Docker情况:

开发人员开发好项目后,打成war包交给运维人员,运维人员需要在服务器上搭建好环境,并把war包部署到服务器上保证可以运行。

当开发环境与部署环境不一致时(比如版本),就会导致无法在服务器环境上运行。

为了让程序在部署环境下也可以顺利运行,开发人员除了交付应用代码,还需要准备完整的部署文件。即使这样,服务器上仍然经常发生部署失败的情况。

Docker的作用

简单来说,就是把业务代码和部署环境打包在一起,这种业务代码和部署环境打包在一起的东西被称为"镜像"。有了这个镜像,就相当于运维人员同时拿到了业务代码和部署环境,这样运维人员就不需要自己下载任何环境包了(甚至运维人员都可以不要了,DevOps(自动化运维)应运而生)。

也就是说,docker保证了开发环境和部署环境的绝对一致,只要开发人员保证开发时应用可以正常运行,把项目交给运维人员后,在部署环境下一定可以运行。

Docker介绍

docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。(摘自百度百科)

Docker的两句口号:

第一句:Build, Ship and Run 意思是搭建、发送、运行

第二句:Build once,Run anywhere 搭建一次,到处运行

Docker安装

安装前保证配置了阿里的yum源,这样安装的速度会快。

在CentOS 7下安装Docker

如果想卸载之前安装过的Docker

yum remove docker \ 
docker-client \ 
docker-client-latest \ 
docker-common \
docker-latest \
docker-latest-logrotate \ 
docker-selinux \ 
docker-engine-selinux \
docker-engine

yum自带的仓库中没有Docker,要安装Docker需要先安装前置依赖

yum install -y yum-utils device-mapper-persistent-data lw2

安装依赖成功:

屏幕截图_20230201_162432.png

使用以下的命令来搭建稳定的仓库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

正式安装docker

yum -y install docker-ce

安装完成,整个安装过程花费了大概10分钟。

image.png

启动docker

systemctl start docker

检测docker版本

docker -v

Docker设计原理

image.png

registry代表docker的中央仓库,里面放了很多软件的镜像,镜像中是打包好的代码和环境。

Docker_Host代表你的主机,之前装redis时需要自己yum安装,还要手动make编译。

使用了docker安装之后,只需要使用docker命令:"docker pull 镜像名称",它就会从中央仓库把镜像拉到本地,使用"docker run 镜像名称"运行镜像得到一个容器,就可以启动redis,整个过程中没有安装、编译的过程。

这和maven很相似,我们可以为Maven配置镜像仓库来提高依赖的下载速度,同样,我们也可以为docker配置镜像仓库,以提高镜像的下载速度。

Docker镜像加速器配置

Docker Hub服务部署在国外,从下载镜像的速度很慢,为了提高下载速度,需要配置国内的镜像加速器。

国内的镜像加速器有很多,比如有:科大、网易、阿里云、七牛云。我们使用阿里云的镜像加速器。

首先注册一个阿里云账户,并登录

https://www.aliyun.com/product/acr?spm=5176.12825654.h2v3icoap.26.1dbb2c4akHLmKD&aly_as=6Y2Nt_Ty

点击管理控制台 ==> 镜像工具 ==> 镜像加速器 ==> CentOS

image.png

复制配置镜像加速器中的代码,粘贴到FinalShell命令行,回车运行。

配置好镜像加速器之后,可以验证一下

docker info

看到这个网址和上图的加速器地址一样就说明配置好了

image.png

Docker Hello World

我们先查看一下docker中有没有镜像

docker images

image.png

可以看到没有任何镜像。

开始使用Docker拉取测试镜像hello world

docker pull hello-world

完成之后再查看,发现有一个hello-world镜像,这个镜像中有代码以及运行该代码所需要的环境

image.png

运行hello-world镜像

docker run hello-world

image.png

出现上面这些输出内容,就说明hello-world运行成功。

删除镜像

测试完成可以删除这个镜像,删除镜像之前需要先删除镜像中的容器。

镜像和容器的关系就像类和对象,一个类可以创建多个对象,一个镜像也可以跑出多个容器。

查看所有容器

docker ps -a

image.png

通过容器id删除容器

docker rm c79da81aebe4 

通过镜像id删除镜像

docker rmi  feb5d9fea6a5

删除完成后,再次查看发现已经没有镜像了。 image.png

上面的例子是先下载镜像,再运行镜像。其实还可以直接运行镜像:

image.png

docker run命令查找镜像的流程

image.png

如果docker的hello-world例子是由java写的,那么该hello-world镜像中,则会包含:应用程序、JVM、精简版的操作系统。

如下图所示:

image.png

docker技术中的三大核心概念

1. 镜像,就是一个只读的模板

2. 容器,是用镜像创建的运行实例,一个镜像能跑多个容器。容器本质上是一个操作系统。

3. 仓库,是集中存放镜像文件的仓库

其中仓库分为公开仓库和私有仓库两种形式,最大的公开仓库是Docker Hub,其中存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云、网易云等。