DOCKER的应用

本文详细介绍了Docker的基本概念、优势以及工作原理。Docker提供了可移植性和维护性的容器化技术,确保开发、测试和生产环境一致性。内容涵盖Docker的版本、镜像、容器、数据卷的操作,以及Dockerfile的使用。通过实例演示了Docker的安装、镜像创建、容器启动和数据管理。最后,讲解了如何通过Dockerfile构建Sentinel服务的镜像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DOCKER

Docker技术简介

概述
Docker是一个虚拟化平台( 官网https://www.docker.com/),诞生于 2013 年初,基于 Google 公司的 Go 语言进行实现。可以通过虚拟化方式,为应用提供可运行的容器。基于这种方式,可更快地打包、测试以及部署应用程序。

在这张图中的小方块称为集装箱,在集装箱里面可以运行各种的软件

在这里插入图片描述

现阶段,很多应用软件的安装都在向基于docker方式的安装进行实现。例如mysql,那么为什么不直接在操作系统中安装一个mysql,而是用容器呢?因为,安装MySql过程并不简单,要配置安装源,安装依赖包,对mysql进行配置…如果要在多台主机上安装,每台主机都要进行这些繁琐的操作,万一服务器挂了,这一系列操作还要再重来一遍,但有了docker,一个安装配置好的mysql容器,可以直接拿到另一台主机上启动,而不必重新安装mysql。另外,docker还有一重要的用处,就是可以保证开发,测试和生产环境的一致.

上面这段话的大致意思:现在很多程序都是先安装docker,然后在安装程序;

Docker的优点

1.具有可移植性,2.可维护性比较好 3.实现进程与进程的隔离性

版本说明
Docker分成了两个版本:Docker EE (企业版)和Docker CE(社区版本),其中,Docker EE由公司支持,可在经过认证的操作系统和云提供商中使用。Docker CE是免费的Docker产品的新名称,Docker CE包含了完整的Docker平台,非常适合开发人员和运维团队构建容器APP。

Docker参考手册

docker中文免费手册 [Docker — 从入门到实践]
https://vuepress.mirror.docker-practice.com

Docker 应用分析

参考docker 官网(https://docs.docker.com/get-started/overview/),了解其docker运行机制,例如:

在这里插入图片描述

指令package打包的指令
install不仅要打包还要在本地仓库放一份
deploy不仅仅是部署还要达成jar包不仅在本地仓库放一份,还要放入到远程仓库;

请添加图片描述

其他

1):Docker Host是我们的docker宿主机(就是安装了docker的操作系统)
2):Registry是docker拉取镜像的远程仓库,提供大量的镜像供下载,下载完成之后保存在Images中
3):Docker Daemon是docker的服务线程,处理Docker客户端命令。
4):Images 是Docker本地的镜像仓库,可以通过docker images查看镜像文件。

`

以docker pull 命令为例,了解docker执行过程:
以docker pull 命令为例,了解docker执行过程:
1)客户端将指令发送给docker daemon
2)docker daemon 先检查本地images中有没有相关的镜像
3)如果本地没有相关的镜像,则向镜像服务器请求,将远程镜像下载到本地
Docker安装

准备工作
第一步:准备CentOS(用课前资料中的CentOS7964),本次以CentOS7为例进行安装。
第二步:基于vmvare打开CentOS

1):首先下载方框的程序
请添加图片描述

2):然后打开虚拟机(VMware软件)

在这里插入图片描述

3):第三步:克隆CentOS(选择链接克隆-更省空间),命名为CentOS7964-docker
注意⚠️:克隆的时候必须要将虚拟机关机,否则无法克隆;
在这里插入图片描述

第二种克隆方式

请添加图片描述

4):点击下一步

在这里插入图片描述

第二种克隆方式

请添加图片描述

下一步

请添加图片描述

5):点击下一步

在这里插入图片描述

5):点击下一步

在这里插入图片描述

6):点击完成
在这里插入图片描述

7):点击关闭
在这里插入图片描述

如果上面的3-7步操作了,那么下面的8-12步就不用操作了;

8):点击打开虚拟机选中刚才下载的程序,然后进行打开

请添加图片描述

9):然后进行下一步(点击打开)请添加图片描述

10):下一步

请添加图片描述

11):下一步
请添加图片描述

12):下一步
请添加图片描述

13):开启虚拟机系统

第一步:启动虚拟机,默认账号密码为root/root
下一步 如果是centos的用户那么账号centos 密码centos。 root的账户是root 密码是root
请添加图片描述

下一步
请添加图片描述

下一步

请添加图片描述

测试是否有网络
请添加图片描述

或者请添加图片描述

请添加图片描述

使用mobaxterm连接虚拟机
点击new session
请添加图片描述

输入王城之后点击ok
请添加图片描述

输入密码和账号都是root
请添加图片描述

连接成功之后会出线下面的 情况
在这里插入图片描述

使用mobaxterm查看IP地址

请添加图片描述

报错说明

有时还可以点击:以另一个身份登陆
请添加图片描述

指令说明
su :指令 切换用户输入su就会切换到root用户 
su centos:切换到centos用户
centos是不需要输入账号密码
root(管理员账户)是需要输入账号和密码

请添加图片描述

离线安装docker第一步:

下载docker离线包 

网址:https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz
说明,也可以从https://download.docker.com/linux/static/stable/网址下载指定版本

第二步:下载离线安装工具

https://github.com/Jrohy/docker-install/

在这里插入图片描述说明,将下载好的这个工具解压。

第三步:将下载好的资源放在一个目录,例如:

在linux环境下,创建/root/setup/docker目录,然后拷贝下载好的资源到此目录(可通过MobaXterm工具直接上传到linux目录),例如

[root@centos7964 docker]# pwd
/root/setup/docker
[root@centos7964 docker]# ls -l
总用量 68132
-rw-r--r--. 1 root root 69637582 84 13:04 docker-20.10.6.tgz
-rw-r--r--. 1 root root   114793 84 13:04 docker.bash
-rwxr-xr-x. 1 root root     7546 84 13:04 install.sh
[root@centos7964 docker]#
第四步:执行安装操作
# 进入/root/setup/docker 文件夹
cd docker-install

# 为 install.sh添加执行权限
chmod +x install.sh

# 安装
./install.sh -f docker-20.10.6.tgz
第五:安装成功以后,检查安装状态
docker info

在线安装Docker(一般都为在线安装)

第一步:卸载旧版

说明:如果没有安装过docker则可以不执行此步骤

sudo yum remove docker-ce \
                docker-ce-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine

第二步:安装一组工具

sudo yum install -y yum-utils 

如下图所示;
请添加图片描述

第三步:设置 yum 仓库地址 下面这两步最好都要执行


sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

请添加图片描述

这一步说明有设置一个仓库

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

请添加图片描述

第四步:更新 yum 缓存

sudo yum makecache fast #yum 是包管理器

请添加图片描述

第五步:安装新版 docker

sudo yum install -y docker-ce docker-ce-cli containerd.io

请添加图片描述

查看docker版本

docker -v

请添加图片描述

Docker入门实践

基本操作
第一步:启动docker

sudo systemctl start docker

请添加图片描述

第二步:设置 docker 开机启动(自启)

sudo systemctl enable docker

第三步:镜像加速
由于国内网络问题,需要配置加速器来加速。修改配置文件 /etc/docker/daemon.json

下面命令直接生成文件 daemon.json

cat <<EOF > /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ],
  "max-concurrent-downloads": 10,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
    },
  "data-root": "/var/lib/docker"
}
EOF

请添加图片描述

说明:在执行如上指令时,保证你的登录用户为root管理员用户。

第四步:重新启动服务。

重新加载docker配置 此时的sudo可以省略不写

sudo systemctl daemon-reload

重启docker服务 此时的sudo可以省略不写

sudo systemctl restart docker

请添加图片描述

第五步:查看镜像配置

docker info

请添加图片描述

第六步:下载hello-world 镜像

sudo docker pull hello-world

第七步:检查docker 镜像

Docker images

在这里插入图片描述

第八步:运行docker镜像

docker run hello-world

在这里插入图片描述

第九步:检查已启动的docker 服务 (正在运行的)

Docker ps

假如希望查看所有镜像,包含没有运行的镜像容器,可以执行如下指令:

Docker ps –all   #可以用 docker ps -a 缩写形式

第十步:停止docker容器服务

说明:无法直接删除正在使用的镜像,想要删除可以先删除容器,再删除镜像;

docker stop 服务id

第十步:删除docker 容器

关于容器id的说明:如果有多个容器id,如果前三位相同,那么只输入第四位即可,如果只有一个id那么就只输入前三位即可;

docker container rm 容器名或容器id

请添加图片描述

第十一步:删除docker镜像

docker image rm hello-world

说明:无法直接删除正在使用的镜像,想要删除可以先删除容器,再删除镜像;

请添加图片描述

核心对象分析

镜像

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。

容器

镜像(Image)和容器(Container)的关系,就像是光盘和光驱,容器是镜像运行时的载体。容器可以被创建、启动、停止、删除、暂停等。

容器的本质是进程,但与直接在宿主机执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

数据卷

镜像使用的是分层存储方式,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层(我们可以称这个为容器运行时执行读写操作而准备的存储层),容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。

按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。

Docker镜像操作实践(是对registry远程仓库的操作)

下载

第一步:下载 CentOS 镜像 (说明,假如是自己制作镜像,都会先下载一个空的centos镜像,官方镜像仓库地址为https://hub.docker.com/),假如后面我们要自己做镜像,都需要这样的一个空的系统镜像文件。

此处的7指的是7版本的镜像,如果不指定7就会下载最新版本

docker pull centos:7

在这里插入图片描述

第二步:查看centos7镜像文件

docker images

#或者

docker image ls

请添加图片描述

运行镜像

通过docker启动运行 centos7镜像

docker run -it xxxx bash

xxxx - 镜像名, 或 image id 的前几位
-it 这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
bash 放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。

请添加图片描述
注意⚠️:在容器中没有docker的命令,所以想要执行docker命令就要退出容器(使用exit命令);

docker ps#查看正在运行的程序
pwd#查看当前在哪个目录下

如何别人传过来的镜像

创建目录
请添加图片描述

或者创建多级目录

请添加图片描述

保存镜像

保存指令

docker  save centos:7 | gzip

起名字指令
此指令是其名字centos7压缩成tar.gz

>centos7.tar.gz

请添加图片描述

将镜像保存到本地

请添加图片描述

请添加图片描述

导入使用镜像

请添加图片描述

请添加图片描述

删除镜像文件

假如镜像不需要了可删除镜像,例如:

删除镜像id前缀为501的 镜像,一般三位以上,足够区分即可。

docker image rm 501

删除指定镜像名的镜像

docker image rm centos

Docker容器操作实践

启动分析
通过 docker run 来创建启动容器(这个容器相当于一个独立的集装箱)

docker run -it centos:7 bash

Docker 在后台运行的标准操作包括:

检查本地是否存在指定的镜像,不存在就从公有仓库下载
利用镜像创建并启动一个容器
分配一个文件系统(简版linux系统),并在只读的镜像层外面挂载一层可读写层
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
从地址池配置一个 ip 地址给容器
执行用户指定的应用程序
后台运行

docker run -dit centos:7

-d 后台运行容器
容器是否会长久运行,是和 docker run 指定的命令有关,和 -d 参数无关。

查看容器信息
查看后台运行的容器输出结果

docker container logs 802

查看docker中的容器

docker ps -a

其中,-a all, 全部

停止或重启容器

停止运行的容器,代码如下:

docker container stop 802

重新启动容器,代码如下:

docker container restart 802

进入指定容器
当需要进入容器进行操作时(容器运行着),可以使用 docker exec 命令,例如:

docker exec -it 802 bash #802为容器id

退出容器
假如从宿主机进入了启动的容器,退出容器需要使用exit指令,例如:

exit

删除容器
假如容器不用了,可执行删除操作,例如:

docker container rm 802 #802为容器id

其中,如果删除运行中的容器,需要添加 -f 参数。

清理所有终止状态容器,例如

docker container prune

Docker数据管理实践

概述
在容器中管理数据主要有两种方式:

挂载主机目录 (Bind mounts)-最常用 (docker run –v 宿主机目录:容器目录)
数据卷(Volumes)
数据卷
数据卷是一个可供一个或多个容器使用的特殊目录,可以在容器之间共享和重用,默认会一直存在,即使容器被删除。

数据卷操作
第一步:创建数据卷

docker volume create container-vol

第二步:查看所有数据卷

docker volume ls

查看指定 数据卷 的信息

docker volume inspect container-vol

查询的结果:

[
    {
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/container-vol/_data",
        "Name": "container-vol",
        "Options": {},
        "Scope": "local"
    }
]

第三步:启动挂载数据卷的容器

docker run -it --mount source=container-vol,target=/root centos:7 bash

或者采用如下简写方式

docker run -it -v container-vol:/root centos:7 bash

-v container-vol:/root 把数据卷 container-vol 挂载到容器的 /root 目录

第四步:删除数据卷(如果数据卷被容器使用则无法删除)

docker volume rm container-vol

清理无主数据卷

docker volume prune

挂载主机目录(常用)

docker run -it -v /usr/app:/opt/app centos:7 bash

其中:
1)/usr/app:为宿主机目录
2)/opt/app: 为启动容器的一个目录
3)-v 用于指定挂载目录,如果本地目录(宿主机目录)不存在, Docker 会自动为你按照挂载目录进行目录的创建。

例如:

在这里插入图片描述
查看挂载目录信息

docker inspect 91a #91a 为容器id

显示结果:

...

"Mounts": [
    {
        "Type": "bind",
        "Source": "/usr/app",
        "Destination": "/opt/app",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
],

...

Dockerfile文件应用实践
概述
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。我们通常会基于此文件创建docker镜像。

准备工作
centos:7镜像 (所有的镜像文件创建时都需要有一个空的centos镜像,就类似通过一个空的光盘或u盘创建一个系统启动盘是一样的)
jdk压缩包 jdk-8u51-linux-x64.tar.gz(可以从官网去下载:oracle.org),基于此压缩包,制作jdk镜像。
Dockerfile文件
在创建新的镜像时都需要有一个Dockerfile文件(文件名一定要注意大小写),这个文件要与你的资源放在一起(例如你下载的jdk),我们可以通过linux系统中的touch指令创建此文件(touch Dockerfile)

现在,以centos7为基础,构建oracle jdk8的镜像,首先通过vim打开Dockerfile,这个文件不存在会自动创建。然后进入编辑模式(按i字母),在编辑模式下可以拷贝如下语句(自己手动写也可以,但确保写的单词正确,大小写,空格)。
第一步:编写FROM语句(关键字一定要大写,例如FROM不能写小写)

FROM centos:7

第二步:通过ADD命令将宿主机中的压缩包传入镜像容器中的指定目录,并同时解压缩

ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker

第三步:设置环境变量(通过ENV关键字实现,目录启动容器中的目录)

ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51 \
    PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH

第四步:指定命令行操作(所有指令与后面内容要有空格)

CMD [‘bash’]

完整示例如下:(注意关键字与后面内容之间的空格,可以将如下完成示例拷贝Dockerfile文件,但是一定要注意你的jdk名字是什么)

FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker
ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51 \
    PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH
CMD ['bash']

使用 Dockerfile 构建镜像(在Dockerfile所在目录执行docker指令)

docker build -t jdk:8 .  #不要丢掉这里的点,-t表示镜像标识(镜像名),是tag单词的缩写.

在这里插入图片描述注意末尾的点,表示构建过程中从当前目录寻找文件,jdk:8为我们创建的镜像名。

运行镜像文件

docker run -it jdk:8 bash

进入容器以后,可以通过echo $PATH查看环境变量,并可以通过java –version查看JDK版本信息。

在这里插入图片描述FAQ:如何通过此镜像运行一个web服务,例如sentinel等。

第一步:将sentinel拷贝宿主机指定目录,例如/root/servers目录(servers目录不存在可以自己创建)。

在这里插入图片描述
第二步:启动镜像容器,通过java执行运行web服务

基于jdk:8镜像启动运行sentinel服务(服务启动后可在宿主机通过localhost:8180进行访问)

docker run -d  -p 8180:8080 --name sentinel  \
-v /root/servers:/usr/sca  \ 
jdk:8 java -jar /usr/sca/sentinel-dashboard-1.8.0.jar

例如

在这里插入图片描述
其中,端口映射,可参考下面的图,例如:

在这里插入图片描述
第三步:打开浏览器,访问sentinel服务.
访问时你的ip地址应该为宿主机的ip地址,端口号为宿主机的端口号.例如

在这里插入图片描述

镜像导出导入操作
镜像导出(linux系统中的镜像文件下载到本地-例如window),导出后给他人使用

docker save  jdk:8 | gzip > jdk8.tar.gz 

镜像导入(要在jdk8.tar.gz文件所在目录下执行)

docker load < jdk8.tar.gz  

制作Sentinel镜像(练习)
第一步:定义Dockerfile文件,同时将jdk,sentinel也要和这个文件放在同一个目录

FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz  /usr/local/
ADD sentinel-dashboard-1.8.0.jar  /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_51 \
    PATH=/usr/local/jdk1.8.0_51/bin:$PATH
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/sentinel-dashboard-1.8.0.jar"]

第二步:使用 Dockerfile 构建镜像(在Dockerfile所在目录执行docker指令)

docker build -t  sentinel:8 .  #不要丢掉这里的点

第三步:运行sentinel容器

docker run -d -p 8180:8080 sentinel:8

假如我们要做目录的挂载,保存容器中日志,可参考如下方式:

docker run -d -p 8180:8080 --name sentinel  \
-v /usr/local/docker/sentinel/logs:/root/logs/csp sentinel:8

第四步:查看sentinel容器

docker ps

假如看不到容器,可通过"docker container logs 容器id"方式查看容器状态.

第五步:访问sentinel服务

访问时你的ip地址应该为宿主机的ip地址,端口号为宿主机的端口号.例如

在这里插入图片描述

总结(Summary)
重难点分析
Docker 是什么?
Docker 核心思想
Docker 核心概念(容器、镜像、数据卷)
Docker 容器、镜像、数据卷操作
Docker 镜像制作(Dockerfile文件)
FAQ分析
什么是Docker镜像?
如何理解Docker容器
Docker数据卷的作用是什么?
Docker 有哪些常用指令?

在这里插入图片描述

Dockerfile的作用是什么?
如何制作镜像?
如何保存和导入本地镜像.
Sentinel镜像如何制作?
Bug分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值