• 你熟悉Docker吗?


    你熟悉Docker吗?

    Docker是用来快速构建、运行、管理应用的工具,是用来帮助部署项目及项目所需要依赖的组件。

    快速入门

    Docker安装

    安装教程参考Docker官方文档

    1.卸载旧版

    首先如果系统中已经存在旧的Docker,则先卸载:

    yum remove docker \
        docker-client \
        docker-client-latest \
        docker-common \
        docker-latest \
        docker-latest-logrotate \
        docker-logrotate \
        docker-engine
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    2.配置Docker的yum库

    首先要安装一个yum工具

    yum install -y yum-utils
    
    • 1

    安装成功后(出现 “完毕” 字样),执行命令,配置Docker的yum源

    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
    • 1
    3.安装Docker

    最后,执行命令,安装Docker

    yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
    • 1
    4.启动和校验
    # 启动Docker
    systemctl start docker
    
    # 停止Docker
    systemctl stop docker
    
    # 重启
    systemctl restart docker
    
    # 设置开机自启
    systemctl enable docker
    
    # 执行docker ps命令,如果不报错,说明安装启动成功
    docker ps
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    5.配置镜像加速

    这里以阿里云镜像加速为例。

    5.1.注册阿里云账号

    首先访问阿里云网站注册一个账号。

    5.2.开通镜像服务

    在首页的产品中,找到阿里云的容器镜像服务

    在这里插入图片描述

    点击后进入控制台:

    在这里插入图片描述

    首次可能需要选择立刻开通,然后进入控制台。

    5.3.配置镜像加速

    找到镜像工具下的镜像加速器

    在这里插入图片描述

    页面向下滚动,即可找到配置的文档说明:

    在这里插入图片描述

    具体命令如下:

    # 创建目录
    mkdir -p /etc/docker
    
    # 复制内容,注意把其中的镜像加速地址改成你自己的
    tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
    }
    EOF
    
    # 重新加载配置
    systemctl daemon-reload
    
    # 重启Docker
    systemctl restart docker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    部署MySQL

    先停掉虚拟机中的MySQL,确保虚拟机已经安装了Docker,且网络开通的情况下,执行下面的命令即可安装MySQL

    docker run -d \
      --name mysql \
      -p 3306:3306 \
      -e TZ=Asia/Shanghai \
      -e MYSQL_ROOT_PASSWORD=123 \
      mysql
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    镜像和容器

    • 利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。
    • 镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。
    • Docker会在运行镜像时创建一个隔离环境,称为容器(container)。
    • 存储和管理镜像的服务就是镜像仓库DockerHub是目前最大的镜像仓库,其中包含各种常见的应用镜像

    命令解读

    • docker run:创建并运行一个容器,-d是让容器在后台运行
    • --name mysql:给容器起个名字,必须唯一
    • -p 3306:3306:设置端口映射
    • -e KEY=VALUE:是设置环境变量
    • mysql:指定运行的镜像的名字
      • 镜像命名规范:一般分两部分组成:[repository]:[tag]repository是镜像名,tag是镜像的版本。没有指定tag时,默认是latest,代表最新版本的镜像

    Docker基础

    常用命令

    Docker最常见的命令就是操作镜像、容器的命令,详见官方文档

    在这里插入图片描述

    命令说明
    docker pull将远端镜像拉取到本地
    docker images查看所有本地镜像
    docker rmi删除指定镜像
    docker build自定义构建镜像
    docker save将打包镜像保存到本地
    docker load加载镜像
    docker push推送本地镜像到远端镜像仓库
    docker run创建并运行容器
    docker stop停止容器
    docker start启动容器
    docker rm删除容器
    docker ps查看当前容器运行状态
    docker logs查看容器日志
    docker exec进入容器内部

    数据卷

    数据卷( volume ):是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。它将宿主机目录映射到容器内目录,方便操作容器内文件,或者方便迁移容器产生的数据

    数据卷挂载
    • 在创建容器时,利用-v 数据卷名:容器内目录,完成挂载
    • 容器创建时,如果发现挂载的数据卷不存在时,会自动创建
    命令说明
    docker volume create创建数据卷
    docker volume ls查看所有数据卷
    docker volume rm删除指定数据卷
    docker volume inspect查看某个数据卷的详情
    docker volume prune清除数据卷
    本地目录挂载
    • 在执行docker run命令时,使用-v 本地目录∶容器内目录,可以完成本地目录挂载
    • 本地目录必须以 “/”“./" 开头,如果直接以名称开头,会被识别为数据卷而非本地目录
      • -v mysql:/var/lib/mysql会被识别为一个数据卷叫 mysql
      • -v ./mysql:/var/lib/mysql会被识别为当前目录下的 mysql目录

    自定义镜像

    镜像中包含了应用程序所需要的运行环境、函数库、配置、以及应用本身等各种文件。这些文件分层打包而成,构建镜像的过程就是把上述文件打包的过程。

    镜像结构
    • 入口( Entrypoint ):镜像运行入口,一般是程序启动的脚本和参数
    • 层( Layer ):添加安装包、依赖、配置等,每次操作都形成新的一层
    • 基础镜像( Baselmage ):应用依赖的系统函数库、环境、配置、文件等
    Dockerfile

    Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像。常见指令如下:

    指令说明示例
    FROM指定基础镜像FROM centos:6
    ENV设置环境变量,可在后面指令使用ENV key value
    COPY拷贝本地文件到镜像的指定目录COPY ./jrell.tar.gz /tmp
    RUN执行Linux的shell命令,一般是安装过程的命令RUN tar -zxvf /tmp/jrell.tar.gz && EXPORTS path=/tmp/jrell:$path
    EXPOSE指定容器运行时监听的端口,是给镜像使用者看的EXPOSE 8080
    ENTRYPOINT镜像中应用的启动命令,容器运行时调用ENTRYPOINT java -jar xx.jar

    更多详细语法说明,请参考官方文档

    举例:

    基于Ubuntu基础镜像,利用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
    #入口,java项目的启动命令
    ENTRYPOINT ["java", "-jar", "/app.jar"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    也可以直接基于jdk为基础镜像,省略上述步骤

    #指定基础镜像
    FROM openjdk:11.0-jre-buster
    #拷贝jar包
    COPY docker-demo.jar /app.jar
    #入口,java项目的启动命令
    ENTRYPOINT ["java", "-jar", "/app.jar"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    构建镜像

    编写好了Dockerfile,可利用下面的命令来构建镜像

    docker build -t myImage:1.0 . 
    
    • 1
    • -t:是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest
    • .:是指定Dockerfile所在目录,如果就在当前目录,则指定为 “.”

    格式docker build -t 镜像名 Dockerfile目录

    容器网络

    默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上:

    在这里插入图片描述

    加入自定义网络的容器才可以通过容器名互相访问,Docker的网络操作命令如下:

    命令说明
    docker network create创建一个网络
    docker network ls查看所有网络
    docker network rm删除指定网络
    docker network prune清除未使用的网络
    docker network connect使指定容器连接加入某网络
    docker network disconnect使指定容器连接离开某网络
    docker network inspect查看网络详细信息

    项目部署

    部署Java

    Dockerfile

    #基础镜像
    FROM openjdk:11.0-jre-buster
    #设定时区
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    #拷贝jar包
    COPY liner-service.jar /app.jar
    #入口
    ENTRYPOINT ["java","-jar","/app.jar"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    #构建镜像
    docker build -t mall .
    #运行镜像
    docker run -d --name linmall -p 8080:8080 --network liner mall
    
    • 1
    • 2
    • 3
    • 4

    部署前端

    docker run -d \
    --name nginx \
    -p 18080:18080 \
    -p 18081:18081 \
    -v /root/ngin/html:/usr/share/nginx/ html \
    -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
    --rTetwork liner \
    nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    DockerCompose

    Docker Compose通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署

    在这里插入图片描述

    docker compose命令格式如下:

    docker compose [OPTIONS] [COMMAND]
    
    • 1
    类型参数或指令说明
    Options-f指定compose文件的路径和名称
    Options-p指定projcct名称
    Commandsup创建并启动所有service容器
    Commandsdown停止并移除所有容器、网络
    Commandsps列出所有启动的容器
    Commandslogs查看指定容器的日志
    Commandsstop停止容器
    Commandsstart启动容器
    Commandsrestart重启容器
    Commandstop查看运行的进程
    Commandsexec在指定的运行中容器中执行命令
  • 相关阅读:
    sphinx匹配指定字段
    Home Assistant添加ESPHome设备(IO控制继电器)
    一文了解 io.LimitedReader类型
    代码随想录算法训练营第四十三天 | ● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零
    实验十 符号计算基础与符号微积分(matlab)
    时间序列预测模型实战案例(八)(Informer)个人数据集、详细参数、代码实战讲解
    泛微OA——ecology 9建立自定义Java接口并部署到对应节点
    React——谈谈属性与状态
    图解域名解析成IP的全过程(你浏览器摁下一个网址后发生了啥?)
    产品经理基础(一)
  • 原文地址:https://blog.csdn.net/weixin_65777087/article/details/133431000