docker技术(上)

news2024/11/15 10:50:45

一、docker简介

  Docker 是一个开源的应用容器引擎,于 2013 年由 Solomon Hykes 推出并开源。它基于 Go 语言开发,遵从 Apache2.0 协议。Docker 可以让开发者将应用及其依赖包打包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows 机器上。

  Docker 构建在 LXC(Linux Containers)之上,是一种轻量级的虚拟化技术。与传统虚拟机相比,Docker 容器更加轻量级,启动速度通常只需几秒钟,资源占用少,一台主机上可以同时运行数千个 Docker 容器。

Docker 容器具有以下特点:

  • 文件系统隔离:每个进程容器运行在完全独立的根文件系统里。
  • 资源隔离:可以使用 cgroup 为每个进程容器分配不同的系统资源,如 CPU 和内存。
  • 网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和 IP 地址。
  • 写时复制:采用写时复制方式创建根文件系统,部署快捷,节省内存和硬盘空间。
  • 日志记录:收集和记录每个进程容器的标准流,用于实时检索或批量检索。
  • 变更管理:容器文件系统的变更可以提交到新的映像中,重复使用以创建更多容器,无需模板或手动配置。
  • 交互式 Shell:可以分配一个虚拟终端并关联到任何容器的标准输入上。

  Docker 的发展历程分为起源阶段和发展阶段。起源阶段是 2008 年至 2013 年,由 Solomon Hykes、Kamel Founadi 和 Sebastien Pahl 在巴黎创立了 DotCloud 公司,旨在为软件开发人员提供云托管服务,2013 年推出了工具 Docker 并开源。发展阶段是 2014 年至 2016 年,Docker 引入了 Docker Compose 和 Docker Swarm,成立了 Docker 开放容器倡议(OCI),推出了 Docker for Mac 和 Docker for Windows 等。

  Docker 在现代软件开发和部署中具有重要作用,它可以简化配置、管理代码流水线、提高开发效率、提供一致的运行环境、优化资源利用、具有良好的隔离性和安全性、可移植性和跨平台性,易于扩展和管理。在 DevOps 和持续集成 / 持续部署(CI/CD)、微服务架构等领域有广泛应用。

docker与虚拟机对比

二、docker的部署

本实验在rhel9环境下配置

配置软件仓库

# cd /etc/yum.repos.d

# vim docker.repo

[docker]

name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/

gpgcheck=0

传输并下载软件包

[root@docker-node1 ~]# ls
anaconda-ks.cfg  docker.tar.gz
[root@docker-node1 ~]# tar zxf docker.tar.gz
[root@docker-node1 ~]# ls
anaconda-ks.cfg                               docker-ce-cli-27.1.2-1.el9.x86_64.rpm
containerd.io-1.7.20-3.1.el9.x86_64.rpm       docker-ce-rootless-extras-27.1.2-1.el
docker-buildx-plugin-0.16.2-1.el9.x86_64.rpm  docker-compose-plugin-2.29.1-1.el9.x8
docker-ce-27.1.2-1.el9.x86_64.rpm             docker.tar.gz
[root@docker-node1 ~]# dnf install *.rpm -y

注意:rhel9下载时需要删除runc软件包

[root@docker-node1 ~]# yum remove runc

 

[root@docker-node1 ~]# docker pull busybox
Using default tag: latest
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: reque connection (Client.Timeout exceeded while awaiting headers)
由于网络不佳,拉取镜像源超时

在阿里云查找镜像加速器,并写入配置文件 

[root@docker-node1 docker]# vim daemon.json

再次尝试拉取镜像源

也可使用下载好的安装包拉去,效率更快

[root@docker-node1 ~]# ls 
anaconda-ks.cfg
busybox-latest.tar.gz
containerd.io-1.7.20-3.1.el9.x86_64.rpm
docker-buildx-plugin-0.16.2-1.el9.x86_64.rpm
docker-ce-27.1.2-1.el9.x86_64.rpm
docker-ce-cli-27.1.2-1.el9.x86_64.rpm
docker-ce-rootless-extras-27.1.2-1.el9.x86_64.rpm
docker-compose-plugin-2.29.1-1.el9.x86_64.rpm
docker.tar.gz
game2048.tar.gz
mario.tar.gz
nginx-latest.tar.gz

[root@docker-node1 ~]# docker images
REPOSITORY           TAG       IMAGE ID       CREATED         SIZE
nginx                latest    5ef79149e0ec   5 weeks ago     188MB
busybox              latest    65ad0d468eb1   16 months ago   4.26MB
timinglee/game2048   latest    19299002fdbe   7 years ago     55.5MB
timinglee/mario      latest    9a35a9e43e8c   9 years ago     198MB

 运行nginx镜像源

[root@docker-node1 ~]# docker run -d --rm --name webserver -p 80:80 nginx 
09c091e024d1aab16af31ffc3e16f0ad1667cebee1d464fffc3771422b816a53
[root@docker-node1 ~]# docker rm -f webserver
webserver
[root@docker-node1 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 

[root@docker-node1 ~]# docker run -d --rm --name game1 -p 80:80 timinglee/game2048:latest
414bffb6699f4137590a0abf9c038629dda009d2e601916d2bd7a52953007b7c
[root@docker-node1 ~]# docker rm -f game1
game1

 

[root@docker-node1 ~]# docker run -d --rm --name game2 -p 80:8080 timinglee/mario:latest
28073e3277f38fdec2bae5cb1085bb02fbaae152f4e075880910d39960e147b2

 进入到容器并退出

[root@docker-node1 ~]# docker run -it --name test busybox
/ # 
/ # date
Sat Sep 21 03:26:30 UTC 2024
/ # exit
[root@docker-node1 ~]# docker rm test
test
[root@docker-node1 ~]# docker ps
CONTAINER ID   IMAGE                    COMMAND                   CREATED  

在容器中执行命令 

相关参数
-d # 后台运行
-i # 交互式运行
-t # 打开一个终端
--name # 指定容器名称
-p # 端口映射 -p 80 : 8080 把容器 8080 端口映射到本机 80 端口
--rm # 容器停止自动删除容器
--network # 指定容器使用的网络

 

 

三、docker镜像构建 

构建参数

 相关参数示例:

[root@docker-node1 docker]# mkdir docker/
[root@docker-node1 docker]# cd docker/
[root@docker-node1 docker]# ls
[root@docker-node1 docker]# vim Dockerfile

 构建一个基础镜像

 注意不要忘记符号“.”

指定文件名
docker build -f /root/docker/timingle -t busybox:v4 .
[root@docker-node1 docker]# vim Dockerfile

 可替代参数LABEL KEY=VALUE

 此时,没有警告出现

#ADD 
[root@Docker-node1 docker]#touch leefile{1..3} 
[root@Docker-node1 docker]#tar zcf leefile.gz leefile* 
[root@Docker-node1 docker]#vim Dockerfile
FROM busybox 
MAINTAINER lee@timinglee.org
COPY leefile /
ADD leefile.gz / 
[root@Docker-node1 docker]#docker build -t example:v2
#ENV CMD
FROM busybox 
MAINTAINER ee@timinglee.org 
ENV NAME lee 
[root@Docker-nodel docker]# docker run -it --rm --name test example:v3 1ee 
FROM busybox 
MAINTAINER lee@timinglee.org 
ENV NAME lee 
CMD ["/bin/echo", "$NAME"] 
[root@Docker-nodel docker]# docker run -it --rm --name test example:v3 $NAME
#ENV CMD 
FROM busybox 
MAINTAINER lee@timinglee.org 
ENV NAME lee 
CMD ["/bin/sh","-c","/bin/echo $NAME"]
[root@Docker-nodel docker]# docker run -it --rm --name test example:v3 lee

 Dockerfile构建企业实例

使用centos7系统

[root@docker-node1 ~]# docker run -it --rm centos:7
[root@a43e892b111a /]# ls
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                etc  lib   media  opt  root  sbin  sys  usr
[root@a43e892b111a ~]# cd /etc/yum.repos.d/
[root@a43e892b111a yum.repos.d]# rm -fr *
[root@a43e892b111a yum.repos.d]# ls
[root@a43e892b111a yum.repos.d]# vi centos.repo
[root@a43e892b111a ~]# [root@docker-node1 ~]# 
[root@docker-node1 ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS         PORTS     NAMES
a43e892b111a   centos:7   "/bin/bash"   8 minutes ago   Up 8 minutes             sweet_dirac
[root@docker-node1 ~]# dnf install httpd -y
[root@docker-node1 ~]# vim /etc/httpd/conf/httpd.conf
[root@docker-node1 ~]# mkdir /var/www/html/centos7
[root@docker-node1 ~]# mount /dev/sr0 /var/www/html/centos7/
mount: /var/www/html/centos7: WARNING: source write-protected, mounted read-only.
[root@docker-node1 ~]# ls
anaconda-ks.cfg                               docker-ce-rootless-extras-27.1.2-1.el9.x86_64.rpm
busybox-latest.tar.gz                         docker-compose-plugin-2.29.1-1.el9.x86_64.rpm
centos-7.tar.gz                               docker.tar.gz
containerd.io-1.7.20-3.1.el9.x86_64.rpm       game2048.tar.gz
docker-buildx-plugin-0.16.2-1.el9.x86_64.rpm  mario.tar.gz
docker-ce-27.1.2-1.el9.x86_64.rpm             nginx-1.23.tar.gz
docker-ce-cli-27.1.2-1.el9.x86_64.rpm         nginx-latest.tar.gz

 

[root@docker-node1 centos7]# docker run -it --rm centos:7
[root@4f451ce23f5b /]# [root@docker-node1 centos7]# docker run -it --rm centos:7
[root@825c0ee01010 /]# [root@docker-node1 centos7]# 
[root@docker-node1 centos7]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
825c0ee01010   centos:7   "/bin/bash"   12 seconds ago   Up 12 seconds             serene_cori
4f451ce23f5b   centos:7   "/bin/bash"   27 seconds ago   Up 27 seconds             sweet_jang
[root@docker-node1 centos7]# docker rmi 825c0ee01010
Error response from daemon: No such image: 825c0ee01010:latest
[root@docker-node1 centos7]# docker commit -m "add repo" serene_cori centos7:v1
sha256:7817b85b46b3ea33d9d98762adb6cb72cd5fb3a600742ef69fff8c0aa9a4a81b
[root@docker-node1 centos7]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS         PORTS     NAMES
825c0ee01010   centos:7   "/bin/bash"   5 minutes ago   Up 5 minutes             serene_cori
4f451ce23f5b   centos:7   "/bin/bash"   5 minutes ago   Up 5 minutes             sweet_jang

 

 

 

 

 

 

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

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

相关文章

文件外发控制怎么做?公司文件外发管控的方法(这五种方法你一定要学会!)

还在担心重要文件发出去就"人间蒸发"? 或者每次发送公司机密都提心吊胆? 其实,文件外发就像放风筝,你需要时刻握住“线头”,确保它不会飞得太远! 今天我们来揭秘五种公司文件外发的神级管控方法…

基于SpringBoot的医院挂号就诊系统【附源码】

基于SpringBoot的高校社团管理系统(源码L文说明文档) 目录 4 系统设计 4.1界面设计原则 4.2功能结构设计 4.3.2 数据库物理设计 第5章 系统实现 5.1用户信息管理 5.2 医生信息管理 5.3公告类型管理 5.1公告信息管理 4…

C++进阶(2):多态

多态的概念 多态分为编译时多态(静态多态)和运行时多态(动态多态)。**编译时多态:**主要就是我们前面讲的函数重载和函数模版。之所以叫编译时多态,是因为实参传给形参的参数匹配是发生在编译时完成的(ps:通常把编译时一般归为静…

常见项目场景题1(数据量很大时如何去重,实现超时处理)

数据很多,限制内存,如何去重 对于大数据量去重的场景,我们可以考虑使用位图(Bitmap) Bitmap 是使用二进制来表示某个元素是否存在的数组。用0和1来表示存在与不存在 使用Bitmap的话,一个数字占用1bit,大大减少内存消耗…

JVM 调优篇8 调优案例5- 逃逸分析

一 逃逸分析 1.1 概念 逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,对象只在方法内部使用,则认为没有发生逃逸。当一个对象在方法中被定义后,它被外部方法所引用,则认为发生逃逸。例如作为…

打造未来企业:业务能力建模的实践应用与数字化转型的落地策略

在当今数字化迅速发展的时代,企业的转型迫在眉睫。通过数字技术提升运营效率、增强客户体验、优化资源配置成为了企业竞争的核心战略。《业务能力指南》为企业提供了清晰的业务能力建模框架,并指导企业如何将其应用于实际操作中,帮助企业在数…

(三)代码实现:Boustrophedon Cellular Decomposition Path Planning用珊格地图生成每个cell的覆盖路径

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言算法原理方法一:全地图进行牛耕覆盖步骤方法二:区域分解地图进行牛耕覆盖步骤凸多边形基于栅格地图的…

Windows系统文件夹中的文件名排序

一天张三、李四的同事周五接到王哥的一个任务需求,有一个文件夹,里面有许多图片文件,网页访问某个分类展示文件的时候,王哥希望文件名的展示顺序可以按照Windows资源管理器中文件名升序排序的方式展示。 网站图片目录中有如下图片…

程序遇到问题错误bug时的13种解决方法途径总结以及之前的一些具体例子

目录 1 信心--没有解决不了的bug 2 耐心、不要着急、静下心来、用脑思考 2.1 开始解决问题前不要着急,先思考 2.2 在解决问题的过程中也不要着急,要冷静思考 3 网络搜索 4 大模型问答:必应、kimi、通义千问、文心一言 5 看芯片手册、S…

0921VGG网络实现

深度学习之VGG网络搭建 1.VGG动机2.VGG架构3.代码4.结论1.VGG动机 随着卷积网络在计算机视觉领域的快速发展,越来越多的研究人员开始通过改变模型的网络结构在提高在图像识别任务中的精度,例如使用更小的卷积核和步长[2]。基于类似的想法,论文作者提出可以尝试通过改变卷积…

【设计模式】创建型模式(三):单例模式

创建型模式(三):单例模式 1.概念2.案例3.实现方式3.1 懒汉式,线程不安全3.2 懒汉式,线程安全3.3 饿汉式3.4 双检锁/双重校验锁(DCL,Double-Checked Locking)3.5 登记式/静态内部类3.…

俄罗斯OZON新生儿产品好不好卖,OZON新生儿产品

Top1 遥控水球坦克 Танк на радиоуправлении стреляющий орбизами PANAWEALTH 商品id:1384249985 月销量:692 欢迎各位OZON卖家朋友点击这里选品: 👉 D。DDqbt。COm/74rD 遥控射击水…

【项目管理进阶】风险问题

前言 各位盆友,你们期待的项目管理进阶系列有新的消息,请注意查收,并反馈哦~ 在参加项目的过程中,你是否面临或参加过类似如下的场面: 为了立项,先调研市场、技术、社会、组织内部的现状为了科学的管理项目…

如何使用Claude进行Android App开发 —— 基于Jetpack和Compose的电影App实例

如何使用Claude进行Android App开发 —— 基于Jetpack和Compose的电影App实例 近年来,人工智能(AI)在软件开发中的应用越来越广泛,帮助开发者在设计、编码、测试和优化中提高生产效率。Claude是Anthropic开发的一款强大的AI助手&…

Redis的三种持久化方法详解

Redis持久化机制详解 | JavaGuide Redis 不同于 Memcached 的很重要一点就是,Redis 支持持久化,而且支持 3 种持久化方式: 快照(snapshotting,RDB)只追加文件(append-only file, AOF)RDB 和 A…

Vue使用axios二次封装、解决跨域问题

1、什么是 axios 在实际开发过程中,浏览器通常需要和服务器端进行数据交互。而 Vue.js 并未提供与服务器端通信的接口。从 Vue.js 2.0 版本之后,官方推荐使用 axios 来实现 Ajax 请求。axios 是一个基于 promise 的 HTTP 客户端。 关于 promise 的详细介…

C++:类和对象OJ题

目录 一、求123...n 二、计算日期到天数的转换 三、日期差值 四、打印日期 一、求123...n 这里先把题目链接放在这里求123.....n 描述: 求123...n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C…

鸿萌数据恢复服务: 修复 Windows, Mac, 手机中 “SD 卡无法读取”错误

天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据恢复、数据备份解决方案与服务,并针对企业面临的数据安全风险,提供专业的相关数据安全培训。 公司是多款国际主流数据恢复软件的授权代理商,为…

老年人养生之道:岁月静好,健康常伴

老年人养生之道:岁月静好,健康常伴 随着年岁的增长,老年人更需注重养生,以维持身心的和谐与健康,享受幸福晚年。养生不仅是一种生活态度,更是一种智慧的选择,它涵盖了饮食、运动、心理、社交等…

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(一)-概述

简介 此前的专栏介绍Onesearch1.0和2.0,详情参考4 参考资料,本文解释onesearch 3.0,从Elasticsearch6升级到Elasticsearch8代码实现 ,Elasticsearch8 废弃了high rest client,使用新的ElasticsearchClient,…