百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

不可错过的Docker完整笔记(docker基础实战教程一:入门)

nanshan 2024-11-04 13:05 20 浏览 0 评论

简介

一、Docker简介

?

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

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

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

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

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

Docker 容器通过 Docker 镜像来创建。

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

二、Docker私库简介

官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是,有时候,我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像。这个可以通过开源软件Registry来达成目的。

Registry在github上有两份代码:老代码库和新代码库。老代码是采用python编写的,存在pull和push的性能问题,出到0.9.1版本之后就标志为deprecated,不再继续开发。从2.0版本开始就到在新代码库进行开发,新代码库是采用go语言编写,修改了镜像id的生成算法、registry上镜像的保存结构,大大优化了pull和push镜像的效率。

官方在Docker hub上提供了registry的镜像(详情),我们可以直接使用该registry镜像来构建一个容器,搭建我们自己的私有仓库服务。

三、Docker优势

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

1、快速,一致地交付您的应用程序

Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。容器非常适合持续集成和持续交付(CI / CD)工作流程。

2、响应式部署和扩展

Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。

Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

3、在同一硬件上运行更多工作负载

Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,可以用更少的资源做更多的事情。

部署与使用

Docker Registry,它是所有仓库(包括共有和私有)以及工作流的中央Registry。可以通过Registry在局域网内部搭建私有的镜像注册中心。

一、Registry的部署

  1. 运行下面命令获取registry镜像

docker pull registry

下载到的版本默认为 docker.io/registry latest版本

2.将registry镜像运行并生成一个容器

docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest

Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。

3.运行docker ps看一下容器运行情况

4.registry容器启动后,打开浏览器输入http://ip_add:5000/v2/,看到下面情况说明registry运行正常

?

5.测试上传镜像到Registry

通过将镜像push到registry来验证,首先将主机的registry镜像命名为符合仓库要求registry_url:port/ImageName:tag的格式,如图

?

通过docker tag命令来实现命名:

docker tag java:8 192.168.30.12:5000/java:8

通过命令 docker images 查看本地镜像,重新创建了一个镜像。

上传jdk镜像到Registry仓库:

docker push 192.168.30.12:5000/java:8

?

注意:

可能会出现无法push镜像到私有仓库的问题。提示:

?

这是因为我们启动的registry服务不是安全可信赖的。这时需要修改客户端docker的配置文件/etc/docker/daemon.json,添加下面红色的内容(registry服务地址、docker日志文件大小限制):

{

"insecure-registries": ["192.168.30.12:5000"],

"log-driver":"json-file",

"log-opts": { "max-size": "100m", "max-file": "5" }

}

修改好之后需要重启Docker服务才能生效,执行命令:systemctl restart docker ,再push即可。

push成功之后,查看本地/opt/registry目录下已经有了刚推送上来的registry镜像,也可以在浏览器中输入http://ip_add:5000/v2/_catalog

?

或者使用以下命令查看:

curl -XGET http://registry:5000/v2/_catalog

curl -XGET http://registry:5000/v2/image_name/tags/list

至此,我们的Registry私有仓库搭建完成,如果在今后中要使用,可以使用命令:docker pull ip_add:5000/jdk_8u191:20190307 拉取镜像。

二、Registry接口列表

方法

路径

分类

描述

GET

/v2/

Base

检查是否支持2.0接口

GET

/v2/${image}/tags/list

Tags

获取镜像标签列表

GET

/v2/${image}/manifests/<referevce>

Manifest

获取镜像主要信息

PUT

/v2/${image}/manifests/<referevce>

Manifest

修改镜像主要信息

DELETE

/v2/${image}/manifests/<reference>

Manifest

删除镜像的主要信息

GET

/v2/${image}/blobs/<digest>

Blob

获得镜像层

DELETE

/v2/${image}/blobs/<digest>

Blob

删除镜像层

POST

/v2/${image}/blobs/uploads/

Initiate Blob Upload

开始分块上传

GET

/v2/${image}/blobs/uploads/<uuid>

Blob Upload

获得分块上传的速度

PATCH

/v2/${image}/blobs/uploads/<uuid>

Blob Upload

分块上传数据

PUT

/v2/${image}/blobs/uploads/<uuid>

Blob Upload

完成上传

DELETE

/v2/${image}/blobs/uploads/<uuid>

Blob Upload

取消上传

GET

/v2/_catalog

Catalog

获得镜像列表

Docker常用命令

一、基本命令

docker version查看docker版本

docker info查看docker详细信息

docker --help查看docker命令

二、镜像命令

docker images查看docker镜像

docker images -a列出本地所有的镜像

docker images -p只显示镜像ID

docker images --digests显示镜像的摘要信息

docker images --no-trunc显示完整的镜像信息

docker search tomcat从Docker Hub上查找tomcat镜像

docker pull tomcat从Docker Hub上下载tomcat镜像。等价于:docker pull tomcat:latest

docker commit -m "提交的描述信息" -a "作者" 容器ID 要创建的目标镜像名称:[标签名]提交容器使之成为一个新的镜像。

如:docker commit -m "新的tomcat" -a "lizq" f9e29e8455a5 mytomcat:1.2

docker rmi hello-world从Docker中删除hello-world镜像

docker rmi -f hello-world从Docker中强制删除hello-world镜像

docker rmi -f hello-world nginx从Docker中强制删除hello-world镜像和nginx镜像

docker rmi -f $(docker images -p)通过docker images -p查询到的镜像ID来删除所有镜像

三、容器命令

docker run [OPTIONS] IMAGE根据镜像新建并启动容器。IMAGE是镜像ID或镜像名称

OPTIONS说明:

?--name=“容器新名字”:为容器指定一个名称

?-d:后台运行容器,并返回容器ID,也即启动守护式容器

?-i:以交互模式运行容器,通常与-t同时使用

?-t:为容器重新分配一个伪输入终端,通常与-i同时使用

?-p:随机端口映射

?-p:指定端口映射,有以下四种格式:

??ip:hostPort:containerPort

??ip::containerPort

??hostPort:containerPort

??containerPort

docker ps列出当前所有正在运行的容器

docker ps -a列出所有的容器

docker ps -l列出最近创建的容器

docker ps -n 3列出最近创建的3个容器

docker ps -q只显示容器ID

docker ps --no-trunc显示当前所有正在运行的容器完整信息

docker start 容器ID或容器名称启动容器

docker restart 容器ID或容器名称重新启动容器

docker stop容器ID或容器名称停止容器

docker kill 容器ID或容器名称强制停止容器

docker rm 容器ID或容器名称删除容器

docker rm -f 容器ID或容器名称强制删除容器

docker rm -f $(docker ps -a -q)删除多个容器

docker logs -f -t --since --tail 容器ID或容器名称查看容器日志

如:docker logs -f -t --since=”2018-09-10” --tail=10 f9e29e8455a5

?-f : 查看实时日志

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

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

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

docker top 容器ID或容器名称查看容器内运行的进程

docker inspect 容器ID或容器名称查看容器内部细节

docker attach 容器ID进到容器内

docker exec 容器ID进到容器内

docker cp 容器ID:容器内的文件路径 宿主机路径从容器内拷贝文件到宿主机.

如:docker cp f9e29e8455a5:/tmp/yum.log /root

?

相关推荐

Centos7虚拟机安装及网络配置(二)

#二、centos7的网络配置-Nat模式NAT模式也是VMware创建虚拟机的默认网络连接模式。使用NAT模式网络连接时,VMware会在主机上建立单独的专用网络,用以在主机和虚拟机之间相互通信。虚...

网络分析shell脚本(实时流量+连接统计)

介绍一个强大的分析网络的shell脚本,此脚本是从EZHTTP拆分出来的,觉得有必要单独介绍下。脚本运行效果截图:此脚本包含的功能有:1、实时监控任意网卡的流量2、统计10秒内平均流量3、统计每个端口...

Centos之Could not retrieve mirrorlist解决方案

Centos之Couldnotretrievemirrorlist解决方案:vi/etc/sysconfig/network-scripts/ifcfg-你的网卡名字修改:ONBOOT=ye...

一文掌握!VirtualBox 中 Rock9.x(Linux)网络配置全攻略

一、前言记得我有一篇文章《必看!VirtualBox中Centos7(Linux)网络配置全攻略》讲的非常明细,但是因为CentOS已经停止维护了,可能很多人都不想继续学CentOS,我也是一样,...

CentOS 6.0 设置IP地址、网关、DNS

在做任何操作之前先备份原文件,我们约定备份文件的名称为:源文件名称+bak,例如原文件名称为:centos.txt那么备份文件名称为:centos.txtbak引言:linux的网卡IP地址是存放在文...

Linux CentOS 基础操作(centos怎么操作)

简介:养成学习Linux的好习惯,第一是多查看manpage(manual)等帮助文档和利用好Tab键;第二是掌握好一些快捷键,比如ctrl+c(停止当前进程),ctrl+r(查看命令历史)...

Linux抓包王者技能!这条命令直接封神,教你精准定位网络问题

在网络故障排查和性能调优中,抓包是一项必不可少的技能。对于Linux环境下的网络工程师和运维人员来说,掌握高效抓包方法至关重要。而要说“抓包界的王炸”,那非tcpdump莫属!今天,我们不仅要介绍...

「干货」如何在 Linux 上划分VLAN?

在某些场景中,我们希望在Linux服务器(CentOS/RHEL)上的同一网卡分配来自不同VLAN的多个ip。这可以通过启用VLAN标记接口来实现,但要实现这一点,首先必须确保交换机上添加多个vl...

CentOS 8 网络配置实战教程:静态IP、路由与DNS设置

一、配置前准备1.查看当前网络信息#查看所有网络接口nmclidevicestatus#查看指定网卡信息(假设网卡名为ens192)ipaddrshowens192#查看路由...

Debian10.7修改网络配置(debian怎么配置网络)

简介:关于Debian获取IP地址的方法主要有两种,动态获取和静态设置。在配置网络之前先要知道Debian的网卡名称是什么,Debian可通过命令#ipa查看网卡名称。本文主要通过介绍Debian...

巧用SSH转发功能深入穿透内网(ssh转发udp)

ssh能够提供客户端到服务端的加密传输,当http、ftp等协议被防火墙所拦截时,可以考虑使用SSH的端口转发功能,将其它TCP端口的网络数据通过SSH连接来转发。转发方式一共有三种,分别是:动态转发...

CentOS Linux 7 的IP地址配置(centos7.4配置ip地址)

前段时间有位朋友,在一台PC机上安装了CentOSLinux7系统,因为要接入局域网,需要配置IP地址和默认网关信息。于是参照一本Linux教程上编辑网卡配置信息的方法,输入:vim/etc/s...

教你如何在 Linux 上划分VLAN(linux怎么分区详解)

在某些场景中,我们希望在Linux服务器(CentOS/RHEL)上的同一网卡分配来自不同VLAN的多个ip。这可以通过启用VLAN标记接口来实现,但要实现这一点,首先必须确保交换机上添加多个vl...

打通数据高速公路:如何在 CentOS 上使用 Thunderbolt 3 和 4

Thunderbolt3与4是现代高速外设连接的代表,带来了40Gbps的惊人带宽,支持数据、视频、音频与供电的“四合一”功能,尤其在专业视频编辑、科研计算、虚拟化扩展等领域具有巨大价值...

VMware 虚拟机 CentOS7 桥接模式静态 IP 配置全攻略

虚拟机桥接模式原理配置成桥接网络连接模式的虚拟机就当作主机所在以太网的一部分,虚拟系统和宿主机器的关系,就像连接在同一个Hub上的两台电脑,可以像主机一样可以访问以太网中的所有共享资源和网络连接,可以...

取消回复欢迎 发表评论: