• 03初始Docker


    一、初始Docker

    1.什么是Docker

    问题

    ①大型项目组件复杂,运行环境复杂,部署时依赖复杂,出现兼容性问题。

    ②开发,测试,生产环境有差异。不同的环境操作系统不同

    解决

    ①Docket将应用、依赖、函数库、配置一起打包,形成可移植镜像。每个应用放在隔离容器运行,避免相互干扰。

    ②Docker镜像包含完整的运行环境,包括系统库函数,仅依赖系统的Linux内核。可以在任意的linux系统运行。

     2.Docker架构

    镜像

    将应用程序及其依赖、环境、配置打包在一起

    容器

    镜像运行起来的就是容器,一个镜像可以运行多个容器

    Docker架构

    服务端:接收命令或远程请求,操作镜像或容器

    客户端:发送操作或者请求到Docker的服务端

    DockerHub

    一个镜像托管的服务器

    3.镜像操作命令

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

    systemctl start docker  # 启动docker服务

    ①去镜像仓库搜索nginx镜像

     ②在linux通过命令拉取到本地 docker pull nginx

     ③查看本地的镜像docker images

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

    ①把镜像包导出tar

    docker save -o nginx.tar nginx:latest

    ②把导出的tar加载到本地镜像

    docker load -i nignx.tar

     镜像操作有哪些?

    • docker images  查看镜像
    • docker rmi 删除镜像
    • docker pull 拉取镜像到本地
    • docker push 把镜像推到仓库
    • docker save 把镜像打包成tar
    • docker load 把tar文件加载到本地镜像

    4.容器相关命令

    ①docker run 创建容器

    ②docker pause 暂停容器

    ③docker unpause 暂停到运行容器

    ④docker stop 停止容器

    ⑤docker start 停止到运行容器

    ⑥docker ps 查看运行的容器的状态

    ⑥docker rm 删除指定容器

    ⑦docker logs 查看容器运行日志

    ⑧docker exec 进入容器执行其他命令

    5.Docker基本操作-容器

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

    命令: docker run --name mn -p 80:80 -d nginx

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

    ②--name给容器起了名字是mn

    ③-p虚拟机的端口与容器端口映射 虚拟机端口:容器端口

    ④-d 后台运行

    ⑤nginx镜像名称

    测试:

    查看运行容器的状态docker ps

     ①访问虚拟机的ip地址

    ②持续查看容器日志

    docker logs mn -f

     总结

     

    案例二: 进入Nginx容器,修改HTML文件内容,添加“Hello world”

    ①进入容器docker exec -it mn bash

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

    -it与容器交互

    mn进入容器的名称

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

    ②进入nginx的HTML所在目录 /usr/share/nginx/html

    cd /usr/share/nginx/html

    ③修改index.html的内容

    sed -i 's#Welcome to nginx# Hello world #g' index.html

    sed -i 's###g' index.html

    总结

    练习:进入redis容器,并执行redis-cli客户端命令,存入num=666

    ①创建并允许一个Redis容器

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

    ②进入redis容器

    docker exec -it redis bash

    ③执行redis-cli客户端命令

    redis-cli

    ④设置数据 set num 666

    ⑤获取数据get num

    二、数据卷Volume

    1.数据卷简介

    数据卷解决容器与数据耦合问题。将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全

    数据卷Volume是一个虚拟目录,指向虚拟机系统的某个目录(/var/lib/docker/volumes)

    容器目录与虚拟机目录相关联,容器与虚拟机修改同时更新。

    2.数据卷操作

    docker volume[写命令]

    ①create 创建一个volume

    ②inspect 显示一个或多个volume信息

    ③ls 列出所有的volume

    ④prune 删除未使用的volume

    ⑤rm 删除一个或多个指定的volume

    3.案例:创建一个数据卷,并查看数据卷在宿主机的目录位置

    ①创建数据卷html

    docker volume create html

    ②查看所有的数据卷

    docker volume ls

    ③查看数据卷的详细信息

    docker volume inspect

    ④删除指定的html数据卷,-f是强制删除

    docker volume rm -f html

    4.挂载数据卷-V(volume)

    创建容器时,通过-v参数来挂载一个数据卷到某个容器目录。

     

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

    ①创建容器并挂载数据卷到容器内的HTML目录

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

    -v 数据卷:容器目录的路径

    如果容器运行时volume的html不存在,会自动被创建出来

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

    # 查看html数据卷的位置

    docker volume inspect html

    # 进入该目录

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

    # 修改文件

    vi index.html

    三、Dockerfile自定义镜像

    概念:镜像将应用程序以及系统函数库,环境,配置,依赖打包而成。

    结构:以mysql镜像为例子

     

    ①基础镜像:mysql应用依赖的系统函数库,环境,配置,文件。

    ②层:在基础镜像基础上添加安装包,依赖,配置,每次操作后都形成一个层 。镜像是分层的

    ③入口:启动的脚本

    2.Dockerfile语法

    概念:Dockerfile是一个文本文件,包含一个个指令,用指令说明执行的操作来构建镜像。每一个指令形成一层Layer

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

    Dockerfile

    1. # 指定基础镜像
    2. FROM ubuntu:16.04
    3. # 配置环境变量,JDK的安装目录
    4. ENV JAVA_DIR=/usr/local
    5. # 拷贝jdk和java项目的包
    6. COPY ./jdk8.tar.gz $JAVA_DIR/
    7. COPY ./docker-demo.jar /tmp/app.jar
    8. # 安装JDK
    9. RUN cd $JAVA_DIR \
    10. && tar -xf ./jdk8.tar.gz \
    11. && mv ./jdk1.8.0_144 ./java8
    12. # 配置环境变量
    13. ENV JAVA_HOME=$JAVA_DIR/java8
    14. ENV PATH=$PATH:$JAVA_HOME/bin
    15. # 暴露端口
    16. EXPOSE 8090
    17. # 入口,java项目的启动命令
    18. ENTRYPOINT java -jar /tmp/app.jar

    步骤:

    ①新建一个空文件夹docker-demo,把资料复制在这个文件夹

    ②运行命令:

    docker build -t javaweb:1.0 .

    ③查看镜像:

    ④启动此镜像:

    docker run --name web -p 8090:8090 -d javaweb:1.0

    ⑤访问:

    http://192.168.137.129:8090/hello/count

    四、DockerCompose

    1.什么是DockerCompose

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

    ②Compose是一个文本文件,通过指令定义集群中每个容器怎样运行

     

    2.案例:将cloud-demo微服务集群利用DockerCompose部署

    ①查看课前资料提供的cloud-demo文件夹,里面已经编写好了docker-compose文件

    ② 修改自己的cloud-demo项目,将数据库、nacos地址都命名为docker-compose中的服务名

    ③使用maven打包工具,将项目中的每个微服务都打包为app.jar

    ④将打包好的app.jar拷贝到cloud-demo中的每一个对应的子目录中

    ⑤将cloud-demo上传至虚拟机,利用 docker-compose up -d 来部署

    http://192.168.137.129:10010/user/2?authorization=admin

    ⑥停止是docker-compose down

    五、Docker镜像仓库

    1.搭建私有镜像仓库

    ①配置Docker信任地址

    1. # 打开要修改的文件
    2. vi /etc/docker/daemon.json
    3. # 添加内容:
    4. "insecure-registries":["http://192.168.150.101:8080"]
    5. # 重加载
    6. systemctl daemon-reload
    7. # 重启docker
    8. systemctl restart docker

    ②创建Compose

    1. version: '3.0'
    2. services:
    3. registry:
    4. image: registry
    5. volumes:
    6. - ./registry-data:/var/lib/registry
    7. ui:
    8. image: joxit/docker-registry-ui:static
    9. ports:
    10. - 8080:80
    11. environment:
    12. - REGISTRY_TITLE=私有仓库
    13. - REGISTRY_URL=http://registry:5000
    14. depends_on:
    15. - registry

    ③部署

    docker-compose up -d

    2.向镜像仓库推送镜像

    ①推送镜像到私有镜像服务必须先tag

    docker tag nginx:latest 192.168.137.129:8080/nginx:1.0

    ②上传

    docker push 192.168.137.129:8080/nginx:1.0

    3.从镜像仓库拉取镜像

    docker pull 192.168.137.129:8080/nginx:1.0

    4.总结

  • 相关阅读:
    【 解决jsoncpp被多重引入问题add_library cannot create imported target “JsonCpp::JsonCpp“】
    halcon 车牌识别
    Python机器学习016:pytorch张量与数据类型
    python爬虫动态爬取需点击事件或下一步才可获取的内容
    国际期货投机有什么风险?目前正大怎么样?
    WorkPlus Meet本地化部署视频会议软件,助力企业实现安全高效的远程会议
    【CVE-2023-4357】Chrome-XXE 任意文件读取漏洞复现及原理解析
    基于低代码平台的PLM系统,实现科学业务管理
    Java 新技术:虚拟线程使用指南(二)
    C# 设置PDF表单不可编辑、或提取PDF表单数据
  • 原文地址:https://blog.csdn.net/jbkjhji/article/details/134006190