首页 > 其他分享 >学习Docker

学习Docker

时间:2023-06-05 23:46:41浏览次数:49  
标签:容器 -- Register 学习 镜像 Docker docker

目录

一、Docker介绍

什么是Docker

Docker是一个开源的应用容器引擎,基于 GO语言并遵从Apache2.0协议开源。

Docker可以让开发者打包他们的应用以及依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化

容器是完全使用沙箱机制,相互之间不会有任何接口(类似iphone的App),更重要的是容器性能开销极低。

为什么用Docker

  1. 简化程序

    Docker让开发者可以打包他们的应用以及依赖的一个可移植的容器中,然后发布到任何流行的Linux机器上,Docker改变了虚拟化的方式。这个开发者可以直接将自己的成果放入docker中进行管理。方便快捷已经是Docker的最大优势。过去需要用数天乃至数周的任务。在容器的处理下,只需要数秒就能完成。

  2. 避免选择恐惧症

    如果你有选择恐惧症,还是资深患者docker帮你打包你的纠结!比如docker镜像;docker镜像中包含了运行环境和配置。所以docker可以简化部署多种应用实例工作。比如web应用,后台应用,数据库应用,大数据应用。比如Hadoop的集群、消息队列等等都可以打包成一个镜像部署。

  3. 节省开支

    一方面,云计算时代的到来。开发者不必为了追求效果而配置高的硬件。Docker改变了高性能必然高价格的思维定势。docker与云的结合。让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

  4. 持续交付和部署

    对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置。可以在任意地方正常运行。使用docker可以通过定制运用镜像来实现持续集成、持续交付、部署开发人员可以通过dockerfile进行镜像构建。并结合持续集成(Continuous Integration)系统进行集成测试。而运维人员则可以直接在生产环境中快速部署该镜像。甚至结合持续部署(Continuous Delivery/Deployment)系统进行自动部署。而且使用dockerfile镜像构建透明化。不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件。帮助更好的生产环境中部署该镜像。

  5. 更轻松的迁移

    由于docker确保了执行环境的一致性,使得应用的迁移更加容易。docker可以在很多平台上运行。无论是物理机,虚拟机,公有云,私有云甚至是笔记本。其运行结果都是一致的。因此用户可以很轻易的将一个平台上运行的应用迁移到另一个平台上。而不用担心运行环境的变化导致应用无法正常运行的情况。

Docker的应用场景

  • web应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。
  • 从头编译或者扩展现有的OpenShift或Clound Foundry平台来搭建自己的PaaS环境。

云计算·大数据时代

开发一套应用程序、服务器(Linux)、安装开发工具包(JDK Tomcat mysql rabbitMQ Redis Solr)
Iaas:(Infrastructure as a Service)(基础设施即服务)
阿里云、百度云、腾讯云、华为云
Iaas:(服务器):开发一套应用程序代码,安装开发环境工具包。

Paas:(Platform as a Service)(平台即服务)
Paas:服务器加安装开发环境工具包。只需要开发一套应用程序代码。

Saas:(Software as a Service)(软件即服务)
Saas:服务器+安装开发环境工具包+代码。只需要花钱购买服务即可。

Docker和虚拟机总结

  1. 实现原理和技术不同

    虚拟机是用来进行硬件资源划分的完美解决方案。利用的是硬件虚拟化技术。比如VT-x、AMD-V会通过一个Hypervisor层来实现对资源的彻底隔离。

    而龙系则是操作系统级别的虚拟化。利用的是内核的Cgroup和Namespace特性,此功能通过软件来实现,仅仅是进程本身就可以实现相互隔离,不需要任何辅助。

  2. 使用资源方面不同

    Docker容器与主机共享操作系统内核不同的容器之间可以共享部分系统资源。因此更加轻量级,消耗的资源更少。

    虚拟机会独占分配给自己的资源,不存在资源共享。各个虚拟机之间近乎完全隔离,更加轻量级,也会消耗更多的资源。

  3. 应用场景不同

    若需要资源的完全隔离,并且不考虑资源的消耗,可以使用虚拟机。

    若是想隔离进程并且需要运行大量进程实例,应该选择Docker容器。

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般为几十个

Docker总结

  • Docker是世界上领先的软件容器平台。
  • 使用Google公司推出了Go语言进行开发实现,基于Linux内核的Cgroup,namespace以及AUFS类的。UnionFS等技术。对进程进行封装隔离。属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其他的隔离进程,因此也称其为容器。Docker最初实现是基于LXC。
  • Docker能够自动执行重复性任务。例如搭建和配置开发环境。从而解放了开发能源,以便于他们专注在真正重要的事情上。—— 构建杰出的软件。
  • 用户可以方便的创建和使用容器。把自己的应用放入容器。容器还可以进行版本管理,复制,分享,修改。就可以像管理普通的代码一样。
  • Docker的镜像提供了除内核外完整的运行环境。确保了应用运行环境一致性。从来都不会再出现环境不一致带来的问题。—— 一致的运行环境
  • 可以做到秒级,甚至毫秒级的启动时间,大大的节约了开发、测试、部署的时间。——更快的启动时间
  • 避免公用的服务器资源会容易受到其他用户的影响。—— 隔离性
  • 善于处理集中爆发的服务器使用压力。—— 弹性伸缩,快速扩展
  • 可以很轻易的将在一个平台上运行的应用迁移另一个平台上,从而不用担心运行环境的变化导致应用无法正常运行的情况。—— 迁移方便
  • 使用Docker可以通过定制应用镜像来实现持续集成,持续交付部署。—— 持续交付和部署

二、Docker架构

简介

Docker基本概念

docker包括三个基本概念

  • 镜像(Image)

  • 容器(Container)

  • 仓库(Repository)

    理解了这三个概念,就理解了docker的整个生命周期。

Docker引擎

Docker引擎组件的流程如下图所示:

docker引擎

docker使用客户端服务器(C/S)架构模式。使用远程API来管理和创建docker容器。

docker容器通过docker镜像来创建

Docker架构

容器与镜像的关系类似于面向对象编程中的对象与类。

Docker 面向对象
容器 对象
镜像

Docker镜像(Images) Docker进校是用于创建docker镜像的模板。
Docker容器(Container) 容器是独立运行的一个或一组应用。
Docker客户端(Client) Docker客户端,通过命令行或者其他工具使用docker API与docker的守护进程通信。
Docker主机(Host) 一个物理或虚拟机的机器用于执行docker守护进程和容器。
Docker仓库(Registry) Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub提供了庞大的镜像集合提供使用。
Docker Machine Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、Digital Ocean、Microsoft Azure。

Docker镜像

是一个存储现象的仓库。通常被部署在互联网服务端或云端。

hub.docker.com提供了庞大的镜像机和供使用。

分层存储

Docker容器

三、Docker仓库

公有Docker Register

Docker Register公开服务是开放给用户使用,允许用户管理镜像的Register服务。在这里公开服务,允许用户免费上传下载公开的镜像。并可能提供收费服务供用户管理私有镜像。

最常使用的Register公开服务是官方的Docker Hub ,这也是默认的Register,并拥有大量的高质量的官方现象,除此以外,还有CoreOSQuay.io CoreOS相关镜像存储在这里;Google的Google Container Registry,Kuberntes的镜像使用的就是这个服务。

由于某些原因,在国内访问这些服务可能会比较慢。国内的一些云服务提供商针对docker hub的镜像服务(Register Mirror)。这些镜像服务被称为加速器。常见的有阿里云加速器。Dao cloud加速器等。使用加速器会直接从国内的地址下载docker hub镜像,比直接从docker hub下载速度会提高很多。

那也有一些云服务商提供类似于docker hub的公开服务,例如时速云镜像仓库,网易云镜像服务。DaoCloud市场,阿里云镜像库等。

私有Docker Register

除了使用公开服务外,用户还可以在本地搭建私有Docker Register,Docker官方提供了Docker Register 镜像,可以直接使用作为私有Register服务。

开源的Docker Register镜像只提供了过了Docker Register API的服务实现。是以支持Docker命令,经常使用,但不包含图形界面以及镜像维护,用户管理,访问控制的高级功能。在官方的商业化版本Docker Trusted Register中。提供了这些高级功能。

除了官方外的Docker Register,还有第三方软件实现了Docker Register API。甚至提供了用户界面以及一些高级功能,比如VMWare HarborSonatype Nexus

四、Docker安装

  1. 检验版本

    uname -r 检验linux内核版本(3.10以上版本)

    从2017年3月开始。Docker在原来的基础上分为两个分支版本。docker CE和docker EE,docker CE即社区免费版docker EE即企业版强调安全,但需付费使用。本文介绍docker CE的安装使用。

官方网址Install Docker Engine on CentOS | Docker Documentation

  1. 卸载旧版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docke-engine;

如果yum报告未安装这些软件包,则可以。

  1. 安装一些必要的系统工具

安装所需的软件包。yum-utils提供了yum-config-manager应用,并device-mapper-persistent-datalvm2由需要devicemapper存储驱动程序。

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 添加软件源信息

源1:(官方推荐)

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

源2:(阿里云源)

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. 更新yum缓存:
sudo yum makecache fast
  1. 安装Docker-CE
sudo yum -y install docker-ce
  1. 启动Docker后台服务
sudo systemctl start docker
  1. 重启Docker服务
sudo systemctl restart docker

卸载

执行以下命令来删除docker-CE

sudo yum remove docker-ce
sudo rm -rf /var/lib/docker

五、Docker镜像加速器

鉴于国内网络问题,后续拉取Docker镜像十分缓慢,我们可以需要配置加速器来解决。

使用Docker的时候,需要经常从官方获取镜像。但是由于显而易见的网络原因,拉取镜像的过程非常耗时,严重影响使用Docker的体验。因此DaoCloud推出了加速器工具,解决这个难题。通过智能路由和缓存机制极大提升了国内镜像访问Docker Hub的速度。目前已经拥有了广泛的用户群体。并得到了Docker官方的大力推荐。如果您在国内网络环境使用Docker,那么Docker加速器一定能够帮助到你。

Docker官方和国内很多云服务商都提供了国内加速器服务。例如:

Docker官方加速器

https://docs.docker.com/registry/recipes/mirros/#use-case-the-china-registry-mirros

通过命令查看:在/etc/docker/daemon.json中写如下内容(如果文件不存在,请新建该文件。)

cd /etc/docker

vi daemon.json

{
    "registry-mirrors":["https://registry.docker-cn.com"]
}

注意,一定要保证该文件符合json规范。否则Docker将不能启动。

阿里云加速器

https://cr.console.aliyun.com/cn-hangzhou/instances/mirros

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<- 'EOF'
{
    "registry-mirrors":["https://gxeo3yz7.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

重启Docker

systemctl daemon-reload
systemctl restart docker

检查加速器是否生效

配置加速器之后,如果拉取镜像仍然十分缓慢。请手动检查加速器配置是否生效。

在命令行执行docker info。查看镜像地址是否匹配,如匹配说明配置成功。

docker info

测试

从docker中下载镜像

docker pull tomcat

发现下载速度明显加快

六、Docker镜像

镜像是Docker的三大组件之一。

Docker形容器前需要本地存在对应的镜像。如果本地不存,Docker会从镜像仓库下载。

本节将介绍更多关于镜像的内容,包括:

从仓库获取镜像。

管理本地主机的镜像。

介绍镜像实现的基本原理。

Docker命令使用

获取命令行帮助信息直接在命令行内输入Docker命令后敲回车。

Docker获取镜像

之前提到过。Docker Hub上有大量高质量的镜像可以用。这里我们说一下怎么获取这些镜像。

查找镜像

可以从Docker Hub网站来搜索镜像。地址https://hub.docker.com/

我们也可以使用Docker search命令来搜索镜像,以Tomcat为例:

docker search tomcat

拉取镜像

docker pull tomcat:版本号  //不写:版本号 代表latest版本

Docker列出镜像

docker images

docker image ls

[root@master ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 17 months ago 141MB
tomcat latest fb5657adc892 17 months ago 680MB

列表包含了仓库名、 标签、 镜像ID、 创建时间、 占用的空间

Docker删除本地镜像

语法:

docker image rm [选项] <镜像> [<镜像2>......]

用ID、镜像名、摘要删除镜像

其中,<镜像>可以是镜像短ID、镜像长ID、镜像名或者镜像摘要

如果要删除本地的镜像,可以使用 docker image rmi/rm命令

docker image rmi 镜像ID  

要删除镜像必须确认此镜像目前没有被任何容器使用。

Docker其他辅助命令

查看本地镜像的 IMAGE ID

docker images -q

看一个镜像的制作历程。

docker history 镜像名称

Docker保存镜像

备份本地仓库的镜像。

  1. 用save子将本地仓库的镜像保存当前目录下。

    docker save -o tomcat.guo.tar 镜像名称
    
  2. 将本地目录下的镜像备份文件导入到本地Docker仓库。

    #方式一(不输出详细信息)
    docker load -i tomcat.guo.tar
    
    #方式二(输出详细信息)
    docker load < tomcat.guo.tar
    

七、Docker容器

下面将具体介绍如何管理一个容器。包括创建,启动和停止等。

1. 查看容器状态

docker ps  //查看运行的容器
docker ps -a  //查看所有的容器(包含运行和退出)
docker container ls
docker container ls -a

2. Docker启动容器

启动容器有两种方式。一种是基于镜像新建一个容器并启动。另一种是将在终止状态(stopped)的容器重新启动。

docker run 参数 镜像名称:tag 执行的命令

常用参数

-i 保持docker容器的交互,启动容器时,运行的命令结束后,容器依然存活,没有退出。(默认是会退出,即停止的)
-t 为容器的标准输入虚拟一个tty
-d 后台运行容器
--rm 容器在启动后,执行完成命令或程序后就销毁。
--name 给容器一个自定义名称
-p 宿主机:内部端口
docker run --rm -d --name tomcat -p 8080:8080 tomcat

练习1:

运行一个Tomcat容器:

docker run -i-t --name tomcat1 tomcat

3. 查看正在运行的容器

docker ps 

4. 查看所有容器

docker ps -a

5. 停止容器

docker stop 容器ID

停止所有容器

docker stop $(docker ps -a -q)

6. 启动已终止容器

docker start 容器ID

7. 重启已关闭容器

docker restart 容器ID

8. 关闭和删除容器(删除前请停止该容器)

docker rm 容器ID

删除所有容器

docker rm $(docker ps -a -q)

9. Docker守护状态运行

10. Docker进入容器

某些时候需要进入容器进行操作,使用docker exec命令

-i-t参数

docker exec后边可以跟多个参数。这里主要说明-i-t参数。

使用-i参数时,由于没有分配伪终端界面没有我们熟悉的Linux命令提示符。但命令执行结果仍然可以返回。

当参数-i-t一起使用时,这可以看到我们熟悉的Linux命令提示符。

docker exec -it 容器ID (Name) bash

ls -l

cd webapps

mkdir ROOT

cd ROOT

echo 'cxf-java' >> index.html

Docker退出容器

不会导致容器的停止。

exit

11.在宿主机和容器之间交换文件

docker cp [OPTIONS] CONTAINER:PATH LOCALPATH  //容器中 复制到 宿主机
docker cp [OPTIONS] LOCALPATH- CONTAINER:PATH   //宿主机 复制到 容器中
宿主机复制一个图片到容器中:将png图片复制到了容器指定目录下
docker cp xxx.png tomcat:/usr/local/tomcat/webapps/ROOT
将容器内的index.html复制出来,修改在复制回去
docker cp tomcat2:/usr/local/tomcat/webapps/ROOT/index.html /root

八、Docker查看日志

docker logs 容器ID /容器名称

docker logs tomcat8080

docker logs -f -t ==since='2023-05-06' --tail=10 qfjy_exam

--since:参数指定了输出日志开始日期,即只输出指定日期之后的日志。

-f:查看实时日志。

-t:查看日志产生的日期。

-tail=10:查看最后的10条日志。

qfjy_exam:容器名称

docker logs -f --tail=10 容器名称

查看后面10行

docker logs --tail=10 tomcat8080

九、作业案例

十、Docker数据卷

CentOS防火墙端口

开放8080端口(如下命令只针对CentOS7以上)

查看已开放的端口

firewall-cmd --zone=public --list-ports

开启端口:

firewall-cmd --zone=public --add-port=8080/tcp --permanent

关闭端口:

firewall-cmd --zone=public --remove-port=8080/tcp --permanent

开启防火墙

systemctl start firewalld

关闭防火墙

firewalld systemctl stop firewalld service

重启防火墙

firewalld-cmd --reload 

禁止防火墙开机启动

firewalld systemctl disadle firewalld service

标签:容器,--,Register,学习,镜像,Docker,docker
From: https://www.cnblogs.com/cxfbk/p/17459289.html

相关文章

  • 机器学习——分辨真假kunkun
    一、选题背景    人脸识别技术是模式识别和计算机视觉领域最富挑战性的研究课题之一,也是近年来的研究热点。蔡徐坤作为新一代偶像,引人注目,外号鸡哥。真假kunkun识别就是向计算机输入坤坤或着鸡的图像,经过某种方法或运算,得出其结果。识别真假kunkun也受到了广泛地关注。这......
  • 算法学习day42动态规划part04-416
    packageLeetCode.DPpart04;/***416.分割等和子集*给你一个只包含正整数的非空数组nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。*示例:*输入:nums=[1,5,11,5]*输出:true*解释:数组可以分割成[1,5,5]和[11]。**/......
  • 算法学习day43动态规划part05-1049、474、494
    packageLeetCode.DPpart05;/***1049.最后一块石头的重量II*有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。*每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x<=y。那么粉碎的可能结果如下:*如果x=......
  • docker desktop 安装部署及使用
    工作中没有使用过dockerdesktop,不过对docker还是比较了解的。参与的一个大数据管理平台的项目(linux环境),内部使用了docker+k8s技术,所以在测试中会经常使用docker命令来辅助查看一些大数据组件及实例的运行情况。和其他人交流的时候了解到了dockerdesktop软件,看很多公司招人的......
  • 《深入理解Spring Cloud与微服务构建》学习笔记(二十)~配置中心Spring Cloud Config
    本例重新创建项目,构建一个空的mavan工程。一、ConfigServer从本地读取配置文件 新建一个moudleconfig_server,pom添加依赖1.2.<groupId>org.springframework.cloud</groupId>3.<artifactId>spring-cloud-config-server</artifactId>4.</dependency>启动类添加......
  • docker 部署xxx-job
    1拉取镜像:dockerpullxuxueli/xxl-job-admin:2.3.02创建容器:dockerrun-d--privileged-ePARAMS="--spring.datasource.url=jdbc:mysql://1.15.242.247:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=UTC--s......
  • win10,vs2015深度学习目标检测YOLOV5+deepsort C++多目标跟踪代码实现,源码注释,拿来即
    int8,FP16等选择,而且拿来即用,自己再win10安装上驱动可以立即使用,不用在自己配置,支持答疑。自己辛苦整理的,求大佬打赏一顿饭钱。苦苦苦、平时比较比忙,自己后期会继续发布真实场景项目;欢迎下载。优点:1、架构清晰,yolov5和sort是分开单独写的,可以随意拆解拼接,都是对外接口。2、支持答疑......
  • 机器学习——识别抽烟者与不抽烟者
    选题背景《中国吸烟危害健康报告(2012版)》的基础上,修订完成了《中国吸烟危害健康报告2020》,报告重点更新了吸烟和二手烟暴露的流行情况及危害健康的证据,特别是与呼吸系统疾病、恶性肿瘤、心脑血管疾病、糖尿病“四大慢病”的关系,同时新增了电子烟对健康的危害内容。所以面对抽烟问......
  • python学习框架
    Python简介与安装Python的历史与特点Python的安装与配置Python基础语法变量与数据类型运算符与表达式控制结构(条件判断与循环)函数与模块错误处理与异常Python数据结构列表(List)元组(Tuple)集合(Set)字典(Dictionary)Python面向对象编程类与对象继承与多态封......
  • Golang高性能编程--slice的学习总结
    在go语言中,数组变量属于值类型,因此当一个数组变量被复制或者传递时,实际上会复制整个数组。eg,将a赋值给b,修改a中的元素,并不会修改b中的元素。为了避免复制数组,一般会传递指向数组的指针。packagemainimport"fmt"funcmain(){ a:=[...]int{1,2,3} b:=a a[0]=100......