技术复盘(4)--docker

news2024/11/27 0:23:16

技术复盘--docker

  • 资料地址
  • 环境
  • 初始docker
  • 安装docker
  • docker常用命令-都需要先启动docker
  • docker容器打包为镜像
  • docker坑
  • docker卸载
  • docker数据卷
  • dockerFile构建过程
  • 搭建私有仓库--非图形化界面
  • 搭建私有仓库--图形化界面
  • docker理论知识

资料地址

docker官网:https://www.docker.com/
docker中文网:https://docker.p2hp.com/
docker-hub官网:https://hub.docker.com/
docker-compose:https://pan.baidu.com/s/1zBg83EwPdn1fce92_CnU1w?pwd=hf01
提取码:hf01
学习地址-B站狂神:https://www.bilibili.com/video/BV1og4y1q7M4

环境

centos7

初始docker

docker作用:将内核与容器隔离,容器内放置运行的程序和环境,每一个容器之间又相互隔离。防止环境干扰,避免不必要的加载。
在这里插入图片描述
docker命令图解–复习专用:
在这里插入图片描述

特点:

  1. 应用更快速的交付和部署
    传统:一堆帮助文档,安装程序
    Docker :打包镜像发布测试,一键运行
  2. 更便捷的升级和扩缩容
    使用了Docker之后,我们部署应用就和搭积木一样!项目打包为一个镜像,如镜像中有tomcat7 mysql5,需要升级,升级为tomcat8 mysql8后,又作为一个新的镜像。别人只需要拿到这个镜像即拿到了整个升级后的环境。
  3. 更简单的系统运维
    在容器化之后,我们的开发,测试环境都是高度一致的。
  4. 更高效的计算资源利用
    Docker是内核级别的虚拟化,可以再一个物理机上可以运行很多的容器实例!服务器的性能可以被压榨到极致。

名词解释:

  1. 镜像( image )
    docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像===> run ==> tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。当然,一个镜像中通常会含有多个环境,如mysql8 tomcat8,为保证你和你的小组成员开发环境一致,你可以将这个镜像分享给你的小组成员。
  2. 容器( container )
    Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。
    启动,停止,删除,基本命令!
  3. 仓库
    仓库就是存放镜像的地方!仓库分为公有仓库和私有仓库!Docker Hub (默认是国外的)阿里云…都有容器服务器
    :

安装docker

官方安装教程:https://docs.docker.com/engine/install/centos/【供参考】

1.卸载旧的版本:我这儿没有旧的版本,没有的可以略过这一步骤

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

在这里插入图片描述
2.设置存储库,采用阿里的镜像进行下载

sudo yum install -y yum-utils

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

在这里插入图片描述
在这里插入图片描述
3.更新yum软件包索引

yum makecache fash

在这里插入图片描述
4.安装docker,版本号为19.03.8
docker-ce表示社区版,docker-ee代表企业版
docker-ce-cli-19.03.8:表示docker客户端的版本号,不指定默认为最新

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

5.启动docker

sudo systemctl start docker

6.查看docker版本号:能查询出来代表安装成功

docker version

7.运行hellow-world镜像

docker run hello-world

日志解读:
Unable to find image "hello-world:latest’ locally:未找到hello-world镜像
latest: Pulling from library/hello-world:去拉取最新的hello-world镜像
Pull complete :拉取成功
Hello from Docker!
This message shows that your installation appears to be working correctly.
如果你能看见Hello from Docker!就代表docker是安装正常的
在这里插入图片描述
8.补充:如果是买的云服务器,还可以配置镜像加速器,能够能快的下载镜像。具体怎么操作每个云服务器厂家不同略有区别。
9.安装docker compose,这个不知道的可以先不安,也不会有太大影响。我下载了个能正常用的,在资料地址处,将其下载下来上传到/usr/local/bin目录处。下面的地址是国内镜像下载,我下载后无法正常使用

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  1. 使Docker Compose二进制文件可执行
sudo chmod +x /usr/local/bin/docker-compose

11.测试Docker Compose是否安装成功

docker-compose --version

在这里插入图片描述

docker常用命令-都需要先启动docker

注意:在docker中,镜像和容器这两者容易混淆,从docker仓库中拉去的叫镜像,把镜像拿来启动后的叫容器。本文中有些地方也对这两者混淆了。

1.启动docker,停止为stop

sudo systemctl start docker

2.查询docker版本,最好在docker启动后查看,否则查看的信息不全

docker version

3.显示docker巨详细的信息

docker info

4.查看日志

docker logs

docker镜像命令:

1.查看自己主机上的所有镜像

docker images

2.删除镜像,通常通过id删除

docker rmi -f <镜像id或名称>

3.查询docker镜像,以mysql为例

docker search mysql

4.拉取docker镜像,以mysql5.7为例,不指定版本默认为最新版

docker pull mysql:5.7

docker容器命令:

1.运行docker镜像,以hello-world为例

run命令参数:
--name="name"	容器名称
-p				指定端口[小p]
	-p 容器端口:主机端口
	-p 容器端口
	容器端口
-P				随机端口[大p]
-d				以后台方式运行
【后台启动问题:后台启动后如果没有前台进程,就会自动停止】
-it				使用交互方式运行,可以进入容器内部
【-it需要指定个工作目录,通常为/bin/bash】
docker run hello-world

2.停止docker容器,以hello-world为例

docker stop hello-world

3.列出当前正在运行的 Docker 容器

参数
-a			列出所有docker容器,包括已暂停或退出的容器
docker ps

4.退出容器

exit

5.删除容器

参数:
-f			强制删除
docker rm <容器id>

6.启动/停止/重启/强制停止 容器

docker start <容器id>
docker stop<容器id>
docker restart<容器id>
docker kill<容器id>

7.查看容器中的进程

docker top <容器id>

8.查看容器元数据

docker inspect <容器id>

9.进入当前正在运行的容器,开辟一个新的终端

docker exec -it <容器id> <命令行,通常为/bin/bash>

10.进入当前正在运行的容器,不开辟新的终端

docker attach  <容器id> 

11.容器内的文件拷贝到主机

docker cp <容器id>:<容器内路径> <主机路径>

docker容器打包为镜像

1.docker容器打包为镜像,目前还未上传

#命令和git原理类似
docker commit -m="提交的描述信息." -a="作者" 容器id 目标镜像名:[TAG]

docker坑

1.docker安装的容器都是最小可运行的,安装时最好百度一下或参考官网

docker卸载

1.卸载依赖

sudo yum remove docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io 

2.删除工作路径,这是docker的默认工作路径

rm -rf /var/lib/docker

docker数据卷

需求:数据存在容器中,容器删除后数据也会丢失,基于此,需要将docker容器中的数据同步到主机上。
1.启动centos,将容器内/home目录挂载到主机内/home/ceshi目录下,双向绑定,数据双向同步

-v全称:volume

docker run -it -v <容器目录>:<主机目录> <镜像> /bin/bash
docker run -it -v /home/ceshi:/home centos /bin/bash

2.实际运用:将mysql5.7配置文件和数据文件挂载在主机上,且mysql密码为root
-e全称:environment

docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/data -e MYSQL_ROOT_PASSWORD="root" --name="mysql01"  mysql:5.7

dockerFile构建过程

dockerFile基础知识:

  1. 每个保留关键字(指令)都是必须是大写字母
  2. 执行从上到下顺序执行
  3. #表示注释
  4. 每一个指令都会创建提交一个新的镜像层,并提交!

dockerfile命令:

FROM		#基础镜镜像,—切从这里开始构建
MAINTAINER	#镜像是谁写的,姓名+邮箱
RUN			#镜像构建的时候需要运行的命令
ADD			#步骤: tomcat镜像,这个tomcat压缩包,自动解压!添加内容
WORKDIR		#镜像的工作目录
VOLUME		#挂载的目录
EXPOSE		#保留端口配置
CMD			#指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT	#指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD		#当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令。触发指令。
COPY		#类似ADD,将我们文件拷贝到镜像中
ENV			#构建的时候设置环境变量!

构建jdk+tomcat镜像
1.上传jdk和tomcat,等会代码在mycentos中编写
在这里插入图片描述

2.编写代码

FROM centos
MAINTAINER lijian<2435024850@qq.com>

ADD jdk-8u162-linux-x64.tar.gz /usr/local
ADD apache-tomcat-7.5.87.tar.gz /usr/local

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_162
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.87
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.87
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-8.5.87-src/bin/startup.sh && tail -F /url/local/apache-tomcat-8.5.87/bin/logs/catalina.out

3.构建镜像

docker build -f mycentos -t diytomcat .

4.验证,启动容器并进入容器,输入java -version检测jdk,有则代表jdk成功,检测tomcat的话需要增加webapp和增加端口映射,这儿就不检测tomcatt了。
在这里插入图片描述
5.发布镜像到docker hub,步骤为:登录docker hub -> 对镜像打标签 -> 上传镜像,打标签格式为docker tag <镜像id或镜像名> <hub用户名>/<上传镜像名>:<版本号>,具体过程看图。
在这里插入图片描述
6.上传成功后就能在docker hub中找到自己刚刚上传的,和github是差不多的。
在这里插入图片描述

搭建私有仓库–非图形化界面

1.私有仓库本质也是一个镜像,拉取镜像

 docker pull registry

2.以后台+交互的方式启动镜像,端口映射为5000:5000,随后访问**http://<自己的ip地址>:5000/v2/_catalog**如下图所示表示搭建成功。

docker run -id --name=registry -p 5000:5000 registry

在这里插入图片描述

3.让本地的docker信任远程仓库,一般情况下docker仓库和自己的docker是两台不同的机器,但这儿只是为了学习,就搭建在的一台机器上。编辑vim /etc/docker/daemon.json ,将"insecure-registries":["<服务器ip>:5000"]插入到最后面,保存退出,如下图所示。
在这里插入图片描述
4.重启docker和docker仓库

systemctl restart docker
docker start registry 

在这里插入图片描述
5.上传镜像到docker私有仓库,以mysql5.7为例:先将mysql打标签,打标签规则为打成的标签名必须以要上传仓库的ip地址:端口号命令,再将标签上传

docker tag <镜像名>:<版本号> <仓库地址>:<端口号>/<上传后的镜像名>:<上传后的镜像版本号>
docker tag mysql:5.7 <仓库地址>:5000/mysql:5.7


docker push  <仓库地址>:5000/mysql:5.7

在这里插入图片描述
6.上传成功后我们再次访问html,就会发现repositories里多了个mysql
在这里插入图片描述
7.拉取镜像,拉取前先查看镜像极其具体的版本号:


查看:http://<仓库ip地址>:5000/v2/<需要查看的镜像>/tags/list
http://<仓库ip地址>:5000/v2/mysql/tags/list

拉取:docker pull <仓库ip地址>:5000/<镜像名>:<版本号>
docker pull <仓库ip地址>:5000/mysql:5.7 

在这里插入图片描述

搭建私有仓库–图形化界面

【和搭建私有仓库–非图形化界面有很多相同点】
前置条件:该过程要求必须安装docker-compose
1.让本地的docker信任远程仓库,编辑vim /etc/docker/daemon.json ,将`“insecure-registries”:[“<服务器ip>:5000”,“<服务器ip>:8080”]
插入到最后面,保存退出,如下图所示。其中5000为docker-registry的端口,8080为docker-registry-ui的端口,5000可以选择不配置。
在这里插入图片描述
2.重启docker

systemctl restart docker

3.找个地方新建个目录,在目录中创建docker-compose.yml目录,将下列代码输入其中。

version: '3.0'
services:
        registry:
                image: registry
                volumes:
                        - ./registry-data:/var/1ib/registry
        ui:
                image: joxit/docker-registry-ui:static
                ports:
                        - 8080:80
                environment:
                        - REGISTRY_TITLE=个人docker仓库地址
                        - REGISTRY_URL=http://registry:5000
                depends_on:
                        - registry

在这里插入图片描述
4.启动docker-compose.yml,因为docker-compose.yml为docker-compose的默认文件,所以直接docker-compose up -d启动即可

docker-compose up -d

5.启动后正常贴图,访问地址:<ip地址>:8080
在这里插入图片描述
6.上传镜像的话和搭建私有仓库–非图形化界面中的一致,参考即可。

docker理论知识

作于复习,不建议不了解的同学直接阅读。

1.联合文件系统
UnionFS ( 联合文件系统): Union文件系统(UnionFS )是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtualfilesystem)。Union文件效统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性∶一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

实际运用:docker pull命令就是基于联合文件系统

2.docker镜像加载原理
bootis(boot file system):主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
roots (root file system):在bootfs之上。包含的就是典型Linux系统中的/dev, /proc, /bin, /etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。|

3.具名挂载和匿名挂载
字面意思,具名挂载就是指定挂载地,匿名随机生成一个挂载地,查看匿名挂载地方法:通过**docker volume inspect <容器id>**查看详情,详情里的mounts会有匿名挂载地。不建议匿名挂载,容易找不到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/423777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一种供水系统物联网监测系统

1.1供水系统 1.1.1监测范围选择依据 &#xff08;1&#xff09;管网老化区域管网 管网建设年代久远&#xff0c;通常管网发生破损问题较大&#xff0c;根据管网本身属性和历史发生事件的统计分析&#xff0c;结合数理统计&#xff0c;优先选择管网老化区域的管段所在区域进行…

基于imx8m plus开发板全体系开发教程4:Linux系统开发

前言&#xff1a; i.MX8M Plus 开发板是一款拥有 4 个 Cortex-A53 核心&#xff0c;运行频率 1.8GHz;1 个 Cortex-M7 核心&#xff0c;运行频率 800MHz;此外还集成了一个 2.3 TOPS 的 NPU&#xff0c;大大加速机器学习推理。 全文所使用的开发平台均为与NXP官方合作的FS-IMX8…

深入浅出Kafka

这个主题 武哥漫谈IT &#xff0c;作者骆俊武 讲得更好 一、什么是Kafka&#xff1f; 首先我们得去官网看看是怎么介绍Kafka的&#xff1a; https://kafka.apache.org/intro Apache Kafka is an open-source distributed event streaming platform. 翻译成中文就是&#xff1…

Git分布式版本控制软件

1.什么是git git是分布式版本控制软件。 软件&#xff1a;git是从别的地方下载下来安装到我们电脑上的软件。 版本控制&#xff1a;跟毕业论文一样&#xff0c;先写好版本1然后交给导师&#xff0c;导师说不行&#xff0c;然后再改为版本2&#xff0c;然后循环下去&#xff0…

Su+ELK实现网络监测(2)——ELK安装与配置

ELK安装配置文档一、环境准备基础配置二、Jdk1.8环境部署1、安装jdk2、编辑环境变量三、ElasticSearch部署1、安装2、修改文件所有者3、修改配置文件4、启动四、elasticsearch-head部署&#xff08;可不安装&#xff0c;跳过&#xff09;1、nodejs安装2、head插件安装3、修改he…

智慧工厂可视化合集,推动行业数字化转型

图扑软件基于 HTML5&#xff08;Canvas/WebGL/WebVR&#xff09;标准的 Web 技术&#xff0c;满足了工业物联网跨平台云端化部署实施的需求&#xff0c;以低代码的形式自由构建三维数字孪生、大屏可视化、工业组态等等。从 SDK 组件库&#xff0c;到 2D 和 3D 编辑&#xff0c;…

软化水处理知识总结

软化水除了广泛应用在饮用、浴室、厨房、洗衣等生活用水&#xff0c;和酒店、学校、写字楼、公寓、餐饮等商业用水的处理&#xff0c;还可用于锅炉、交换器、蒸发冷凝器、空调、直燃机等系统的补给水的软化。 那什么是软化水&#xff0c;和除盐水、纯水有什么区别&#xff1f;…

大学物理第四单元:刚体

1.刚体的定轴转动 思考&#xff1a;改变转动状态的因素 答&#xff1a;改变刚体运动状态的的因素有力的大小及力臂有关&#xff0c;力与力臂的乘积为力矩。 力臂&#xff1a;力到转轴的距离 简而言之&#xff0c;改变刚体运动状态的因素是力矩&#xff0c;与力和力臂有关。 …

谷粒学院项目笔记第一部分

1.环境搭建&#xff0c;准备工作 &#xff08;1&#xff09;创建数据库 &#xff08;2&#xff09;创建项目完整结构 &#xff08;3&#xff09;父工程springboot,子工程maven &#xff08;4&#xff09;父工程pom设置版本&#xff0c;添加pom #版本 <version>2.2.1.R…

11个AI写作软件工具!知名4A广告公司蓝标宣布停止文案外包!

AI的这场熊熊大火&#xff0c;终于还是烧到了广告界&#xff01; 2023年4月12日&#xff0c;是一个再普通不过的日子&#xff0c;但这一天会被很多人记住。不是因为席卷整个华北区的漫天黄沙&#xff0c;而是因为一封代表着AI势不可挡的决心和象征着一个行业巨变拉开序幕的邮件…

学会 制作极简搜索浏览器 —— 并将 ChatGPT 接入浏览器

前期回顾 Vue3 Ts Vite pnpm 项目中集成 —— eslint 、prettier、stylelint、husky、commitizen_0.活在风浪里的博客-CSDN博客搭建VIte Ts Vue3项目并集成eslint 、prettier、stylelint、huskyhttps://blog.csdn.net/m0_57904695/article/details/129950163?spm1001.2…

采用D-K迭代设计不确定对象的鲁棒控制器(μ-controllers)

采用D-K迭代设计不确定对象的鲁棒控制器&#xff0c;将H∞综合(K步)与μ分析(D步)相结合&#xff0c;优化闭环鲁棒性能。 Step 1&#xff1a;利用H∞综合方法找到使标称系统闭环增益最小的控制器。 Step 2&#xff1a;进行鲁棒性分析&#xff0c;以估计闭环系统的鲁棒H∞性能。…

手把手kubernetes本地化部署(含疑难杂症排查解析)

文章目录一、什么是Kubernetes&#xff1f;二、Kubernetes的基本概念PodDeploymentServiceNamespaceConfigMapSecret三、Kuberntes单机本地部署3.1、安装minikube命令行工具3.2、安装docker3.3、启动minikube3.4、使用Dashboard3.5、异常问题解决3.5.1、提示Docker失败3.5.2、d…

迅为瑞芯微RK3568国产化实时操作系统,大容量内存

基于瑞芯微四核 64 位 Cortex-A55 ARMv8 架构处理器 RK3568&#xff0c;主频可达 2.0GHz&#xff0c;CPU 采用 22nm 制程工艺&#xff0c;动态调频调压技术&#xff0c;进一步放大能效比优势。 大容量内存 最大容量支持 8GB 内存&#xff0c;能够有效发挥处理器性能&#xff0…

服装标签二维码,要如何制作?含品牌案例

睡衣上的二维码标签、大衣的洗护说明二维码、衣服上的防伪二维码… 服装行业应用二维码&#xff0c;已经非常常见了。 服装行业中的二维码&#xff0c;不仅帮助品牌更好地展示产品信息、传播品牌影响力&#xff0c;更重要的是&#xff0c;通过这些服装二维码&#xff0c;直接优…

Attention is all your need——Transformer论文

摘要 此序列转录模型仅仅依赖于注意力机制&#xff0c;而不使用循环或者是卷积&#xff0c;将循环全部换成了multi-headed self- attention 介绍 RNN的特点、并行程度低。 Attention在RNN上的应用。 引入注意力机制&#xff0c;提高并行度。 背景 使用卷积对长的序列难以…

数据结构——排序

排序一、排序的概念二、直接插入排序希尔排序三、直接选择排序四、堆排序1、堆的概念2、堆排序五、冒泡排序六、快速排序七、归并排序八、基数排序排序算法的时间复杂度和空间复杂度一、排序的概念 课本概念&#xff08;P165&#xff09; (1&#xff09;内部排序。内部排序指…

一图看懂 pyexcel_io 模块:提供统一 API用来读写操作 Excel 文件的库, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 pyexcel_io 模块&#xff1a;提供统一 API用来读写操作 Excel 文件的库, 资料整理笔记&#xff08;大全&#xff09;摘要模块图类关系图模块全展开【pyexcel_io】统计常量s…

【LeetCode】剑指 Offer 59. 队列的最大值 p288 -- Java Version

1. 题目介绍&#xff08;59. 队列的最大值&#xff09; 面试题59&#xff1a;队列的最大值&#xff0c; 一共分为两小题&#xff1a; 题目一&#xff1a;滑动窗口的最大值题目二&#xff1a;队列的最大值 2. 题目1&#xff1a;滑动窗口的最大值 题目链接&#xff1a;https://l…

3.rabbitmq-集群

1.修改3台的主机名称,也可以不改 vi /etc/hostname 2.配置各个节点的host文件,让各节点都能识别对方 vi /etc/hosts 192.168.3.132 host-rabbitmq 192.168.3.133 host-rabbitmq2 192.168.3.134 host-rabbitmq3 3.以确保各个节点的cookie文件使用的同一个值 在node1上执行远程命…