Docker容器化技术

news2024/11/16 8:25:12

Docker容器化技术

1.Docker概念

  • Docker是一个开源的应用容器引擎
  • 基于go语言实现
  • Docker可以让开发者们打包他们的应用以及依赖包到一个轻量级的、可移植的容器中,然后发布到任何流行的Linux机器上
  • 容器是完全使用沙箱机制,相互隔离
  • 容器性能开销极低
  • Docker从17.03版本开始分为CE和EE

:docker是一种容器技术,解决软件跨环境迁移的问题

2.docker的安装

#1.yum包更新到最新
yum update
#2.安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
#3.设置yum源
yum-config-manager --add-repo https://download.docker .com/linux/centos/docker-ce.repo
#4.安装docker
yum install -y docker-ce
#5.查看版本
docker -version

报错时:

可在/etc/docker下配置阿里云的镜像加速器

vim daemon.json
 
 {
      "registry-mirrors":["https://alzgoonw.mirror.aliyuncs.com"]
 }

3.docker架构

在这里插入图片描述

4.docker命令

4.1Docker服务相关命令-daemon

  1. 启动docker服务

  2. 停止

  3. 重启

  4. 查看状态

  5. 开机自启动

    systemctl start docker
    systemctl stop docker
    systemctl restart docker
    systemctl status docker
    systemctl enable docker
    

4.2Docker镜像相关命令-image

  1. 查看本地镜像

    • docker images
      docker images -q  #镜像ID
      
  2. 搜索Docker Hub中镜像

    • docker search redis
      
  3. 从仓库拉取镜像至本地

    • docker pull redis     #(默认最新版本latest)
      docker pull redis:5.0 #镜像版本从hub.docker.com上查看
      
  4. 删除本地镜像

    • docker rmi {ID}
      docker rmi `docker images -q` #全部删除
      

4.3Docker容器相关命令【重】

  • 查看容器

    • docker ps  #查看运行中的容器
      docker ps -a # 查看所有容器
      docker ps -aq # 查看所有容器ID
      
  • 创建容器

    • docker run -it --name=c1  centos:7 /bin/bash #-it交互式启动容器后,分配一个伪终端进入容器,exit命令退出关闭容器  /bin/bash容器启动后执行 
      docker run -id --name=c1  centos:7 #-id守护式启动容器,后台运行,使用docker exec进入容器,exit退出后不会关闭容器
      
  • 进入容器

    • docker exec -it c2 /bin/bash
      
  • 启动容器

    • docker start c2
      
  • 停止容器

    • docker stop c2
      
  • 删除容器,需要停止容器

    • docker rm c2
      docker rm `docker ps -aq`
      
  • 查看容器信息

    • docker inspect
      

5.数据卷

5.1概念

思考:

  • Docker容器删除后,在容器中产生的数据也会随之销毁
  • Docker容器和外部机器可以直接交换文件吗?
  • 容器之间想要进行数据交互?

数据卷概念:

  • 宿主机中的一个目录或文件
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
    • 一个容器在该目录下修改数据时,数据卷上的数据随之改变,另一个容器的该目录下数据也随之改变
  • 一个容器也可以被挂载多个数据卷

数据卷作用:

  • 容器数据持久化
    • 容器删除后,数据卷上的数据还存在
    • 重新创建容器(-v 数据卷),容器依旧可以获得数据卷上的数据
  • 外部机器和容器间通信
  • 容器之间数据交换

5.2创建数据卷

docker run -it --name=c2 -v /root/data2:/root/data_container2 -v /root/data3:/root/data_container3 centos:7	     #-v 参数 宿主机目录:容器目录,目录不存在,自动创建  #数据持久化

5.3数据卷容器

在这里插入图片描述

#1.创建启动c3数据卷容器,使用-v参数设置数据卷
docker run -it --name=c3 /volume centos:7
#2.创建启动c1、c2容器,使用--volumes-from参数设置数据卷
docker run -it --name=c1 --volumes-from c3 centos:7
docker run -it --name=c2 --volumes-from c3 centos:7

和多容器挂载同一个宿主机目录:

多容器挂载:如果容器多的话,操作麻烦,数据保存、持久化、回复比较麻烦

6.应用部署

6.1MySQL部署

  • 容器和外部机器不能够直接通信
  • 容器和宿主机通信、宿主机和外部机器通信
  • 以宿主机为桥,端口映射
  1. 搜索mysql镜像

    docker search mysql
    
  2. 拉取mysql镜像

    docker pull mysql:5.6
    
  3. 创建容器

    #宿主机/root/mysql下
    docker run -id  \
    -p 3307:3306    \  #端口映射,使外部机器连上容器c_mysql
    --name=c_mysql  \  
    -v /root/mysql/conf:/etc/mysql/comf.d  \  #目录映射,数据卷
    -v /root/mysql/logs:/logs   \
    -v /root/mysql/data:/var/lib/mysql  \ 
    -e MYSQL_ROOT_PASSWORD=123456   \
    mysql:5.6  
    

6.2Tomcat部署

  1. 搜索tomcat镜像

    docker search tomcat
    
  2. 拉取tomcat镜像

    docker pull tomcat
    
  3. 创建容器

    mkdir /root/tomcat
    cd /root/tomcat
    
    docker run -id --name=c_tomcat  \
    -p 8080:8080   \
    -v $PWD:/usr/local/tomcat/webapps   \ #$PWD宿主机的当前目录
    tomcat
    
  4. 使用外部机器访问tomcat

    在宿主机/root/tomcat下

    [root@localhost tomcat]# mkdir test
    [root@localhost tomcat]# cd test/
    [root@localhost test]# vim index.html
    
    #访问路径
    http://192.168.202.23:8080/test/index.html
    

在这里插入图片描述

6.3Nginx部署

  1. 搜索tomcat镜像

    docker search nginx
    
  2. 拉取tomcat镜像

    docker pull nginx:1.18
    
  3. 创建容器

    mkdir /root/nginx
    cd /root/nginx
    
    docker run -id --name=c_nginx  \
    -p 80:80  \
    -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf   \
    -v $PWD/logs:/var/log/nginx   \
    -v $PWD/html:/usr/share/nginx/html \ 
    nginx:1.18
    
  4. 使用外部机器访问tomcat

6.4Redis部署

  1. 创建容器c_redis

     docker run -id --name=c_redis -p 6379:6379 redis:5.0
    
  2. windows上连接

    • 在D:\Redis\Redis-x64-3.2.100>位置

在这里插入图片描述

7.Dockerfile

7.1Docker镜像原理

  • Docker镜像本质是什么?
    • 是一个分层文件系统
  • Docker中一个centos镜像为什么只有200MB,而一个centos操作系统的ios文件要几个G?
    • centos的ios镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层
  • Docker中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB
    • 由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所以整个对外暴露的tomcat镜像大小500多MB

在这里插入图片描述

7.2镜像制作

  1. 容器转镜像
    在这里插入图片描述

  2. Dockerfile

    在这里插入图片描述

  3. 案例1

    • 自定义centos7镜像,要求:

      • 默认登录路径:/usr
      • 可以使用vim
    • 步骤

      • 定义父镜像:FROM centos:7
      • 定义作者信息:MAINTAINER yehuda <yehuda@yh.cn>
      • 执行安装vim命令:RUN yun install -y vim
      • 定义默认的工作目录:WORKDIR/usr
      • 定义容器启动执行的命令:CMD/bin/bash
    • docker build  \
      -f ./centos_dockerfile  \  #dockerfile文件目录
      -t yehuda_centos:1  .    #新镜像命名:版本号
      
  4. 案例2

    • 复制jar包springboot2-0.0.1-SNAPSHOT.jar

    • 编写dockerfile文件

      FROM java:8
      MAINTAINER yehuda <12933787@qq.com>
      ADD  springboot2-0.0.1-SNAPSHOT.jar app.jar
      CMD java -jar app.jar
      
    • 使用dockerfile文件创建镜像

      docker build -f ./java_springboot_dockerfile  -t javaapp_jar:5.7 .
      
    • 使用镜像创建容器

      docker run -id -p 9000:8058 javaapp_jar:5.7  #省略--name 系统自命名
      

8.Docker服务编排

8.1Docker Compose

​ Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

一、安装docker-compose

#安装,以编译好的二进制包方式安装在Linux系统中
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s `-` uname -m` -o /usr/local/bin/docker-compose
#设置权限
chmod +x /usr/local/bin/docker-compose
#查看版本信息
docker-compose -version

二、卸载

#二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose

三、使用docker-compose编排nginx+springboot项目

1.创建docker-compose目录

mkdir ~/docker-compose
cd ~/docker-compose

2.编写docker-compose.yml文件

version: `3`
services:
  nginx:
  image: nginx
  ports:
    - 80:80
  links:
    - app
  volumes:
    - ./nginx/conf.d:/etc/nginx/conf.d
  app:
    image: app
    expose:
      - "8080"

3.创建./nginx/conf.d目录

mkdir -p ./nginx/conf.d

4.在./nginx/conf.d目录下编写yh.conf文件

server {
        listen 80;
        access_log off;

        location / {
           proxy_pass http://app:8058;
        }
}

5.在~/docker-compose目录下使用docker-compose启动容器

docker-compose up

6.测试访问

http://192.168.202.23/hello

9.Docker私有仓库

9.1私有仓库搭建

#1.拉取私有仓库镜像
docker pull registry
#2.启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
#3.打开游览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]}表示私有仓库 描建成功
#4.信任私有仓库,修改daemon.json文件
 vim /etc/docker/daemon.json
      {
             "registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"],
             "insecure-registries": ["192.168.202.23:5000"]
      }
#5.重启docker
systemctl restart docker
docker start registry

9.2镜像上传到私有仓库

#1.标记镜像为私有仓库的镜像
docker tag centos:7 192.168.202.23:5000/centos:7
#2.上传标记的镜像
docker push 192.168.202.23:5000/centos:7

9.3从私有仓库拉取镜像

#1.拉取镜像
docker pull 192.168.202.23:5000/centos:7

10.Docker

在这里插入图片描述

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

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

相关文章

Facebook的时间机器:回溯社交媒体的历史

1. 社交媒体的起源与早期模式 社交媒体的历史可以追溯到互联网的早期发展阶段。在Web 1.0时代&#xff0c;互联网主要是一个信息发布平台&#xff0c;用户主要是被动地接收信息。但随着Web 2.0的兴起&#xff0c;互联网逐渐转变为一个互动和参与的平台&#xff0c;社交媒体应运…

HTTP与SOCKS-哪种协议更适合您的代理需求?

网络代理技术是我们日常使用网络时必不可少的一项技术&#xff0c;它可以为我们提供隐私保护和负载均衡的能力&#xff0c;从而保证我们的网络通信更加安全和顺畅。而其中最主流的两种协议就是HTTP和SOCKS。虽然它们都是用于网络代理的协议&#xff0c;但在实际应用中却存在着一…

时间复杂度和空间复杂度是什么

如何衡量代码好坏&#xff0c;算法的考察到底是在考察什么呢&#xff1f; 衡量代码好坏有两个非常重要的标准就是&#xff1a;运行时间和占用空间&#xff0c;就是我们后面要说到的时间复杂度和空间复杂度&#xff0c;也是学好算法的重要基石。 确切的占内用存或运行时间无法进…

Seal^_^【送书活动第2期】——《Flink入门与实战》

Seal^_^【送书活动第2期】——《Flink入门与实战》 一、参与方式二、本期推荐图书2.1 作者简介2.2 编辑推荐2.3 前 言2.4 本书特点2.5 内容简介2.6 本书适用读者2.7 书籍目录 三、正版购买 一、参与方式 评论&#xff1a;"掌握Flink&#xff0c;驭大数据&#xff0c;实战…

想冲宇宙厂,直接挂了。。。

宇宙厂实际是字节&#xff0c;这个称呼是因为字节跳动主宰了宇宙内一切App&#xff0c;有点家大业大的意思。 今天分享一位字节春招凉经&#xff0c;问了一些数据库和Java八股&#xff0c;没出算法题&#xff0c;直接挂了&#xff0c;竟然最喜欢出算法题的字节&#xff0c;这次…

【嵌入式】“野指针”和“悬空指针”的奇淫拙劣

【嵌入式】“野指针”和“悬空指针”的奇淫拙劣 1. 前言1.1 授权须知 2. 野指针和悬空指针3.举例说明3.1 示例一&#xff1a;free 之后&#xff0c;没有让指针指向NULL3.1.1 代码解析3.1.2 运行代码的结果3.1.3 程序崩溃在哪&#xff1f; 3.2 悬空指针–释放后使用攻击 1. 前言…

JS----随机数字,字符,数组

随机数字 function random(min 0, max 100) {if (min > 0 && max > 0 && max > min) {const gab max - min 1return Math.floor(Math.random() * gab min)}return 0 }输入格式 随机字符 function randomStr (len 32) {var s for (; s.lengt…

产品经理好干吗?

赚钱的工作都不轻松吧&#xff0c;除非是家里资源好的。 产品经理的薪资还是可观的 &#xff0c;小白如何成为产品经理&#xff1f; 首先要有经验&#xff0c;有理论知识&#xff0c;对想从事产品经理相关岗位的人来说&#xff0c;这基本是个必考的证书了&#xff0c;感兴趣的…

Java web应用性能分析之【Linux服务器性能监控分析概叙】

大多数场景&#xff0c;我们的Java web应用都是部署在linux环境&#xff0c;所以对linux服务器的性能指标需要有一个比较清晰的认识。Linux服务器的性能指标无非就5个方面&#xff1a;CPU、内存、磁盘、网络、文件系统。不同的性能指标都有对应的命令进行监控和查看&#xff08…

揭秘亚马逊、虾皮自养号测评:提升排名与流量的新策略

亚马逊一直是跨境电商平台中的佼佼者&#xff0c;每年新入驻亚马逊的商家也是非常多的&#xff0c;对于新入驻的卖家来说&#xff0c;如何在竞争激烈的市场中脱颖而出&#xff0c;增加流量并转化为订单&#xff0c;是摆在面前的重要任务。 一、亚马逊新店怎么增加流量&#xf…

验证线缆(汽车线束、网线、多芯线)破损或断开与正常线缆的区别在哪里?依AEM CV-100 k50测试仪

工厂产线生产的线缆&#xff08;汽车线束、网线、多芯线&#xff09;做成成品&#xff0c;即2端都安装好了模块。在这种情况下如何快速的判定此条线缆是合格的呢&#xff0c;此处的合格为物理层面上的合格&#xff08;不会出现开路、短路&#xff09;&#xff0c;也就是最基本保…

pytorch-解决过拟合之regularization

目录 1.解决过拟合的方法2. regularization2. regularization分类3. pytorch L2 regularization4. 自实现L1 regularization5. 完整代码 1.解决过拟合的方法 更多的数据降低模型复杂度 regularizationDropout数据处理早停止 2. regularization 以二分类的cross entropy为例&…

前端三剑客 HTML+CSS+JavaScript ⑤ HTML文本标签

别困在过去&#xff0c;祝你有勇气开始&#xff0c;下一行 —— 24.4.24 一、文本标签 1.特点 1.用于包裹&#xff1a;词汇、短语等 2.通常写在排版标签里面&#xff08;h1~h6、p、div&#xff09; 3.排版标签更宏观&#xff08;大段的文字&#xff09;&#xff0c;文本标签更微…

去雾笔记01-SRKTDN: Applying Super Resolution Method to Dehazing Task

文章目录 Abstract1. Introduction2. Related Work3. Method3.1. Network Architecture Abstract 们提出了一种结合超分辨方法和知识转移方法的模型。我们的模型由一个教师网络、一个去雾网络和一个超分辨率网络组成。 1. Introduction ECNU KT团队提出了一个知识蒸馏[20]模…

OpenAI 笔记:chat API

聊天模型接受一系列消息作为输入&#xff0c;并返回模型生成的消息作为输出。 1 导入openai 的api key from openai import OpenAIclient OpenAI(api_key***) 2 调用聊天API completion client.chat.completions.create(model"gpt-3.5-turbo",messages[{"…

09—DOM和BOM

一、DOM 1、HTML DOM (文档对象模型) 文档对象模型&#xff08;Document Object Model&#xff0c;DOM&#xff09;是表示和操作HTML和XML文档内容的基础API。当网页被加载时&#xff0c;浏览器会根据DOM模型&#xff0c;将结构化文档&#xff08;比如HTML和XML&#xff09;解…

3d模型合并怎么样不丢材质?---模大狮模型网

在3D设计中&#xff0c;合并模型是常见的操作&#xff0c;它可以帮助设计师将多个单独的模型组合成一个&#xff0c;从而简化场景并提高渲染效率。然而&#xff0c;合并模型时常常会面临一个棘手的问题&#xff1a;如何确保合并后的模型不丢失原有的材质?本文将探讨如何在合并…

Parallels Desktop 19完美中文版 PD19虚拟机详细图文安装教程 亲测兼容M1/M2

对于许多Mac用户来说&#xff0c;运行Windows应用程序是必不可少的。也许你的雇主使用的软件只适用于Windows&#xff0c;或者需要使用依赖于某些Windows技术的网站。或者你想在Mac上玩Windows游戏。或者&#xff0c;你可能需要在其他操作系统上测试应用程序和服务——你可以在…

【数据结构-图】

目录 1 图2 图的定义和基本概念&#xff08;在简单图范围内&#xff09;3 图的类型定义4 图的存储结构4.1 邻接矩阵 表示法4.2 邻接表 表示法4.3 十字链表 表示法4.4 邻接多重表 表示法 5 图的遍历5.1 深度优先搜索-DFS 及 广度优先遍历-BFS 6 图的应用6.1 最小生成树6.1.1 克鲁…

Azure AKS集群监控告警表达式配置

背景需求 Azure AKS集群中&#xff0c;需要对部署的服务进行监控和告警&#xff0c;需要创建并启用预警规则&#xff0c;而这里怎么去监控每个pod级别的CPU和内存&#xff0c;需要自己写搜索查询 解决方法 搜索和查询的语句如下&#xff0c;需要自己替换其中的部分信息,其中…