0_3 springcloud_Docker学习

(内容为学习内容,不排除内容出错,若读者发现,可与作者沟通,谢谢)

Docker:Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
1. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 2.容器是完全使用沙箱机制,相互之间不会有任何接口

0_3 springcloud_Docker学习_第1张图片

Docker 是一个开源的应用容器引擎。
让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

特性:

  1. 将程序及依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统;
  2. 运行时利用沙箱机制形成隔离容器,各个应用互补干扰;
  3. 启用、移除都可以通过一行命令完成、方便快捷

Docker怎么解决 不同系统 依赖关系复杂,不同组件依赖的兼容性问题?

  1. Docker允许开发中将应用、依赖、函数库、配置一起打包,现场可移植镜像;
  2. Docker运行在日期中,使用沙箱机制,相互隔离
    解决不同环境差异问题——Docker镜像中包含完整 运行环境,可在任意Linux操作系统上运行;

Docker与虚拟机区别:
Docker将应用和函数库依赖等打包成镜像,(直接和内核交互),是一个系统进程;虚拟机是操作系统中的操作系统;
docker体积小、启动速度快、性能号;虚拟机体积大、启动速度慢、性能一般;
virtual machine: 在操作系统模拟硬件设备,然后运行另一个操作系统,利用技术Hypervisor
0_3 springcloud_Docker学习_第2张图片

Docker架构——镜像、容器、镜像共享

1.镜像:将应用程序及其依赖、环境、配置打包在一起的行为(只可读 )
2.容器:镜像运行起来形成的 进程 就是容器(隔离,对外不可见),一个镜像可以有效多个容器。写数据时通过镜像共享的内容,copy到 容器 自己独立的文件系统中操作。

3.镜像共享——DockerHub
DockerHub,是Docker 镜像托管平台(镜像托管服务器)。(类似的镜像托管平台称为,Docker Registry)
国内类似于DockerHub的公开服务,如 网易云镜像服务 、 阿里云镜像库

Docker如何完成镜像操作/拉去镜像/运行容器:?
Docker结构(CS架构),两部分组成:server、client
client:通过命令或RestAPI向Dockers服务端发送指令。可在本地或远程向服务端发送命令
server: Docker daemon守护进程负责处理Docker指令,管理镜像、容器
0_3 springcloud_Docker学习_第3张图片

本地发送命令:
命令:
构建镜像:docker build
拉去镜像:docker pull
运行镜像,创建容器:docker run

Centos7 安装卸载Docker:
0.1卸载旧版本或安装错误的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

0.2安装yum工具:

yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken

0.3#设置docker镜像源,将docker仓库repo配置为阿里云的

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


1.安装命令: yum install -y docker-ce ( -y :安装时不询问 ,-ce社区版 ) 安装后打开firewall端口
2.查看是否安装成功:
docker info
2.启动:
systemctl start docker
3.查看是否正常运行
sysemctl status dockere 或者docker -v
4.重启:
system restart docker
5.查看版本
docker -v

配置镜像,镜像加速,此处使用阿里云:

阿里云加速器:注册阿里云开发账户(免费的)后,访问阿里的这个链接就注册看到加速器地址: https://cr.console.aliyun.com/#/accelerator
相关操作在该地址中也有


Docker基本操作:镜像操作、容器操作、数据卷(容器数据管理)
一 镜像操作

镜像命名: 命名规范repository:tag(镜像名称:镜像版本(latest最新))

镜像的CRUD
操作镜像方式

  1. 本地构建镜像:通过命令docker build 将从本地 名为 Dockerfile 文件中 拉取构建成镜像
  2. 私服/Docker Registry镜像服务器 拉去镜像:docker pull 具体镜像名

DockerHub镜像服务器地址:https://hub.docker.com/
镜像拉取:docker pull 镜像名:版本
详细命令,利用docker --help 在linux系统查看;

1.查看镜像:
docker images
2.删除镜像
docker rmi
3.分享镜像:
方式1:推送到公司的 私服:docker push
方式2:将镜像打包成压缩文件(U盘拷贝):
docker save -o 指定目录/压缩文件名 镜像名(nginx:具体版本) (压缩前最好使用docker images 查看需要压缩的镜像)
加载压缩包为镜像:docker load -i 镜像压缩包名

容器相关命令
容器运行状态:运行、暂停、停止
创建并运行容器:docker run
暂停容器:docker pause 恢复运行:docker unpause
停止容器:docker stop 恢复运行:docker start

查看运行容器及状态:docker ps (参数 -a:可运行所有)
查看容器运行日志:docker logs
进入容器执行命令:docker exec 进入后退出:exit

删除指定容器:docker rm 具体容器名

暴漏外部端口例子:
$: docker run --name some-nginx -d -p 8080:80 some-content-nginx(基于镜像名称:版本(不写为最新版))
–name somenginx(指定容器名) -d:后台运行 -p :宿主端口于容器端口映射(宿主端口:容器端口)
案例:
docker exec -int mn bash
docker exec:截取容器内部执行一个命令 ; -it:给当前容器创建标准输入输出终端,运行于容器交互 ; mn:容器名称;
bash:此为linux系统终端交互命令
修改容器内文件:(此种做法不推荐,推荐的是使用 数据卷)
sed -i ‘s#原内容#替换内容#g’ 文件名
如:sed -i ‘s###g’ index.html

数据卷(volume)虚拟目录,指向宿主机 文件系统中的目录
容器与数据耦合问题:不便修改、数据不可复用、升级维护困难

volume,虚拟目录,指向宿主机 文件系统中的目录:/var/lib/docker/volumes/映射名

数据卷基本语法:docker volume 具体命令 (docker volume:操作数据卷 )具体使用,docker --help
具体命令:create:创建volume、 inspect:显示一个或多个volume信息
ls:列出volue prune:删除未使用的volue rm :删除指定范围的volue
数据卷的作用:将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全

将数据卷 与 日期目录 挂载

docker run /
--name docker容器名
-v 数据卷名:容器内需挂载文件全路径目录 \
-p 8080:80
nginx \

0_3 springcloud_Docker学习_第4张图片

注:第3行:如果数据卷名未创建,则自动创建
查看volume数据卷信息,可以看到数据卷的具体目录(其实具体目录是宿主机/var/lib/docker/volumes/下的目录);

数据卷可以与容器挂载、 宿主目录 也可以 直接与容器挂载
宿主机目录与容器挂载:docker volume -v 宿主机目录/文件:容器内目录/文件

数据卷挂载和目录直接挂载的区别:
数据卷挂载:挂载耦合度低,由docke管理目录,单目录较深,不好找
目录直接挂载:耦合度高,自己管理目录,目录易查询


自定义镜像:

Dockerfile文件 自定义镜像
镜像:将应用程序及其所需要的系统函数库、环境、配置、依赖带包而成
镜像结构:

....	
5Layer层:应用
4Layer层:Entrypoint入口 ->  定义镜像运行入口,一般是程序启动的脚本和参数	
3Layer层:install 应用/配置配置文件	
2Layer层:copy应用安装包
1Layer层:BaseImage层:基础镜像层  ->  系统依赖的函数库、环境、配置、文件等

Dockerfile,包含一条条指令(Instruction)的文本文件。每条指令(来说执行什么操作,来构建镜像)形成一个Layer层;
0_3 springcloud_Docker学习_第5张图片

案例基于Ubuntu 镜像构建一个新镜像,允许Java项目:

Dockerfile文件:

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安装JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

为简化上列代码—— 写好的镜像,基于java:8-alpine镜像,将Java项目构建未镜像

# 指定基础镜像
FROM java:8-alpine

# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

0_3 springcloud_Docker学习_第6张图片

docker build -t 镜像名:版本 . (. :表是Dockfile所在的目录为 当前文件夹)
0_3 springcloud_Docker学习_第7张图片
简化Dockerfile 文件,的镜像 Java:8-alpine
只需要 修改Dockerfile 的
0_3 springcloud_Docker学习_第8张图片


微服务集群部署
集群部署——Docker Compose

DockerCompose,基于Compose文件快速的部署分布式应用,无需一个个创建和运行容器。

Compose文件,一个文本文件,通过指令定义集群中的每个容器如何运行;

具体官网查询:https://docs.docker.com/compose/compose-file/

COmpose文件语法模板:
0_3 springcloud_Docker学习_第9张图片

version: "3.8"     #语法版本

services: 
  mysql:
    image: mysql:5.7.25
    environment:
      MYSQL_ ROOT_ PASSWORD: 123
    volumes:    #数据卷
      - /tmp/mysql/data:/var/1ib/mysqL
      - /tmp/mysql/ conf/hmy. cnf:/etc/mysqL/ conf . d/hmy . cnf
  web:
    build: .     #构建镜像,。从当前目录构建
    ports:      #构建容器
       - 8090:8090

DockerCompose的下载安装:

  1. 安装到:将 docker-compose文件 ,copy到 /usr/local/bin/ 下
  2. 修改权限:chmod +x /usr/local/bin/docker-compose
  3. Base自动补全:
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

可能出错,域名无法解析,执行以下命令后,再执行补全命令
echo "199.232.68.133" raw.githubusercontent.com" >> /etc/hosts

微服务集群部署——利用DockerCompose

部署命令:docker-compose up -d (进入到项目文件中(此文件是由各种微服务jar包及其依赖和compose文件组成的项目 ),docker-compose是命令)
可能出现服务先后问题,docker-compose restart 重启微服务
部署实现思路:
0_3 springcloud_Docker学习_第10张图片

搭建 私有仓库:

Docker Registry镜像注册中心:
管理各镜像的地方——Docker镜像仓库(之一官方公共镜像仓库DockerHub)
公共仓库:国内:网易云镜像服务、DaoCloud镜像服务、阿里云镜像服务

搭建私有镜像仓库,镜像管理;

搭建镜像仓库基于官方提供的Docker Registry
地址:https://hub/docker.com/ /registry

0_3 springcloud_Docker学习_第11张图片

一定位置 新建registry-ui 文件夹,新建docker-compose 文件:touch docker-compose.yml
内容下:
0_3 springcloud_Docker学习_第12张图片

启动:docker-compose.yml

把各种镜像 推到 私有镜像仓库
0_3 springcloud_Docker学习_第13张图片

你可能感兴趣的:(分布式,docker,spring,cloud,学习)