微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。
Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?
Docker如何解决开发、测试、生产环境有差异的问题?
Docker是一个快速交付应用、运行应用的技术,具备下列优势:
Docker和虚拟机的差异:
docker是一个系统进程;虚拟机是在操作系统中的操作系统
docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般
镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器进程做隔离,对外不可见。
一切应用最终都是代码组成,都是硬盘中的一个个的字节形成的文件。只有运行时,才会加载到内存,形成进程。
而镜像,就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包。这个文件包是只读的。
容器呢,就是将这些文件中编写的程序、函数加载到内存中允许,形成进程,只不过要隔离起来。因此一个镜像可以启动多次,形成多个容器进程。
我们要使用Docker来操作镜像、容器,就必须要安装Docker。
Docker是一个CS架构的程序,由两部分组成:
服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等
客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。
1)更新yum包
yum update
2)安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
3)设置yum源(阿里仓库)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4)查看远程仓库中所有docker版本
yum list docker-ce --showduplicates | sort -r
5)安装docker
yum install docker-ce #安装最新版
yum install docker-ce-20.10.1-3.el7 #安装指定版本(推荐安装此方式)
如需指定版本,则使用如下命令 yum install
6)修改Docker远程仓库
Docker的使用过程中,需要从远程仓库下载镜像,但是默认为国外网站,所以在下载时会出现下载连接超时导致下载失败,因此需要将远程仓库修改为国内镜像仓库
本次使用阿里云镜像
登录阿里云,进入 “容器镜像服务” 控制台
容器镜像服务:https://www.aliyun.com/product/acr
注册后,可以在“镜像工具-镜像加速器” 来获得个人的 docker 加速链接地址,地址找到后,执行下面的命令:
#创建目录地址
mkdir -p /etc/docker
#创建 daemon 文件
vi /etc/docker/daemon.json
在 daemon.json 文件中添加下面内容:
{
"registry-mirrors": ["自己个人的docker 加速地址"]
}
6)重新启动服务
systemctl daemon-reload
systemctl restart docker
执行命令查看结果
docker info
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source /usr/share/bash-completion/completions/docker
首先来看下镜像的名称组成:
- docker run:创建并运行一个容器,处于运行状态
- docker pause:让一个运行的容器暂停
- docker unpause:让一个容器从暂停状态恢复运行
- docker stop:停止一个运行的容器
- docker start:让一个停止的容器再次运行
- docker rm:删除一个容器
docker run命令的常见参数有哪些?
- --name:指定容器名称
- -p:指定端口映射
- -d:让容器后台运行
查看容器日志的命令:
- docker logs
- 添加 -f 参数可以持续查看日志
查看容器状态:
- docker ps
- docker ps -a 查看所有容器,包括已经停止的
实现数据与容器分离的方式:
绑定宿主机上的文件夹: 此文件夹自定义
绑定数据卷: 此文件夹由docker指定
绑定宿主机上的文件: 自定义文件的位置
**数据卷(volume)**是一个虚拟目录,指向宿主机文件系统中的某个目录。
数据卷操作的基本语法如下:
docker volume [COMMAND]
docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:
数据卷的作用:
数据卷操作:
docker run \ // 创建容器
--name mysql \ // 给容器起名
-e MYSQL_ROOT_PASSWORD=root \ // 设置root账户密码
-p 3306:3306 \ // 端口映射
-d \ // 后台运行
-v /tmp/mysql/data:/var/lib/mysql \ // 绑定宿主机上的文件夹
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/my.cnf \ // 绑定宿主机上的文件
--privileged \ // 设置超级管理员远程访问权限
mysql:5.7 // 镜像名称
docker run的命令中通过 -v 参数挂载文件或目录到容器中:
数据卷挂载与目录直接挂载的
Dockerfile的本质是一个文件,通过指令描述镜像的构建过程
Dockerfile的第一行必须是FROM,从一个基础镜像来构建
基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine
Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!
# 安装
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 修改权限
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
[root@localhost docker-demo]# docker-compose --help
利用Docker来定义和构建一个多容器的应用
使用方式:
docker-compose [-f ...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help
Options:
-f, --file FILE 指定一个 compose 文件,
(默认: docker-compose.yml)
-p, --project-name NAME 指定project名字
(默认: 目录名称)
--verbose 显示更多日志
--log-level LEVEL 日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL)
-v, --version 打印版本并退出
-H, --host HOST Daemon socket to connect to
Commands:
build 构建多个service
config 校验 Compose 文件,格式是否正确,若正确则显示配置,
若格式错误显示错误原因
down 停止并删除 容器, 网络, 镜像, 和 数据卷
exec 进入一个指定的容器
help Get help on a command
images 列出该Compose中包含的各个镜像
kill 通过发送 SIGKILL 信号来强制停止服务容器
格式为 docker-compose kill [options] [SERVICE...]
logs 查看服务容器的输出日志
格式为 docker-compose logs [options] [SERVICE...]。
pause 暂停一个容器
port 打印某个容器端口所映射的公共端口
ps 列出项目中目前的所有容器
pull 拉取服务依赖的镜像
push 推送服务依赖的镜像到 Docker 镜像s仓库
restart 重启项目中的服务
rm 删除停止的容器(要先停止容器)
run 在某个服务上运行指令
scale 设定某个容器的运行个数
start 启动多个 services
stop 停止多个 services
top 查看各个服务容器内运行的进程。
unpause 恢复处于暂停状态中的服务。
up 创建并启动多个service的容器
version Show the Docker-Compose version information