Docker教程

 Docker 能解决的问题
⾸先,我们先来看⼏个问题:
1. 合作开发的时候,在本机可以运⾏,在别⼈的电脑上跑不起来。
这⾥我们以 Java Web 应⽤程序为例,⼀个 Java Web 应⽤程序涉及很多东⻄,⽐如 JDK Tomcat Spring 等等。当
这些其中某⼀项版本不⼀致的时候,可能就会导致应⽤程序跑不起来这种情况。 Docker 则将程序直接打包成镜像,
直接运⾏在容器中即可。
2. 服务器⾃⼰的程序挂了,结果发现是别⼈程序出了问题把内存吃完了,⾃⼰程序因为内存不够就挂了。
这种也是⼀种⽐较常⻅的情况,如果你的程序重要性不是特别⾼的话,公司基本上不可能让你的程序独享⼀台服务
器的,这时候你的服务器就会跟公司其他⼈的程序共享⼀台服务器,所以不可避免地就会受到其他程序的⼲扰,导
致⾃⼰的程序出现问题。 Docker 就很好解决了环境隔离的问题,别⼈程序不会影响到⾃⼰的程序。
3. 测试阶段能运⾏和上线出现问题。
开发阶段部署⼀套软件环境,测试⼈员在开发中测试没有问题,运维进⾏部署(同⼀套代码)。但是正式部署到服
务器时,发⽣了问题(启动参数、环境问题、漏配了参数)等意外。
4. 公司要弄⼀个活动,可能会有⼤量的流量进来,公司需要再多部署⼏⼗台服务器。
在没有 Docker 的情况下,要在⼏天内部署⼏⼗台服务器,这对运维来说是⼀件⾮常折磨⼈的事,⽽且每台服务器的
环境还不⼀定⼀样,这时就会出现各种问题,最后部署地头⽪发麻。⽤ Docker 的话,我只需要将程序打包到镜像,
你要多少台服务,我就给你跑多少容器,极⼤地提⾼了部署效率。
5. 微服务环境搭建问题。
随着微服务技术的兴起,⼀个⼤的应⽤需要拆分成多个微服务。多个微服务的⽣成,就会⾯临庞⼤系统的部署效
率,开发协同效率问题。然后通过服务的拆分,数据的读写分离、分库分表等⽅式重新架构,⽽且这种⽅式如果要
做的彻底,需要花费⼤量⼈⼒物⼒。可能需要部署很多个服务器。
6. 容器版本管理。
持续的软件版本发布、测试项⽬到线上环境的集成。⽤户可以⽅便地创建和使⽤容器,把⾃⼰的应⽤放⼊容器。容
器还可以进⾏版本管理、复制、分享、修改,就像管理普通的代码⼀样。

为什么使⽤Docker

1. 简化程序
Docker 让开发者可以打包他们的应⽤以及依赖包到⼀个可移植的容器中,然后发布到任何流⾏的 Linux 机器上,便
可以实现虚拟化。 Docker 改变了虚拟化的⽅式,使开发者可以直接将⾃⼰的成果放⼊ Docker 中进⾏管理。⽅便快
捷已经是 Docker 的最⼤优势,过去需要⽤数天乃⾄数周的任务,在 Docker 容器的处理下,只需要数秒就能完成。
2. 避免选择恐惧症
如果你有选择恐惧症,还是资深患者。 Docker 帮你打包你的纠结! Docker 镜像中包含了运⾏环境和配置,所以
Docker 可以简化部署多种应⽤实例⼯作。⽐如 Web 应⽤、后台应⽤、数据库应⽤、⼤数据应⽤,再如 Hadoop
群、消息队列等都可以打包成⼀个镜像部署。
3. 节省开⽀
⼀⽅⾯,云计算时代到来,使开发者不必为了追求效果⽽配置⾼额的硬件, Docker 改变了⾼性能必然⾼价格的思维
定势。 Docker 与云的结合,让云空间得到更充分的利⽤。不仅解决了硬件管理的问题,也改变了虚拟化的⽅式。
4. 持续交付和部署
对开发和运维( DevOps )⼈员来说,最希望的就是⼀次创建或配置,可以在任意地⽅正常运⾏。使⽤ Docker 可以
通过定制应⽤镜像来实现持续集成、持续交付、部署。开发⼈员可以通过 Dockerfile 来进⾏镜像构建,并结合持续
集成( Continuous Integration )系统进⾏集成测试,⽽运维⼈员则可以直接在⽣产环境中快速部署该镜像,甚⾄
结合持续部署( Continuous Delivery/Deployment )系统进⾏⾃动部署。⽽且使⽤ Dockerfile 使镜像构建透明化,
不仅仅开发团队可以理解应⽤运⾏环境,也⽅便运维团队理解应⽤运⾏所需条件,帮助更好的⽣产环境中部署该镜
像。
5. 更轻松的迁移
由于 Docker 确保了执⾏环境的⼀致性,使得应⽤的迁移更加容易。 Docker 可以在很多平台上运⾏,⽆论是物理
机、虚拟机、公有云、私有云,甚⾄是笔记本,其运⾏结果是⼀致的。因此⽤户可以很轻易的将在⼀个平台上运⾏
的应⽤,迁移到另⼀个平台上,⽽不⽤担⼼运⾏环境的变化导致应⽤⽆法正常运⾏的情况。

Docker特点

标准化交付: Docker 将应⽤打包成标准化单元,⽤于交付、部署。
轻量级:容器及包含了软件运⾏所需的所有环境,⽽且⾮常轻量级。
⾼可靠:容器化的应⽤程序,可以在任何 Linux 环境中始终如⼀的运⾏。
隔离性:容器化的应⽤程序,具备隔离性,这样多团队可以共享同⼀ Linux 系统资源。
Docker 安装
1. 切换到 root 账户,并输⼊ root ⽤户密码。
su root
2. 查看电脑上是否已经安装 Docker 软件。
yum list installed | grep docker
3. 如果已经安装过 Docker ,先卸载已安装的 Docker ,执⾏如下命令。如果报告未安装这些包,则没有问题
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest
docker-latest-logrotate docker-logrotate docker-engine
4. 安装所需的软件包。 yum-utils 提供了 yum-config-manager 应⽤,并 device-mapper-persistent-data lvm2
需要 devicemapper 存储驱动程序
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5. 设置 Docker 镜像的仓库,添加软件源信息。
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
7. Docker 要求 CentOS 系统的内核版本⾼于 3.10 ,通过 uname -r 命令查看你当前的内核版本是否⽀持安装
Docker
uname -r
8. 安装 Docker-CE 软件。
docker-ce 表示社区免费版本
yum -y install docker-ce
6. 更新 yum 源。
sudo yum makecache fast
8. 安装 Docker-CE 软件
yum -y install docker-ce
9. 安装后查看 Docker 软件的版本。
docker -v
10. 查看 docker 概要信息。
docker info
11. 查看 docker 帮助⽂档
docker --help
2.3 Docker 守护进程相关命令
1. 启动 docker 服务
systemctl start docker
2. 查看 docker 服务运⾏状态。如果 docker 是在运⾏中,输⼊命令后会看到绿⾊的 " active (running) " 提示。
systemctl status docker
3. 重启 docker 服务。
systemctl restart docker
4. 停⽌ docker 服务。
systemctl stop docker
5. 设置 docker 开机⾃动启动。
systemctl enable docker
6. 禁⽤ Docker 开机⾃动启动。
systemctl disable docker
2.4 Docker 镜像加速器
1. 中科⼤镜像加速器
1. 通过 vim 命令编辑 daemon.json ⽂件(没有时新建该⽂件)。
vim /etc/docker/daemon.json
2. daemon.json ⽂件中输⼊如下内容。
{
"registry-mirrors" : [ "https://docker.mirrors.ustc.edu.cn" ]
}
注意:⼀定要保证该⽂件符合 JSON 规范,否则 Docker 将不能启动。
2. 阿⾥云镜像加速器
1. 访问阿⾥云镜像获取地址: https://promotion.aliyun.com/ntms/act/kubernetes.html
3. 进⼊控制台后,搜索【容器镜像服务】选项。
4. 在打开的容器镜像服务窗⼝中,选择【镜像加速器】选项,复制个⼈的加速器地址。

5. 通过 vim 命令编辑 daemon.json ⽂件(没有时新建该⽂件)。
vim /etc/docker/daemon.json
6. daemon.json ⽂件中输⼊如下内容。
{
"registry-mirrors" : [ "https://icnwj1s9.mirror.aliyuncs.com" ]
}
4. 重新启动服务
 sudo systemctl daemon-reload
 sudo systemctl restart docker
5. 检查加速器是否⽣效
检查加速器是否⽣效配置加速器之后,如果拉取镜像仍然⼗分缓慢,请⼿动检查加速器配置是否⽣效,在命令⾏执
docker info ,如果从结果中看到了如下内容,说明配置成功
$ docker info
...
Registry Mirrors:
https://docker.mirrors.ustc.edu.cn
...
3 Docker 常⽤命令
搜索镜像
docker search tomcat
拉取镜像
docker pull java
注意:受⽹速的影响,上述镜像在下载过程中⽐较缓慢,可能会出现⼀次下载不成功的情况,则重新拉取, 并耐⼼等待。
查看镜像
1. 查看本地镜像列表。
docker images
2. 列出本地镜像中 REPOSITORY ubuntu 的镜像列表。
docker images tomcat
删除镜像
1. 强制删除本地镜像 centos:7
# docker rmi -f centos:7
2.按镜像 ID 删除镜像。
docker rmi 90d5884b1ee0
容器相关命令
查看容器
列出容器。
docker ps
查看停⽌的容器。
docker ps -f status = exited
3.2.2 创建与启动容器
使⽤ nginx 镜像 ID 以后台模式启动⼀个容器,将容器的 80 端⼝映射到主机的 80 端⼝。
docker run -itd --name = mynginx -p 80 :80 fb5657adc892
  3.2.3 启动停⽌重启容器
docker stop :停⽌⼀个运⾏中的容器。
docker start :启动⼀个或多个已经被停⽌的容器。
docker restart :重启容器(重启已经关闭的容器)。
停⽌运⾏中的容器 mynginx
docker stop mynginx
停⽌所有正在运⾏的容器。
docker stop $(docker ps -aq)
启动已被停⽌的容器 mynginx
docker start mynginx
重启容器 mynginx
docker restart mynginx
3.2.4 登录容器
docker exec -i -t mynginx /bin/bash

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于ChatGPT的端到端语音聊天机器人项目实战(三)

企业级ChatGPT开发入门实战 第1课 基于ChatGPT的端到端语音聊天机器人项目实战 Gavin老师:NLP_Matrix_Space 1.4 使用FastAPI构建语音聊天机器人后端实战 在后端代码(backend)中调用了OpenAI API及其他的服务,如图1-10所示。 图1- 10 后端代码调用OpenAI API openai_requ…

Spring Boot 日志的主要组件及其特点

Spring Boot 日志的主要组件及其特点 在开发应用程序时,日志是非常重要的一部分。它可以帮助我们了解应用程序的运行情况,发现并解决问题。在 Spring Boot 中,有许多不同的日志框架可供选择。本文将介绍 Spring Boot 日志的主要组件及其特点…

【MySQL高级篇笔记-索引优化与查询优化(中) 】

此笔记为尚硅谷MySQL高级篇部分内容 目录 一、索引失效案例 二、关联查询优化 1、采用左外连接 2、采用内连接 3、join语句原理 1.驱动表和被驱动表 2.Simple Nested-Loop Join(简单嵌套循环连接) 3.Index Nested-Loop Join(索引嵌套循环连接) 4.Block Nested-Loop J…

CSS面经

1、CSS的BFC 一、何为BFC BFC(Block Formatting Context)格式化上下文,是Web页面中盒模型布局的CSS渲染模式,指一个独立的渲染区域或者说是一个隔离的独立容器。 二、形成BFC的条件 1、浮动元素,float 除 none 以外的值…

WebRTC音视频会议底层支撑技术

WebRTC允许应用使用P2P通信。WebRTC是一个广泛的话题,在本文中,我们将重点讨以下问题。 为什么Web RTC 如此受欢迎? 在P2P连接过程中会发生什么 信号传递 NATs和ICE STUN & TURN服务器 VP9视频编解码器 WebRTC APIs 安全 1.为什…

物联网到底如何实现万物互联?

前言:作为计算机相关专业的你,绝对听说过物联网这个词,它的解释相比你也听过,叫万物互联,也就是所谓的IOT,但是说实话它到底如何实现的万物互联的你可能还真不知道。不是每个物体都有一个网络接口或者实体接…

C++primer(第五版)第三章(字符串、向量和数组)

本章主要介绍了字符串和vector以及数组,但是vector和数组差不多甚至比数组更加强大,完全可以用vector来代替数组,所以尽管书中有介绍数组,但我也不过多记录,有兴趣的小伙伴可以自行查看原书。 3.1命名空间的using声明…

FreeRTOS_列表和列表项

目录 1. 什么是列表和列表项? 1.1 列表 1.2 列表项 1.3 迷你列表项 2. 列表和列表项初始化 2.1 列表初始化 2.2 列表项初始化 3. 列表项插入 3.1 列表项插入函数分析 3.2 列表项插入过程图示 3.2.1 插入值为 40 的列表项 3.2.2 插入值为 60 的列表项 3…

【二】构造函数和原型

ES6(ECMAScript 6.0)之前js没有引入类的概念 在ES6之前,对象不是基于类创建的,而是用一种称为构建函数的特殊函数来定义对象和它们的特征 ES6之前创建对象可以通过以下三种方式创建对象: 对象字面量: v…

【Spring AOP】面向切面编程,面向切面编程是面向对象编程的孪生兄弟嘛?且听我细细道来! ! !

前言: 大家好,我是良辰丫,面向切面编程和面向对象编程是两种几乎不同的编程方式,并不是所谓的孪生兄弟,但是我们可以说面向切面编程是面向对象编程的一种补充和完善,到底是什么意思呢?请跟随良辰的步伐往下瞧! ! !💌💌💌 🧑个人主…

TypeScript ~ 掌握基本类型 ①

作者 : SYFStrive 博客首页 : HomePage 📜: TypeScript ~ TS 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &…

Redis原理 - IO详解

原文首更地址,阅读效果更佳! Redis原理 - IO详解 | CoderMast编程桅杆https://www.codermast.com/database/redis/redis-IO.html 用户空间与内核空间 任何Linux 系统的发行版,其系统内核都是 Linux 。我们的应用都需要通过 Linux 内核与硬…

怎么给PDF添加图片水印?其实很简单,看这篇就会了!

许多人都意识到版权问题的重要性,尽管在日常生活中我们可能很少遇到,但在办公和学习中却经常涉及到此类问题。例如,我们辛辛苦苦制作的PDF文件,如何确保不被他人盗用呢?这就涉及到如何为PDF添加图片水印的问题,相当于…

经典基于外观的SLAM框架-RTABMAP(RGBD视觉输入方案)

经典基于外观的SLAM框架-RTABMAP 文章目录 经典基于外观的SLAM框架-RTABMAP1. RTABMAP整体框架2.RTABMAP的内存管理机制3. 视觉里程计4. 局部地图5. 回环检测与图优化6. 代码工程实践 1. RTABMAP整体框架 RTABMAP是采用优化算法的方式求解SLAM问题的SLAM框架,本赛题…

【python 第三方库安装换源】

换源: pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/其他国内第三方库的下载源地址: 阿里云:http://mirrors.aliyun.com/pypi/simple/ 科技大学:https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣&a…

Vue实例知识点分享

文章目录 导文下面是创建 Vue 实例的基本步骤 常用的 Vue 实例方法和属性总结 导文 Vue的实例是用来创建 Vue 应用程序的对象。通过实例化 Vue 构造函数,我们可以创建一个具有响应式数据、计算属性、方法和生命周期钩子等特性的 Vue 实例。 下面是创建 Vue 实例的基…

python技术分享

文章目录 python介绍应用领域环境搭建基础知识编程工具变量基本数据类型容器数据类型程序结构运算符函数类 技巧总结python内存管理python常用技术python的缺陷优化python的编码规范提升性能总结 python介绍 弱类型的语言 声明一个变量,直接赋值即可,简…

Android强大的原生调试工具adb的常用命令

文章目录 ADB简介常用命令列出链接的设备进入设备的shell环境设备日志安装应用程序卸载应用程序将本地文件复制到调试设备上将设备上的文件拉取到本地启动程序强制停止程序运行截图屏幕录制列出调试设备所有的应用的报名 结语 ADB简介 ADB(Android Debug Bridge&am…

【从零开始学习JAVA | 第二十一篇】常见API介绍 System

目录 前言: System: System类中静态方法: 总结: 前言: system 是一个很底层的 API,是一个工具类,提供了一些与系统相关的方法。他在我们写项目的时候提供了一些非常实用的方法,本…

量子机器学习Variational Quantum Classifier (VQC)简介

变分量子分类器(Variational Quantum Classifier,简称VQC)是一种利用量子计算技术进行分类任务的机器学习算法。它属于量子机器学习算法家族,旨在利用量子计算机的计算能力,潜在地提升经典机器学习方法的性能。 VQC的…