前段时间一直在改论文,不知不觉改了半个月,今天继续学习微服务的知识,今天的主要任务就是学习Docker,包括了解docker的工作原理、基本操作、Dockerfile自定义镜像,Docker-Compose对镜像进行集群部署,以及Docker镜像服务等。
目录
一、初识Docker
1.1、Docker的工作原理
1.2、Docker与虚拟机
1.3、Docker架构
1.4、Docker的安装
二、Docker基本操作
2.1、镜像命令
2.2、容器命令
2.3、数据卷命令
三、Dockerfile自定义镜像
3.1、镜像结构
3.2、自定义镜像
四、DockerCompose
4.1、初识Compose
4.2、DockerCompose部署微服务集群
Docker是一个快速交付应用和运行应用的技术,可以将程序及依赖打包成镜像,可以迁移到任意的linux系统,不同应用采用沙箱机制隔离,各个应用互不干扰。
首先看一下Docker如何解决兼容性问题的,防止不同应用的依赖之间相互干扰,一般会将依赖进行打包,然后将每个应用进行隔离起来,这样就可以避免相互干扰,当然这只针对某一个操作系统。
不同环境的操作系统不同,Docker如何解决呢?
答:Docker镜像包含完整的运行环境,包括函数库,仅依赖系统的Linux内核等,故在不同的Linux操作系统中均可以正常运行。
下面对Docker的原理进行总结:
我们了解一下Docker与虚拟机的区别,docker可以理解为是一个系统的进程 ,虚拟机则是操作系统中的操作系统。docker的体积小,启动速度更快。综上:现在企业作服务部署,选择docker,而不选择虚拟机。
镜像:将程序、依赖、环境、配置等打包在一起。
容器:镜像运行起来就是容器,一个镜像可以有多个容器。
我们看一下Docker架构,Docker是C/S架构的程序,在客户端向服务端发送指令,服务端处理指令,操作镜像或者容器。DockerHub是一个镜像托管服务器,类似的还有阿里云镜像服务器等。
如果已经安装过的docker需要卸载,可以在linux命令行输入下面指令卸载docker,如下:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
下面开始安装docker,首先要虚拟机联网,安装yum工具。
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
更新本地镜像源,如下所示:
# 设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
输入命令安装docker,如下:
yum install -y docker-ce
docker安装完成之后,先关闭防火墙,然后启动docker,如下:
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
通用docker启动相关命令:
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
输入以下命令查看docker版本,如下:
docker -v
一般来说,docker官方的镜像仓库比较慢,因此我们配置国内的镜像仓库,如下所示:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://2keavi14.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
我们先看一下docker中的一些常用命令,如下所示,其中包括构建镜像、将镜像推送到服务、从服务拉去镜像、查看镜像、删除镜像、保存镜像为一个压缩包、加载压缩包为镜像。
使用docker pull nginx 指令拉去镜像,如下:
可以通过docker images命令去查看镜像,如下:
通过docker save保存镜像为压缩包,通过docker rmi删除本地镜像。
使用docker load 指令加载压缩包为镜像,如下:
下面看一个镜像练习,如下:
上述练习涉及到的镜像指令如下,包括服务器拉去镜像,镜像打包,删除本地镜像,重新加载压缩包为本地镜像。
我们首先看一下容器相关的命令有哪些,如下所示,容器相关的命令包括运行、停止,暂停、进入容器、查看容器日志、查看所有运行的容器及状态等。
我们首先来看一个案例,创建一个运行的Nginx容器,命令如下所示:
创建nginx容器,浏览器访问,查看容器,并打印容器日志。
进入容器内部,完成命令修改,我们看一下下面的案例。
docker容器相关命令的一个小总结如下:
需要先输入指令创建一个redis容器,如下所示。
$ docker run --name mr -p 6379:6379 -d redis redis-server --save 60 1 --loglevel warning
然后 进入容器进行操作如下:
容器与数据存在耦合问题,所以我们需要学习数据卷,容器与数据的耦合导致了不便于修改,数据不复用,升级维护困难等问题。
docker数据卷操作的常见命令如下所示,具体包括:创建、显示、列出 、删除数据卷等。
下面对数据卷的作用做一个总结,数据卷是将容器与数据进行分离,方便操作容器内的数据,保证数据安全,常用的数据卷操作命令如下所示:
下面看一下数据卷挂载案例1,将数据卷挂在到容器中,如下:其中-v是数据卷挂在指令,-v前面是数据卷的名称,后面是数据卷挂在到的目录,如果容器运行中volume不存在,docker会自动创建,如下:
最后,对于数据卷挂在做个总结吧,具体如下:
镜像是将一系列依赖、程序、配置进行打包所组成的应用程序,镜像是分层结构,主要包括基础镜像层和入口层,中间的各层是每次操作后产生的层次。
我们先了解一下Dockerfile,它是一个文本文件,包含许多指令,来说明执行什么操作来构建镜像,每个指令都会形成一个layer,常见的指令包括FROM、ENV、COPY、RUN、EXPOSE等
什么是DockerCompose呢,它是用来帮我们快速部署分布式应用的,不需要手动一个个去创建容器,它是一个文本文件,通过指令定义集群中的每个容器 如何运行。
可以直接使用如下指令进行下载安装,不过比较慢。
# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /u
也可以直接把下载好的docker-compose文件上传到上传到 /usr/local/bin/ 目录也可以。
然后修改文件权限。
# 修改权限
chmod +x /usr/local/bin/docker-compose
最后可以加上bash自动补全命令,这样输入相关操作会自动补全。
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /et
我们看一下如下案例,使用DockerCompose部署之前的微服务项目,具体如下: