一、Docker介绍和安装
1.1 什么是docker
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
logo解释:
标志是一头鲸鱼携带着一堆容器。它正在向您发送这些信息的途中。Docker直译过来是码头工人,然而Docker给人的第一感觉是容器,容器技术英译为Linux Container, Container的直译有集装箱,容器两个意思。
什么是"集装箱技术"
我们都知道码头里的集装箱是运载货物用的,它是一种按规格标准化的钢制箱子。集装箱的特色,在于其格式划一,并可以层层重叠, 集装箱与集装箱之间互不影响于是乎,IT领域借鉴了这一理念,大家就在想,有没有可能大家 只需要关注程序本身?
我们都知道码头里的集装箱是运载货物用的,它是一种按规格标准化的钢制箱子。集装箱的特色, 「在于其格式划一,并可以层层重叠, 集装箱与集装箱之间互不影响」
Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。
重心:
Docker其实就是可以打包程序和运行环境,把环境和程序一起发布的容器。
1.2 为什么要使用Docker
Docker容器虚拟化的好处
开发者需要能方便高效构建应用,并且任何时间任何地点都可以获取。就比如我在本地将jdk和tomcat打包直接放到阿里云平台上,就不需要在阿里云上配置环境了。这样可以节省时间和降低风险,提高开发效率。
Docker在开发和运维中的优势
对开发和运维( DevOps)人员来说,可能最梦寐以求的就是一次性地创建或配置,可以在任意环境、任意时间让应用正常地运行。而Docker恰恰是可以实现这一终极目标的瑞士军刀。
优势:
- 更快速的交付和部署
- 更高效的资源利用
- 更轻松的迁移和扩展
- 更简单的更新管理
Docker与虚拟机比较
作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机方式相比具有显著优势。
特性 | 容器 | 虚拟机 |
启动速度 | 秒级 | 分钟级 |
磁盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
隔离性 | 完全隔离 | 完全隔离 |
1.3 虚拟化与Docker
虚拟化技术是一个通用的概念,在不同领域有不同的理解。在计算领域,一般指的是计算虚拟化或通常说的服务器虚拟化。
简单的说,「虚拟化」,顾名思义,就是「虚拟」的,是「假」的,是形而上的,是观念上、逻辑上的划分。
举栗说明
假设你现在手头上有一套房子,并且你要把它给租出去,租金的市场价是2000元/月。那么有没有办法把它租得更贵,获得6000元的租金呢?你想到了两个办法:
- 找一个不差钱的傻X租户,让他每月交6000元,但是这种人不大好找。
- 把房子拆成4个小房子租给4个单身狗,租金为1500元/人/月。
这些房子其实就是一些电脑资源,例如服务器啊、内存啊、网络啊等等。虚拟化技术就是将一套房子划分为4个功能完善的小房子,提高资源的使用效率。
虚拟化分类:
- 完全虚拟化(VMware)
- 硬件辅助虚拟化
- 部分虚拟化
- 超虚拟机化
- 操作系统虚拟化 (docker)
什么是物理机
什么是虚拟机
什么是Docker
1.4 Docker的核心概念
Docker技术的三大核心概念,分别是:
- 镜像(Image)
- 容器 (Container)
- 仓库 (Repository)
Docker镜像
当我们使用 Docker 运行一个应用程序的时候,我们需要首先定义一个 Docker 镜像。Docker 镜像是一个只读模板,包含运行应用程序所需的所有内容,例如代码、库文件、运行环境等等。也可以把它看作是一个容易复制和分享的“快照”。
Docker 镜像是由一个或多个文件系统层构成,每个文件系统层都包含着一个应用程序运行所需的不同部分。例如一个镜像可能包含操作系统,另一个镜像可能只包含 Django 应用程序及其依赖项。这些文件系统层会形成一个完整镜像,供 Docker 环境使用。
镜像从何而来
- 从Docker Hub下载 maven-> 中央仓库
- 通过Docker file自己创建出来
Docker容器
相对于镜像,容器包含的内容要比镜像更丰富,容器除了有镜像的内容之外,还具有独立的文件系统、运行时状态和网络栈等信息。 具体来说,一个镜像只是一个只读的文件系统,其中包含了应用程序运行所需的各种文件和依赖,而容器则是一个可运行的实例,它在启动时会从镜像创建并启动,它有自己的文件系统、进程空间、网络和运行时状态,容器中的文件系统是可写的,并且可以在容器运行时随意修改。另外,容器还有独立的网络和环境变量等上下文信息。 因此,镜像和容器虽然有相似之处,但它们的作用不同,具有不同的特性和功能。镜像是一种打包和分发应用程序的标准格式,是一种“静态”的概念,而容器则是镜像的“动态”实例,是真正运行应用程序的载体。容器是镜像的运行时状态,拥有更完整的运行环境和更强的动态交互能力。
注意:
容器和镜像一样,也是若干层的叠加,唯一区别是所有只读层的最上面一层,是一层可读可写层,可以记住这个简单的公式:容器 = 容器镜像 + 可读可写层
Docker仓库
Docker 仓库是一个集中存储、管理和分享 Docker 镜像的平台。它可以供开发者或组织存储和分享创建的 Docker 镜像,并可用作构建、测试和部署应用程序的中心化仓库。在 Docker 架构中,一个 Docker 镜像由多个层次组成的文件系统构成。而 Docker 仓库是用于存储这些 Docker 镜像的平台,并且支持创建私有或公共镜像。
Docker 仓库分为两类:公共仓库和私有仓库。最著名的是公共 Docker Hub 仓库,它是基于互联网上的 Docker 镜像的公共服务,使得全球的开发者可以轻松地分享和获取 Docker 镜像资源,并且通过命令行很容易地访问公共仓库中的镜像。除此之外,Docker 还允许用户创建私有仓库,可以通过企业内部网络,来实现对项目特定的镜像访问和使用。私有仓库提供了更高的安全性和控制级别,让团队内部可以在不向公众公开应用和环境的情况下,更好地管理 Docker 镜像。
总的来说,Docker 仓库是构建一个完整的 Docker 生态系统中非常重要的一环,可以方便地存储和共享 Docker 镜像,提高开发效率和部署速度。
注意:
Docker利用仓库管理镜像的设计理念与Maven非常相似
咱们再来理解docker的两句口号就更好理解了
- 「Build, Ship and Run (搭建,发送,运行)」
- 「Build once,Run anywhere (搭建一次,到处运行)」
1.5 Docker安装
1、系统环境
序号 | 软件 | 版本 |
1 | Centos | 7.5 |
2 | Linux内核 | 3.8之上 |
解释:
CentOS是一款基于Linux操作系统的免费、开源、企业级的操作系统,它是由Red Hat Enterprise Linux源代码编译而来的。CentOS具有可靠的性能、稳定性和安全性,因此被广泛应用于服务器和企业级应用。CentOS提供了许多功能性强大的服务和软件,比如Web服务器、数据库服务器、邮件服务器等。CentOS的开发和维护由社区志愿者组成的开发团队进行。
CentOS是一个基于Linux内核的操作系统,它是开源的且免费。
Linux是一个开放源代码的操作系统内核,更像是其他许多操作系统的“底层”。以下是CentOS和Linux之间的区别:
- CentOS是一种Linux操作系统,但Linux并不一定是由CentOS提供。Linux是一个底层内核,而CentOS是基于这个内核的衍生操作系统。
- CentOS是免费的,而其他一些Linux发行版可能需要支付许可费用。
- CentOS是由社区管理和支持的,而Linux由一个大型社区和几个大公司支持和开发。
- CentOS通常在企业环境中应用得更广泛,而Linux则更广泛地应用于许多设备和场景(例如, Android手机、智能电视、路由器、计算机等)。
总的来说,CentOS和Linux都是可靠和可定制的操作系统,具有广泛的应用领域。差异在于CentOS是一种特定的 Linux 发行版,而 Linux 更像是一个底层内核。
2、关闭防火墙
systemctl stop firewalld
3、关闭selinux
vim /etc/selinux/config SELINUX=disabled
4、安装docker引擎
yum install -y docker
5、启动docker
systemctl start docker
6、设置docker自启动
systemctl enable docker
7、测试是否安装成功
docker run hello-world
二、Docker核心命令
2.1 镜像命令
Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库。
镜像下载
镜像是Docker运行容器的前提。
语法格式:
docker pull 镜像名字:[tag]
docker pull centos #下载最新的centos版本
注意:
如果不指定tag,则下载Docker Hub公共注册服务器中仓库的最新版本。
查看镜像
列出本地主机上已有的镜像。
[root@localhost ~]# docker images
镜像搜索
搜索远端仓库中共享的镜像,默认搜索Docker Hub官方仓库中的镜像。
docker search [镜像名字]
删除镜像
docker rmi -f 源名字 docker rmi -f image id
2.2 容器命令
当我们有了镜像,才可以创建容器, 创建一个centos容器来学习
创建容器(create -it命令)
Docker的容器十分轻量级,用户可以随时创建或者删除容器。容器的创建依赖镜像。
docker create -it 镜像名字
注意:
使用docker create命令新建的容器处于停止状态,可以使用docker start命令来启动它。
列出容器 (ps 命令)
docker ps
参数:
- -a: 显示未启动容器
- -q:返回容器id号
开启容器(start命令)
docker start 容器id(或者是容器id前两位)
新建并启动容器(run命令)
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态( stopped)的容器重新启动。所需要的命令主要为docker run,等价于先执行docker create命令,再执行docker start命令。
docker run 镜像名字 /bin/echo '启动时显示的信息'
注意:这样创建的容器在输出信息后就销毁了。
Docker在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载。
- 利用镜像创建并启动一个容器。
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。
- 从地址池配置一个IP地址给容器。
- 执行用户指定的应用程序。
- 执行完毕后容器被终止。
守护态运行
更多的时候,需要让Docker容器在后台以守护态(Daemonized)形式运行。用户可以通过添加-d参数来实现。
docker run -d 镜像名字 /bin/sh -c "while true; do echo hello world ;sleep 1 ;done"
下面命令则启动一个bash端,运行用户交互:
docker run -t -i 镜像名字 /bin/bash
终止容器(stop命令)
docker stop 容器id
处于终止状态的容器,可以通过docker start命令来重新启动:
docker start 容器id
此外,docker restart命令会将一个运行态的容器终止,然后再重新启动
docker restart 容器id
进入容器(exec命令)
docker exec -it 容器id /bin/bash
注意:
进入容器的前提是容器是开着的。容器与外面的环境是完全隔离的,容器内的目录有些可能会和外面的目录相同。
退出容器
#如果docker容器在启动的时候没有加 -d 参数 exit # 会直接停止同期并退出 Ctrt + p + q # 容器不停止 并退出
删除容器(rm命令)
docker rm 容器id
参数:
- -f, --force=false强行终止并删除一个运行中的容器。
- -l, --link=false删除容器的连接,但保留容器。
- -V,--volumes=false删除容器挂载的数据卷
2.3 其他命令
查看日志
docker logs [参数] 容器id
参数:
- -f, --follow 跟踪实时日志
- --since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
- --tail string 从日志末尾显示多少行日志, 默认是all
- -t, --timestamps 显示时间戳
- --until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
查看docker容器里面的进程
docker top 容器id
从容器拷贝文件到主机上
docker cp 容器id:容器内文件路径 目录路径