微服务14--Docker

 初识Docker

项目部署问题

大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:

1、依赖关系复杂,容易出现兼容性问题

2、开发、测试、生产环境有差异

 Docker如何解决依赖的兼容问题的?

1、将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包

2、将每个应用放到一个隔离容器去运行,避免互相干扰

 

 不同环境的操作系统不同,Docker如何解决?

我们先来了解一下操作系统结构

其实所有的Linux内核的操作系统都可以分为两次

一层为共享的内核,都为Linux

        内核: 负责与计算机硬件交互,提供操作硬件的指令

另一层为上层的系统应用,不同操作系统的上层系统应用不同

        系统应用:封装内核指令为函数,便于程序员调用

        用户程序基于系统函数库实现功能

 Docker如何解决不同系统环境的问题?

1、Docker将用户程序与所需要的调用的系统(比如Ubuntu)函数库一起打包

2、Docker运行到不同操作系统时,直接基于打包的函数库,借助于操作系统的Linux内核来运行

 Docker与虚拟机

1、Docker是一个系统进程;虚拟机是操作系统中操作系统

2、Docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般

 Docker架构

 镜像和容器

镜像(Image):Docker将应用程序及其所需要的依赖、函数库、环境、配置等文件打包在一起。

容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见

 

 Docker和DockerHub

DockerHub:是一个Docker镜像的托管平台。这样的平台称为Docker Registry。

国内也有类似于DockerHub的公开服务,比如网易云镜像服务、阿里云镜像库等。

 

Docker是一个CS架构的程序,由两部分组成:

1、服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等

2、客户端(client):通过命令或ResrAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令

 安装Docker

使用Docker

镜像相关命令

镜像名称一般分为两部分组成:【repository】:【tag】

在没有指定tag时,默认是latest,代表最新版本的镜像

 镜像操作命令

 查看docker中的所有命令

docker --help

案例1:从DockerHub中拉取一个Nginx镜像并查看

1.首先去镜像仓库搜索nginx镜像

2.通过命令:docker pull nginx   根据查看到的镜像名称,拉取自己需要的镜像

 3.通过命令:docker images   查看拉取到的镜像

 

案例2:利用docker save将nginx镜像导出磁盘,然后通过load加载回来

        步骤一:利用docker xx --help命令查看docker save和docker load的语法

        步骤二:利用docker tag 创建新镜像munginx1.0

        步骤三:使用docker save导出镜像到磁盘

docker save -o nginx.tar nginx:latest

docker rmi nginx:latest

docker load --help

docker load -i nginx.tar

练习:去DockerHub搜索并拉取一个Redis镜像

        1.去DockerHub搜索Redis镜像

        2.查看Redis镜像的名称和版本

        3.利用docker pull命令拉取镜像

        4.利用docker save命令将redis:lates打包为一个redis.tar包

        5.利用docker rmi删除本地的redis:latest

        6.利用docker load重新加载redis.tar文件

docker pull redis

docker images

docker save -o redis.tar redis:latest

docker rmi redis:latest

docker load -i redis.tar

容器相关命令

 

 案例1:创建运行一个Nginx容器

        步骤一:去docker hub查看Nginx的容器运行命令

        命令解读:

                docker run : 创建并运行一个容器

                --name:给容器起一个名字,比如叫做mn

                -p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口

                -d:后台运行容器

                nginx:镜像名称,例如nginx

docker run --name containerName -p 80:80 -d nginx

案例2:进入Nginx容器,修改HTML文件内容,添加“欢迎您”

        步骤一:进入容器。进入刚刚创建的nginx容器

        命令解读:

                docker exec:进入容器内部,执行一个命令

                -it:给当前进入的容器创建 一个标准输入、输出中断,允许我们与容器交互

                mn:要进入的容器的名称

                bash:进入容器后执行的命令,bash是一个linux终端交互命令

docker exec -it mn bash

        步骤二:进入nginx的HTML所在的目录/usr/share/nginx/html

cd /usr/share/nginx/html

        步骤三:修改index.html的内容

sed -i 's#Welcome to nginx#欢迎您#g' index.html
sed -i 's#<head>#<dead><meta charset="utf-8">g' index.html

    练习1:创建并运行一个redis容器,并且支持数据持久化

        步骤一:到DockerHub搜索Redis镜像

        步骤二:查看Redis镜像文档中的帮助信息

        步骤三:利用docker run命令运行一个Redis容器

docker run --name mr -p 6379:6379 -d redis redis-server --appendonly yes

docker exec -it mr bash

redis-cli

keys *

set num 666

gei num

exit

exit

数据卷

容器与数据耦合的问题

 数据卷(volume):是一个虚拟目录,指向宿主机文件系统中的某个目录

 操作数据卷

数据卷操作的基本语法如下:

docker volume [COMMAND]

docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:

create创建一个volume
inspect显示一个或多个volume的信息
ls列出所有的volume
prune删除未使用的volume
rm删除一个或多个指定的volume

案例1:创建一个数据卷,并查看数据卷是否在主机的目录位置

        1.创建数据卷

docker volume create html

        2.查看所有数据

docker volume ls

        3.查看数据卷详细信息卷

docker volume inspect html

 挂载数据卷

我们在创建容器的时候,可以通过-v参数挂载一个数据卷到某个容器目录

 案例1:创建一个nginx容器,修改容器内的html目录内的index。html内容

        需求说明:上个案例中,我们进入nginx容器内部,已经知道nginx的html目录所在的位置/usr/share/nginx/html,我们需要把这个目录挂载到html这个数据卷上,方便操作其中的内容。

        提示:运行容器时使用-v参数挂载数据卷

        1.创建容器并挂载到数据卷到容器内的html目录

docker run --name mn -p 80:80 -v html:/usr/share/nginx/html -d nginx

         2.进入html数据卷所在位置,并修改html内容

docker inspect html

cd /var/lib/docker/volumes/html/_data

vi index.html

自定义镜像

镜像的结构

 

 什么是Dockerfile

Dockerfile就是一个文本文件,其中包含一个个的指令,用指令来说明要执行什么操作来构建镜像。没一个指令都会形成一层Layer

 案例1:基于Ubuntu镜像构建一个新镜像,运行一个java项目

 什么是dockerCompose

 DockerCompose部署微服务集群

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值