IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Docker2——数据卷、创建镜像、仓库搭建 -> 正文阅读

[系统运维]Docker2——数据卷、创建镜像、仓库搭建

数据卷(volume)

数据卷是一个虚拟目录,指向宿主机文件系统中的某个目录,这里感觉很难解释,直接引用黑马教程的视频截图,感觉很详细

?如上图所示,通过创建数据卷,作为一个中间人,来分别对应容器和系统文件里的配置文件,当修改文件系统里的文件被修改时,容器里对应的文件也会被修改,同理修改容器文件时,系统文件里的内容也会被修改,所有的操作都是通过连接数据卷来实现的

每创建一个数据卷,都会在系统文件/var/lib/docker/volumes目录下创建对应的数据卷目录,比如上图创建了一个html数据卷,就在/var/lib/docker/volumes目录下创建了一个/html目录

数据卷作用

  • 将容器与数据分离,实现解耦和
  • 通过数据卷可以在多个容器间实现共用和共享
  • 数据卷会一直存在,直到没有容器使用
  • 对数据卷的修改不会影响镜像

常用命令

docker volume[command]??

数据卷命令都是以docker volume?开头,后面接具体的命令操作

docker volume create html #创建一个名叫html的数据卷
docker volume inspect #显示一个或多个volume信息
docker volume ls #列出所有数据卷
docker volume prune #删除未使用的volume
docker volume rm #删除一个或多个指定的volume

挂载数据卷

挂载数据卷就是在创建容器时将容器里的某个文件和数据卷对应起来,完成数据卷的挂载,举例如下:

创建一个nginx容器,镜像可以去官网下载,然后我们通过挂在数据卷,修改index.html文件

docker run --name mn -p 80:80 -v html:/usr/share/nginx/html -d nginx
# -v是新知识,意思是挂载一个数据卷,命名为html,关联的文件位置是/usr/share/nginx/html
#因为镜像是dockerHub官网下载的,所以这个目录位置可以去官网看

#如果事先没有通过docker volume create html创建数据卷,系统也会智能的根据-v条件创建一个对应的数据卷

# mn指的是自定义的容器名称
# -p后面将主机端口和容器端口映射,左面是主机端口,右面是容器端口
# -d后台运行容器
# nginx 镜像名字

?这时候我们就不需要像以前那样去容器内部修改文件了,直接在外部使用vi index.html?命令修改文件

修改后保存退出,然后访问ip自己设置的ip,效果如下?

目录挂载?

还有一种方式是直接自定义目录或者文件与容器内的指定目录或文件相对应,我们称之为目录挂载

docker run --name mn -p 80:80 -v tmp/test:/usr/share/nginx/html -d nginx 
# -v tmp/test:/usr/share/nginx/html  冒号左边是自定义的宿主机目录,冒号右面的是容器内的目录
# 同理 -v tmp/test2/index.html:/usr/share/nginx/html/index.html  冒号左边是自定义的宿主机文件,冒号右面的是容器内的文件

#理论上是这样的,但我还没试过!!!

总的来说数据挂载耦合度低,并且直接交给docker管理,缺点是docker管理目录,目录较深不好找

目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看

镜像结构,镜像是分层结构,每一层成为一个Layer

  • BaseImage层:包含基本的系统函数库、环境变量、文件系统,是最底层结构
  • Entrypoint:入口,是镜像中应用启动的命令
  • 其他:在BaseImage基础上添加依赖、安装程序、完成整个安装和配置

自定义镜像步骤

在创建镜像之前,首先对Dockerfile进行介绍,dockerfile就是一个文本文件,其中包含一个个的指令,阿斯顿用指令来说明要执行什么操作来构建镜像,每一个指令都会形成一层Layer,文件内容如下:

FROM ubuntu:16.04  #指定基础镜像

ENV JAVA_DIR=/usr/local #配置环境变量 配置jdk的安装目录

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

#安装jdk 解压后重命名
RUN cd $JAVA_DIR && tar -xf ./jdk.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

  • 创建镜像步骤如下:
  1. 创建一个空文件夹,这里取名叫做docker-demo
  2. 将自己准备好的java项目打包成架包,上传到该文件夹中
  3. 准备好jdk文件,可以去网上找一个jdk1.8.tar.gz,上传到docker-demo中
  4. 编写一个该文件夹编写一个DockerFile文件
  5. 在docker-demo文件夹中运行如下命令
    docker build -t javaweb:1.0 .
    #这里是创建一个名为javaweb的镜像,版本取名1.0,后面有一个空格后的'.',这个点表示的是dockerfile所在的目录

java:8-alpine镜像

该镜像把dockerfile文件里的配置变量以及安装jdk等步骤都已经完成了,所以我们可以直接使用该镜像来简化步骤,编辑dockerfile如下

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


#复制java项目的包
COPY ./docker-demo.jar /tmp/app.jar


#暴露端口
EXPOSE 8090

#入口 java项目启动命令
ENTRYPOINT java -jar /tmp/app.jar

这样做可以简化一些构建镜像时的重复步骤

DockerCompose

Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,无需手动一个个的创建和运行容器。? ?Compose是一个文本文件,通过指令定义集群中的每个容器如何运行

具体网上查询,挺复杂的,先有个概念,用到的时候再去看

Docker镜像仓库

镜像仓库分为公有和私有两种:

公共仓库:比如DockerHub、阿里云镜像服务等

私有仓库:用户本地自己搭建的镜像仓库

搭建本地仓库方式有两种:

  1. 简化版镜像仓库? Docker Registry是一个基础版的Docker镜像仓库,具备仓库管理的完整功能,但没有图形化界面 。搭建命令如下
    docker run -d \
        --restart=always \
        --name registry \   #自定义容器名字
        -p 5000:5000 \  #端口号
        -v registry-data:/var/lib/registry \  #数据卷挂载
        registry   #镜像名称,如果没有该镜像会自动下载
    
    #本质上就是根据registry镜像创建了一个容器

    然后通过?vi /etc/docker/daemon.json 命令修改,配置Docker信任地址

    ?然后保存退出,重新加载刚才的文件并重启docker,命令如下

    systemctl daemon-reload  #重新加载文件
    systemctl restart docker #重启docker
  2. 第二种方法需要通过DockerCompose来部署带有图形化界面的仓库,感觉好麻烦就没去弄,需要的时候网上去找? 要创建一个docker-compose.yml文件并做如下配置

    version: '3.0'
    services:
      registry:
        image: registry
        volumes:
          - ./registry-data:/var/lib/registry
      ui:
        image: joxit/docker-registry-ui:static
        ports:
          - 8080:80    
        environment:
          - REGISTRY_TITLE=小鱼   #这里是仓库名字
          - REGISTRY_URL=http://registry:5000
        depends_on:
          - registry    #表示依赖于上面那个registry镜像

上传和下载镜像到私有仓库

上传:??

#先重命名要推送的镜像
docker tag nginx:latest 192.168.65.129:5000/nginx:1.0  
#这个命令是把nginx:latest镜像重命名为192.168.65.129:5000/nginx:1.0 ,其中这个ip是主机ip,端口是创建私有仓库设置的端口,后面是名字和版本,可以随便取

docker push 192.168.65.129:5000/nginx:1.0  #开始推送到私有仓库

因为我创建的是非图形化界面,所以即使访问私有仓库后也不可见,效果如下

?但实际上我可以把刚才的镜像给拉取下来,证明了我是上传成功了的

拉取命令

docker pull 192.168.65.129:5000/nginx.1.0

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-08 14:12:36  更:2021-12-08 14:14:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 8:17:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码