Docker快速入门

Docker是什么

Java

一次构建,到处运行(前提应用程序上有Java虚拟机)

Docker

真正实现一次编译到处运行

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)

Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目已经超过 4 万 6 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。

Docker 使用 Google 公司推出的 [Go 语言] 进行开发实现

,基于 Linux 内核的 cgroupnamespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runCcontainerd

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷

下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

Docker容器化引擎 和 虚拟化技术

传统虚拟化

Docker

Server :底层是服务器,就相当于硬件.

Host OS :主机,也叫宿主机

Hypervisor :虚拟化技术

Guest OS : 客户机

虚拟化技术

传统模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xj86xRnB-1614239006978)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592753208099.png)]

首先,正常我们装系统,首先买一套硬件回来,这个就是Server(硬件,笔记本PC,之类的)

硬件之上,我们装操作系统,我们在电脑上装操作系统,这里就是Host OS或者说操作系统,

这个操作系统,可以为任何(Linux,Mac,Windows)

然后如果我们想使用软件,比如装个QQ,微信,浏览器,WeGame等

Hypervisor

Hypervisor :虚拟化技术

虚拟机监控程序,上了虚拟化技术之后,虚拟化技术如何让这些成千上万台计算机,联合起来管理

换句简单话说,如何让那么多计算机硬件,变成一台超级计算机,这样的思路走,这就要到我们的

虚拟化技术, 这个时候整体的硬件架构会发生一次改变。

虚拟化技术系统架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cWyDNaFW-1614239006980)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592753163488.png)]

N个服务器硬件, 在每一个服务器上面装Hpervisor 虚拟机监控.

比如下面图片,五台独立的服务器 正常说是要装操作系统然后装软件,这样的用法。如上图的传统模式

现在要将五台计算机变成一台独立的计算机 也就是超级计算机 能把五台变一台,救能将一万台变一台

复杂程度不同,但是原理性相同.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BA6rgzhH-1614239006980)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592753458303.png)]

这时就是使用 Hypervisor (虚拟化技术)将这些计算机互联, 如图所示,每一个服务器上面装Hpervisor

然而这些Hpervisor又互相连接在一起,那么他们就能监控利用到下面五台服务器(硬件)的资源

至于Server(硬件)什么配置无所谓。比如内存几G , CPU ,几核,硬盘多少G 这些配置跟我们将他们

连接起来是无关紧要的,只需要有一个有这样一个资源载体,和上面的虚拟化串联的技术.

连接完成之后,这时我们可以将它称为,他虽然是虚拟机监控,但是也可以称之为虚拟化操作系统,那么

这时候他就变成了一个整体。

等于说上面方框内是一个整体的虚拟化操作系统,他是一个整体,那么他可以利用下面五台服务器的资源,比如

内存,CPU,储存。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PQWucApb-1614239006981)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592754117040.png)]

这时我们有了虚拟化操作系统,这时候我们便可以在,虚拟化操作基础之上安装操作系统,比如Linux,Mac,Windows

我们的软件便可以安装在操作系统上了

这样的话,当我们的操作系统运行时,一个整体虚拟化操作系统,来调度下面整体资源(也就是五台服务器的全部资源)

分配给上面的虚拟操作系统,或者说模拟出来的操作系统,这也是人们常说的基础设施及服务

把下面的服务器换成成千上万台,然后装一个统一的虚拟化操作系统,这时我在分配资源空间给你,

比如我的五台服务器内存分别是 4G , 4G , 8G , 8G , 8G 那也就是说我们的虚拟化操作系统就有了4+4+8+8+8 = 32G

这是虚拟化操作系统,就可以给你分配一个空间,分配内存,你可以提供相应的金钱,来购买服务器使用。

阿里云,虚拟机都是这个道理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CGIDR4MS-1614239006982)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592754273109.png)]

Server :硬件( 服务器 )

Windows :Host OS 【主机(windows)】

VMware : 虚拟机

Ubuntu : Liunx操作系统

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uxWM319F-1614239006982)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592754460992.png)]

将之前的VMware 也就是Hypervisor(虚拟化技术) 这一层换成了Docker

看上去没什么不同,只不过替换了一层。

但是其中的区别确实很大的。

装系统环节,区别较大,虚拟机必须要完整的虚拟出一块空间,虚拟硬件,CPU,内存,硬盘。

占用的是 我们主机的资源,也就是Server(硬件)的资源 , 然后再硬件之上,完整的创建出

一个操作系统 , 所以叫虚拟化技术 , 虚拟出来的硬件,在虚拟的硬件之上安装操作系统,而

Docker不同,直接利用的宿主机的内核与资源,这样最大最显著的区别在于 资源利用上的优势

对于虚拟机来说创建出来的操作系统,或者应用,是要占用资源的,是从主机当中暂用占用资源的

而这部分资源是不能被共享的。而Dcoker就不一样,Docker的资源直接来源于宿主机底层的硬件

这是他的资源是共享状态。下面举个例子

共享与不共享区别

CPU i7 3.0GHz 8核

内存 16 GB - 2GB 14

VMware 2GB App1 4GB

VMware 2GB App2 1GB

Docker App1 4GB

​ App2 1GB

比如那我们的笔记本举例子 我们的笔记本是 CPU i7 3.0GHz 16GB 4核

假设我现在VMware 分配给虚拟机2GB 1CPU 2核 ,我的主机是 4核 16G内存 ,这时候

虚拟机会直接占用我主机的2GB内存 主机也就是还有14GB的内存,同理,CPU, 内核也会

占用我们分配给的大小 。

假设我们以内存来举例子,我再开一个同等配置的虚拟机,内存占用就是 2GB+ 2GB = 4GB

宿主机也就是还有12GB ,同样CPU也会被占用部分, 为了保证虚拟机能独立运行,虚拟就自己

占用这部分资源,但是Docker就不同了,Docker不需要分配任何资源,Docker如果要使用资源

会直接去宿主机拿。

比如我在Docker安装了一个APP1 在VMware也安装一个APP1

当Docker里面的APP1需要用到4GB的内存时,就会去宿主机拿4GB的内存,

当虚拟机里面的APP1需要用到4GB的内存时,就会内存溢出。无法运行

假如Docker里面的APP2需要用到1GB内存时,APP1,APP2一起运行,那就是4+1 = 5GB

这是宿主机有16GB资源 足够调用, 可以保证APP1,APP2成功运行.

假如虚拟机里面的APP2需要用到1GB内存时,APP2这时需要1GB的内存,我们给它分配

了2GB的内存,可以成功运行,但是却有1GB的内存没有使用被浪费掉了,同时,因为虚

拟机的特殊性,它会将分配给的内存占用掉,也就是说虚拟机虽然用不完,但是其他任何人

也没办法去使用这部分内存。

Docker可以有效地利用宿主机的全部资源,而虚拟机只能利用你分配给他的部分资源

Docker可以充分调用宿主机资源 ,虚拟机容易内存溢出,浪费。

Docker VS 虚拟机

Docker和虚拟机都是虚拟化技术,但是其本质,跟结构是不一样的

同样是虚拟化技术,就内存一点,Docker就比虚拟机要好的很多

云操作系统,所谓的云操作系统,阿里云那种,云服务商 ,云厂商 ,提供的就是用虚拟化技术,将所有的硬件跟设备

整合到一块,变成一台超级计算机,再为我们,分配资源,然后我们去买他们的资源,就以这种模式盈利,收费。

虚拟机话技术连接大概就是上述所说的,但是做起来是非常困难的。

为什么要使用 Docker

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。

更高效的利用系统资源更高效的利用系统资源

由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

大白话更高效的利用资源可以减少费用的开销,同样的配置,运行的服务更多了.资源利用率提高了

更快速的启动时间

传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。

虚拟机 :开启VMware 开机时间 这个时间往往比较长 要几分钟

一致的运行环境

开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」 这类问题。

真正做到一次构建,到处运行

持续交付和部署

对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。

使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。

而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

更轻松的迁移

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

虚拟机里面是不能在运行虚拟机的

VMware Windows VMware 不可行

Docker Windows Dcoekr 可行

​ 比如说我在自己的笔记本上安装了Widows10操作系统,做开发,我使用Dcoker打完镜像,之后,Docker容器化引擎能正常运行的话,我只要将Docker 的镜像,移植到任何计算机,无论这个计算机是笔记本, PC机,还是服务器,无论是是Widows,MAC, Linux, 都没关系,只要镜像能成功运行,那我这个镜像到任何计算机都可以正常运行,就是因为这样,才做到了一次编译,到处运行。前提条件是,要安装Docker ,和Java一样, 你的计算机要安装JVM

更轻松的维护和扩展

Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

也是利用Jave面向对象思想

对比传统虚拟机总结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-61d7oj2r-1614239006983)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592757068233.png)]

重复写

先写到虚拟内存中,在写到显示

Docker 基本概念

Docker 包括三个基本概念

  • 镜像(Image
  • 容器(Container
  • 仓库(Repository

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

Docker 引擎

Docker 引擎

是一个包含以下主要组件的客户端服务器应用程序。

  • 一种服务器,它是一种称为守护进程并且长时间运行的程序。
  • REST API用于指定程序可以用来与守护进程通信的接口,并指示它做什么。
  • 一个有命令行界面 (CLI) 工具的客户端。

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sor4d5gT-1614239006983)(https://www.funtl.com/assets/620140640_31678.png)]

最里面是Docker的守护进程, 如果想访问守护进程,要使用Docker提供的Rest 风格的API

由Dcoekr提供的命令行工具来调用API

比如 ls -al

ls:是应用程序,也就是命令行工具

al:参数 也就是API -a 显示全部 -l以列表形式显示 也就是说以列表形式显示全部

同理Docker xxxx

container :容器

image : 镜像

network :网络

data volumes :数据卷

也就是说镜像和容器的管理需要通过Dcoekr的命令行工具来进行管理

Dcoerk原理

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

Docker容器通过 Docker 镜像来创建

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Yw4PmVj-1614239006983)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592832476134.png)]

比如说我创建了一类名字叫User 镜像 User

User {

​ private Long id = 1;

}

这个类长这个样子,类不能直接拿来用,镜像也不能直接拿来用,实例化的对象才能用

User user = new User();

user.setId(2);

实例化之后的User就可以用了 镜像是User

User的镜像,创建一个User的容器

容器 user container

对象的生命周期 ,创建之后 ,创建,使用,释放,都在容器里面。

我们直接打交道的是容器 在代码里面我们是和对象打交道

比如上面我们new了一个user对象 User对象的id已经等于1

我们可以随意操控user对象的setId 你想 Set多少就Set多少

这时不会影响到镜像,镜像里的id还是等于1

镜像会初始化一些东西 ,这个时候我基于镜像创建出容器,就有镜像里面所包含的东西

等于是说我们容器有镜像的功能但是却不会影响到镜像本身

比如我在容器里安装了一个Java 镜像里是不不会有Java 的

这就相当于我们Java的集成,父类有的子类一定有,子类有的父类不一定有

为了方便考虑,比如我们需要Jave 我们可以直接在镜像里面安装好Java

然后我启动容器的时候,就代表启动了一个带有java的容器。

镜像就相当于封装

Docke里面的封装是是什么样子

比如我们现在有一个Java镜像 , 我们还有一个Tomcat镜像

Tomcat 镜像 继承 Java 镜像

等于说现在Tomcat镜像 有自己本身的Tomcat 也有Java镜像的Java

需要Java Tomcat两个环境是,只需要去装一个继承过得Tomcat就可以了

MyProject (镜像) 继承 Tomcat镜像

这样的话运行我项目的环境都具备了 就可以直接运行了

一次编译到处运行

镜像是一个文件,我不管放在什么计算机上,只需要new一个容器出来

这个容器就有 MyProject Java Tomcat 就可以直接运行了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O9V3NI8Q-1614239006984)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592834966352.png)]

Docker由镜像和容器组成 , 镜像类似于面向对象中类对象,我们可以将它封装, 而真正使用和操作的是容器

就像是Java中new出来的对象

此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

具体做法 :

Client :客户端

Docker Hsot :Docker主机

Registry :Docker仓库

客户端如图所示,会有大概几个步骤,build构建 pull拉取 run运行

Docker命令行工具 Docker使用 build 这个命令 去请求Docker daemon (守护进程) Docker守护进程,构建一个Ubuntu系统镜像,。

有了 Ubuntu镜像,我们可以使用Docker Run命令 run一个Ubuntu镜像,启动了一个Ubuntu容器,并且是可以启动多个

pull 拉取命令,请求Docker守护进程,守护进程请求 Docker仓库 找对应的镜像 把他拉取到Docker 主机上

这是Docker主机上就有我们想要的镜像,然后再run基于镜像启动一个Docker容器

Docker安装

Docker CE 社区版 免费版

Docker EE 企业版 收费版

CentOS安装Docker

1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,

通过 uname -r 命令查看你当前的内核版本

$ uname -r

​ 2、使用 root 权限登录 Centos。确保 yum 包更新到最新。

$ sudo yum update

3、卸载旧版本(如果安装过旧版本的话)

$ sudo yum remove docker  docker-common docker-selinux docker-engine

4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

5、设置yum源

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

img

6、可以查看所有仓库中所有docker版本,并选择特定版本安装

$ yum list docker-ce --showduplicates | sort -r

img

7、安装docker

$ sudo yum install docker-ce  #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
$ sudo yum install <FQPN>  # 例如:sudo yum install docker-ce-17.12.0.ce

img

8、启动并加入开机启动

$ sudo systemctl start docker
$ sudo systemctl enable docker

9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

$ docker version

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZMaTkd4l-1614239006986)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592841376538.png)]

Ubuntu 安装 Docker

版本为16.04

*简化如果系统没有安装可选内核模块的话,可以执行下面的命令来安装可选内核模块包

** $ sudo apt-get update

** $ sudo apt-get install \

​ linux-image-extra-$(uname -r) \

​ linux-image-extra-virtual

*使用 APT 安装*

# 安装必要的一些系统工具

** $ sudo apt-get update sudo

** $ apt-get -y install apt-transport-https ca-certificates curl software-properties-common

# 安装 GPG 证书

** curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

# 写入软件源信息

** sudo add-apt-repository “deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable”

*更新并安装 Docker CE*

** sudo apt-get -y update

** sudo apt-get -y install docker-ce

*#* *使用脚本自动安装*

**** $ curl -fsSL get.docker.com -o get-docker.sh

** $ sudo sh get-docker.sh --mirror Aliyun

# *启动 Docker CE*

**** $ sudo systemctl enable docker

**** $ sudo systemctl start docker

*#* *建立 docker 用户组*

**** $ sudo groupadd docker

**** $ sudo usermod -aG docker $USER

*#* *测试 Docker 是否安装正确*

**** $ docker run hello-world

输出日志正常,说明安装成功

Docker 镜像加速器

Ubuntu 16.04+、、CentOS 7

对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hSjqxM2f-1614239006986)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592842161234.png[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RLAtHElt-1614239007756)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592842171067.png)]]

之后重新启动服务。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pYm8gdoJ-1614239006987)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592842212533.png)]

Windows 10

对于使用 Windows 10 的系统,在系统右下角托盘 Docker 图标内右键菜单选择 Settings,打开配置窗口后左侧导航菜单选择 Daemon。在 Registry mirrors 一栏中填写加速器地址 https://registry.docker-cn.com,之后点击 Apply 保存后 Docker 就会重启并应用配置的镜像地址了

macOS

对于使用 macOS 的用户,在任务栏点击 Docker for mac 应用图标 -> Perferences… -> Daemon -> Registry mirrors。在列表中填写加速器地址 https://registry.docker-cn.com。修改完成之后,点击 Apply & Restart 按钮,Docker 就会重启并应用配置的镜像地址了

检查加速器是否生效

配置加速器之后,如果拉取镜像仍然十分缓慢,请手动检查加速器配置是否生效,在命令行执行 docker info,如果从结果中看到了如下内容,说明配置成功。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xGnmSrT6-1614239006987)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592842257348.png)]

获取镜像

从 Docker 镜像仓库获取镜像的命令是 docker pull。其命令格式为:

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

具体的选项可以通过 docker pull --help 命令看到,这里我们说一下镜像名称的格式。

  • Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub。
  • 仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像

列出镜像

要想列出已经下载下来的镜像,可以使用 docker image ls 命令

$ docker image ls
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
redis                latest              5f515359c7f8        5 days ago          183 MB
nginx                latest              05a60462f8ba        5 days ago          181 MB
mongo                3.2                 fe9198c04d62        5 days ago          342 MB
<none>               <none>              00285df0df87        5 days ago          342 MB
ubuntu               16.04               f753707788c5        4 weeks ago         127 MB
ubuntu               latest              f753707788c5        4 weeks ago         127 MB
ubuntu               14.04               1e0c3dd64ccd        4 weeks ago         188 MB

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

其中仓库名、标签在之前的基础概念章节已经介绍过了。镜像 ID 则是镜像的唯一标识,一个镜像可以对应多个标签。因此,在上面的例子中,我们可以看到 ubuntu:16.04ubuntu:latest 拥有相同的 ID,因为它们对应的是同一个镜像

删除本地镜像

如果要删除本地的镜像,可以使用 docker image rm 命令,其格式为:

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

深入 Dockerfile 定制镜像

进入容器

docker exec -it 容器ID /bin/bash 交互式进入容器

Docker 构建 Tomcat

查找 Docker Hub 上的 Tomcat 镜像

# docker search tomcat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BzDfuCm0-1614239006987)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592889841337.png)]

这里我们拉取官方的镜像

docker pull tomcat

运行容器

docker run --name tomcat -p 8080:8080

查看容器启动情况

docker ps

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RBBAT12D-1614239006988)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592889940469.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CChBLVBa-1614239006988)(https://www.funtl.com/assets/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20171103174843.png)]

Docker 构建 MySQL

查找 Docker Hub 上的 MySQL 镜像

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Odo8HK8D-1614239006989)(C:\Users\艾伦\AppData\Roaming\Typora\typora-user-images\1592890036068.png)]

这里我们拉取官方的镜像

docker pull mysql

运行容器

docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql

命令参数

  • -p 3306:3306:将容器的3306端口映射到主机的3306端口
  • -v /usr/local/docker/mysql/conf:/etc/mysql:将主机当前目录下的 conf 挂载到容器的 /etc/mysql
  • -v /usr/local/docker/mysql/logs:/var/log/mysql:将主机当前目录下的 logs 目录挂载到容器的 /var/log/mysql
  • -v /usr/local/docker/mysql/data:/var/lib/mysql:将主机当前目录下的 data 目录挂载到容器的 /var/lib/mysql
  • -e MYSQL\_ROOT\_PASSWORD=123456:初始化root用户的密码

查看容器启动情况

root@UbuntuBase:/usr/local/docker/mysql# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
bc49c9de4cdf        mysql:latest        "docker-entrypoint..."   4 minutes ago       Up 4 minutes        0.0.0.0:3306->3306/tcp   mysql

使用客户端工具连接 MySQL

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xz3zJxWD-1614239006989)(https://www.funtl.com/assets/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20171103184144.png)]

Docker 常用命令

查看 Docker 版本

docker version

从 Docker 文件构建 Docker 映像

docker build -t image-name docker-file-location

运行 Docker 映像

docker run -d image-name

查看可用的 Docker 映像

docker images

查看最近的运行容器

docker ps -l

查看所有正在运行的容器

docker ps -a

停止运行容器

docker stop container_id

删除一个镜像

docker rmi image-name

删除所有镜像

docker rmi $(docker images -q)

强制删除所有镜像

docker rmi -r $(docker images -q)

删除所有虚悬镜像

docker rmi $(docker images -q -f dangling=true)

删除所有容器

docker rm $(docker ps -a -q)

进入 Docker 容器

docker exec -it container-id /bin/bash

查看所有数据卷

docker volume ls

删除指定数据卷

docker volume rm [volume_name]

删除所有未关联的数据卷

docker volume rm $(docker volume ls -qf dangling=true)

从主机复制文件到容器

sudo docker cp host_path containerID:container_path

从容器复制文件到主机

sudo docker cp containerID:container_path host_path

查找镜像网址

  • > https://hub.docker.com/

er stop container_id




## 删除一个镜像

```text
docker rmi image-name

删除所有镜像

docker rmi $(docker images -q)

强制删除所有镜像

docker rmi -r $(docker images -q)

删除所有虚悬镜像

docker rmi $(docker images -q -f dangling=true)

删除所有容器

docker rm $(docker ps -a -q)

进入 Docker 容器

docker exec -it container-id /bin/bash

查看所有数据卷

docker volume ls

删除指定数据卷

docker volume rm [volume_name]

删除所有未关联的数据卷

docker volume rm $(docker volume ls -qf dangling=true)

从主机复制文件到容器

sudo docker cp host_path containerID:container_path

从容器复制文件到主机

sudo docker cp containerID:container_path host_path

查找镜像网址

  • > https://hub.docker.com/

    https://www.jianshu.com/p/397929dbc27d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值