1、什么是Docker
Dokcer是一种开源平台,主要用于创建、部署和管理容器化应用程序,它通过将应用程序以及所有的依赖打包到一个轻量级的、可移植的容器中,使得应用可以在任何环境中一致的运行!
1.1、Docker的优点
- 一致性和可移植性
- 跨环境一致性:Docker 容器在开发、测试和生产环境中运行时保持一致性,避免了“在我机器上可以运行”的问题。
- 可移植性:容器可以在不同的操作系统和硬件上运行,只要支持 Docker 的环境就能运行容器。
- 轻量级和高效
- 快速启动:容器启动速度通常比虚拟机快,因为容器共享宿主机的操作系统内核,不需要额外的操作系统开销。
- 资源利用率:容器消耗的资源比虚拟机少,因为它们不需要完整的操作系统。
- 易于版本控制和管理
- 镜像版本控制:Docker 镜像可以标记和版本控制,方便管理和回滚到之前的版本。
- 镜像仓库:可以通过 Docker Hub 或私有仓库存储和共享镜像,便于团队合作和分发。
- 简单化部署和拓展
- 一致的部署:容器化应用程序可以在不同环境中以相同的方式进行部署,简化了部署过程。
- 快速扩展:容器可以快速启动和停止,便于动态调整应用的规模,以适应不同的负载需求。
- 提高开发效率
- 开发环境一致性:开发者可以在本地使用 Docker 容器创建与生产环境一致的开发环境,减少环境差异导致的问题。
- 简化依赖管理:应用及其所有依赖项都被封装在容器中,减少了环境配置和依赖冲突的问题。
1.2、Docker的用途
- 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境
- 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容
- 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构
1.3、Docker与虚拟机的区别
-
VM(VMware)在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用
-
Docker在宿主机的操作系统上创建Docker引擎,直接通过宿主机的操作系统调用硬件资源,而不是虚拟化操作系统和硬件资源,所以占用资源更少,性能更高。
-
对比图
特性 | Docker | VM |
启动速度 | 秒级 | 分钟级 |
硬盘使用 | MB | GB |
性能 | 接近原生 | 弱于原生 |
系统支持 | 单机可支持数百甚至数千 | 几十个 |
2、Docker的核心组件
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
- Docker客户端(Docker Client)
- Docker守护进程(Docker daemon)
-
镜像(Image):
- 定义:镜像是一个包含应用程序及其所有依赖项的只读模板。它是创建 Docker 容器的基础。
- 作用:镜像用于打包和分发应用程序,使其可以在任何支持 Docker 的环境中一致地运行。镜像通常由 Dockerfile 构建,Dockerfile 描述了创建镜像所需的所有步骤和依赖项。
-
容器(Container):
- 定义:容器是镜像的一个运行实例。它是一个轻量级、独立的可执行软件包,包含了应用程序及其所有必要的环境配置。
- 作用:容器提供了一个隔离的环境,确保应用程序在不同环境中可以一致地运行。容器具有自己的文件系统、网络配置和进程空间,可以在多个容器之间共享宿主机的内核。
-
仓库(Repository):
- 定义:仓库是存储和分发 Docker 镜像的地方。仓库可以是公共的(如 Docker Hub)或私有的。
- 作用:仓库允许用户上传、存储和共享镜像。镜像仓库可以用来集中管理镜像版本,方便团队成员之间共享镜像,或用于生产环境的镜像管理。
-
Docker 客户端(Docker Client):
- 定义:Docker 客户端是用户与 Docker 进行交互的命令行界面(CLI)。它发送用户命令给 Docker 守护进程,并显示结果。
- 作用:Docker 客户端用于创建、管理和操作 Docker 容器和镜像。用户通过 Docker CLI 可以执行如
docker run
、docker build
和docker push
等命令。
-
Docker 守护进程(Docker Daemon):
- 定义:Docker 守护进程是 Docker 的后台服务,负责管理 Docker 容器和镜像的生命周期。
- 作用:Docker 守护进程接收 Docker 客户端的请求,创建、启动、停止和删除容器,以及构建和管理镜像。它还负责与镜像仓库的交互,拉取和推送镜像。
3、Docker的安装
3.1、CentOS安装Docker
1)yum包更新到最新
yum update
2)安装yum-util, 该包提供yum-config-manager功能
yum install -y yum-utils
3)设置docker的源
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)可以任选其一
4)安装docker, yum install docker-ce-版本号
yum install docker-ce-18.06.3.ce
5)查看docker版本号,验证
docker version
6)启动docker
systemctl start docker
7)设置自启动
systemctl enable docker
8)配置镜像加速器
配置docker
在/etc/docker目录下创建daemon.json配置文件
vim /etc/docker/daemon.json
文件内容如下 注意:最新可能的docker镜像仓库配置
{"registry-mirrors": ["https://ustc-edu-cn.mirror.aliyuncs.com/","https://ccr.ccs.tencentyun.com/","https://docker.m.daocloud.io/"]
}
重新加载daemon
systemctl daemon-reload
重启docker
systemctl restart docker
3.2、Ubuntu安装Docker
1)卸载可能存在的旧版本
apt-get remove docker docker-engine docker-ce docker.io
2)更新apt包索引
apt-get update
3)安装以下包以使apt可以通过HTTPS使用存储库(repository)
apt-get install -y apt-transport-https ca-certificates curl software-properties-common
4)添加Docker官方的GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
成功后应该显示OK
5)设置stable存储库
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
6)再更新一下apt包索引
apt-get update
7)安装最新版本的Docker CE
apt-get install -y docker-ce
8)验证
8.1)查看docker服务是否启动
systemctl status docker
或如下命令
service docker status
8.2)若未启动,则启动docker服务
systemctl start docker 或如下命令service docker start
以上在线安装方式,通过连接到官网可以安装最新的版本(目前的版本为19.04),也可以使用下面的方式从软件仓库直接安装
apt-get update && apt-get install -y docker.io
这种方式安装的优点是简单,缺点是版本较低(目前是18.09)
4、镜像操作
4.1、镜像查找
docker search 镜像名称
如:
docker search rabbitmq
4.2、镜像下载
docker pull 镜像名称:标签
示例:
docker pull ubuntu:18.04
注:没有给标签,默认为latest
4.3、查看宿主机中的镜像
docker images
4.4、删除镜像
docker rmi 镜像或id
5、容器常用命令
镜像在docker生命周期中的构建阶段,容器则属于运行阶段,可以将容易理解为镜像的一个运行实例。
1)容器启动
先让我们来尝试启动第一个docker容器,docker run命令提供了docker容器的创建到启动的功能。使用该命令创建和启动容器也是docker的推荐做法。
#创建并启动一个ubuntu容器
sudo docker run -it ubuntu:18.04 /bin/bash
使用该命令时,如果镜像还没有下载,则docker会首先下载该镜像,然后执行创建并启动容器。具体参数说明如下:
- -i 开启容器中的STDIN(标准输入流),能接受命令,可以理解为已交互模式启动容器
- -t 为容器分配一个tty终端,即:分配一个命令行窗口, 有了这两个参数新创建的容器才能有一个交互式shell。
- /bin/bash 参数告诉docker在容器中启动一个bash shell
- 可以通过--name 参数为容器命名
- 如果指定 -d 参数,则说明容器以守护进程形式启动
- 可以使用 docker help run查看更详细的参数说明
- 在容器中使用,“cat /etc/issue”可以查看到运行中的容器其实为ubuntu系统。
-i -t参数是我们创建一个交互式容器的最基本的参数,需说明的是所创建的容器是交互式的,而不是一个运行后台服务的容器。
创建容器还可以使用docker create命令,如:
docker create -it ubuntu:latest
参数与docker run命令相同,与docker run命令不同的是docker create命令创建的容器不会自动启动。
2)查看运行的容器
docker ps
3)容器的退出
退出时如果想继续运行容器:按顺序按【ctrl+p】,【ctrl+q】
如果不想继续运行:按【ctrl+d】或输入exit
如果不是运行于后台的服务容器,则在容器退出后回自动停止运行,此时通过docker ps命令查看不到容器信息,需要使用docker ps -a命令查看。
4)容器的停止与启动
启动
docker start 容器名或id的前模糊匹配
停止
docker stop 容器的名称或id的前模糊匹配
5)复制文件
复制文件可以分为从容器到宿主机的复制,和从宿主机到容器的复制
1)从容器到宿主机的复制, 容器 -> 宿主机
命令格式:docker cp 容器名或ID:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
示例:将test.js从容器里面拷到宿主机的/opt路径下面
docker cp 容器名:某个文件路径 宿主机的存储路径
如:
docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt
2)从宿主机到容器的复制, 宿主机 -> 容器
命令格式:docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
示例:如果宿主机已经实现了换源,则可以通过如下命令将宿主机的配置文件拷到容器中,实现ubuntu容器换源
6)进入容器
docker cp 宿主机文件的路径 容器名称:存储路径
如:
docker cp /etc/apt/sources.list ubuntu:/etc/apt/
命令格式:docker exec -it 容器ID/容器NAME /bin/bash
示例:
docker exec -it 容器名或id前模糊匹配 /bin/bash
注意:只能进入运行中的容器。
6)查看容器信息
docker exec 容器名称或者id前模糊匹配 hostname
或者
docker exec 容器名称或者id前模糊匹配 env
推荐使用docker inspect命令查看容器信息,使用方式如下所示
docker inspect 容器名或id的前模糊匹配
该命令以json的方式返回容器的信息,内容比较多,可以只查询一种一部分,示例如下:
docker inspect -f {{.Config.Hostname}} 容器的名称或者id的前模糊匹配
注:inspect使用的是go语言模板,详细资料请参考Go语言模板。
7)容器删除
命令格式:docker rm 容器ID,(与删除镜像的命令很像,只少个i,镜像删除docker rmi 镜像名)
参数:
- -f, --force=false 是否强行终止并删除一个运行中的容器
- -1, --link=false :删除容器的连接 ,但保留容器
- -v, --volumes=false :删除容器挂载的数据卷