zoukankan      html  css  js  c++  java
  • Docker 学习

    一、Docker
    1.1、什么是 Docker,Docker 与虚拟机的区别 ?

    Docker 与 Vmware 的区别:
    1、Docker 是一个开源的应用容器引擎;是一个轻量级容器技术;
    2、Docker 支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;
    3、运行中的这个镜像称为容器,容器启动是非常快速的。

    4、 Docker 与 vmvare 虚拟机都使用了虚拟技术。
    不同之处如下:


    510c4ce9dd6060bd9f68d4df6cab9f14.png

    为什么 Docker 比 虚拟机快
    1、Docker 利用的是宿主机内核:Docker 上运行的应用在系统内存不够时,可以直接使用宿主系统的硬件资源。秒级。
    Liunx 虚拟机上的应用程序运行内存只能使用虚拟机操作系统的。不能使用宿主的。
    2、docker 架构上有更少的虚拟层。运行的容器实例都可直接使用宿主机的硬件资源。
    Docker 运行时使用的都是宿主机的资源,Vmware 只能使用虚拟机操作系统创建时配置的资源。

    1.2、为什么使用 Docker ?

    1、更高效的利用系统资源
    由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

    2、更快速的启动时间
    传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。

    3、一致的运行环境
    开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。

    4、持续交付和部署
    对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
    使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。
    而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

    5、更轻松的迁移
    由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

    6、更轻松的维护和扩展
    Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

    7、对比传统虚拟机总结

    特性 容器 虚拟机
    启动: 秒级 分钟级
    硬盘使用: 一般为 MB 一般为 GB
    性能 : 接近原生 弱于
    系统支持量: 单机支持上千个容器 一般几十个
    1.3、Docker 引擎

    Docker 引擎是一个包含以下主要组件的客户端服务器应用程序。

    • 一种服务器,它是一种称为守护进程并且长时间运行的程序。
    • REST API用于指定程序可以用来与守护进程通信的接口,并指示它做什么。
    • 一个有命令行界面 (CLI) 工具的客户端。

    Docker 引擎组件的流程如下图所示:

    shell 命令调用 server docker 守护进程。

    1.4、Docker 系统架构

    Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。
    Docker 容器通过 Docker 镜像来创建。
    容器与镜像的关系类似于面向对象编程中的对象与类。

    Docker 面向对象
    容器 对象
    镜像


    789407d745ad17e48305926a07b3b4eb.png

    标题 说明
    镜像(Images) Docker 镜像是用于创建 Docker 容器的模板。
    容器(Container) 容器是独立运行的一个或一组应用。
    客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api ) 与 Docker 的守护进程通信。
    主机(Host) 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
    仓库(Registry) Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com ) 提供了庞大的镜像集合供使用。
    Docker Machine Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。
    1.5、Docker 镜像

    镜像:可理解成面向对象中的 java 类。是一个个对象实例的 模板。
    容器:容器是独立运行的一个或一组应用。可理解成实例对象。实例对象的属性是一个个应用程序。

    1.6、Docker 容器

    镜像:可理解成面向对象中的 java 类。是一个个对象实例的 模板。
    容器:容器是独立运行的一个或一组应用。可理解成实例对象。实例对象的属性是一个个应用程序。

    1.7、Docker 仓库

    仓库:Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
    分类:私有仓库、公有仓库。

    1.8、安装 Docker 及帮助命令
    1、检查内核版本,必须是3.10及以上
    uname -r
    
    2、安装docker
    yum install docker
    
    3、输入y确认安装
    4、启动docker
    [root@localhost ~]# systemctl start docker
    [root@localhost ~]# docker -v
    Docker version 1.12.6, build 3e8e77d/1.12.6
    
    5、开机启动docker
    [root@localhost ~]# systemctl enable docker
    Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
    
    6、停止docker
    systemctl stop docker
    
    7、帮助命令
    docker version #docker的版本信息
    docker info #docker 内的详细信息(运行容器的个数等)
    docker --help #docker 命令帮助
    

    centos8 docker 安装
    参考:
    https://www.linuxidc.com/Linux/2020-04/162958.htm
    https://www.cnblogs.com/suanmiaoup/p/12772140.html

    1.9、Docker 镜像加速器

    一、问题:docker pull 下载卡在某一步原因
    需要配置 docker 镜像加速器
    1、注册阿里云账号,获取镜像加速地址
    https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
    2、在 /etc/docker/deamon.json 中配置该地址,重启docker:systemctl restart docker

    /etc/docker/daemon.json 中添加

    {
      "registry-mirrors": ["https://4gnor4sh.mirror.aliyuncs.com"]
    }

    二、Docker 镜像(镜像操作命令)
    2-1、从仓库获取镜像

    1、搜索镜像
    docker search 镜像名称
    2、拉去镜像
    docker pull 镜像名称:版本号 //不写版本号默认 latest 最新的

    2-2、管理本地主机上的镜像

    1、查看本机上的所有镜像
    docker images ls
    2、删除镜像
    docker images rm 镜像名称/镜像id
    进阶:比如,我们需要删除所有仓库名为 redis 的镜像:
    $ docker image rm $(docker image ls -q redis)

    2-3、介绍镜像实现的基本原理
    操作 命令 说明
    检索 docker search 关键字 eg:docker search redis 我们经常去docker hub上检索镜像的详细信息,如镜像的TAG。
    拉取 docker pull 镜像名:tag :tag是可选的,tag表示标签,多为软件的版本,默认是latest
    列表 docker images 查看所有本地镜像
    删除 docker rmi image-id 删除指定的本地镜像

    https://hub.docker.com/

    1、镜像是什么?
    轻量级、可执行、独立的软件包,用来打包软件开发环境、运行环境的软件,镜像包含运行某个软件所需要的所有内容,包括代码、运行时、库、环境变量和配置文件。

    2、docker 镜像的运行原理
    一个镜像类似一个千层饼,一层套一层
    例如 Tomcat 镜像:
    Tomcat 镜像

    3、镜像分层,可资源共享。别的镜像可重复使用其他镜像的分层资源。

    2-4、使用 Dockefile 定制镜像

    1、作用:解决无法重复的问题、镜像构建透明性的问题、体积的问题。

    2、Dockefile:是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

    3、以 Nginx 为例:
    mkdir dockerfile
    mkdir mynginx
    touch Dockerfile
    #编辑 Dockerfile

    FROM nginx
    RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

    涉及两条指令:From、Run:
    From:所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜像是必须指定的。而 FROM 就是指定基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。
    Run:RUN <命令>,就像直接在命令行中输入的命令一样。刚才写的 Dockerfile 中的 RUN 指令就是这种格式。详情请点我

    4、Dockerfile 镜像构建上下文:
    详情参考

    5、Dokerfile 指令:


    三、Docker 容器(容器操作命令)

    软件镜像(QQ安装程序)----运行镜像----产生一个容器(正在运行的软件,运行的QQ);

    步骤:

    1、搜索镜像
    [root@localhost ~]# docker search tomcat
    
    2、拉取镜像
    [root@localhost ~]# 
    docker pull tomcat
    docker pull mysql
    
    3、根据镜像启动容器
    docker run --name mytomcat -d tomcat:latest
    docker run --name mytomcat -p 8080:8080 -d tomcat
    docker run --name mysql -p 3306:3306 -d mysql
    
    4、docker ps  
    查看运行中的容器
    
    5、 停止运行中的容器
    docker stop  容器的id
    
    6、查看所有的容器
    docker ps -a
    
    7、启动容器
    docker start 容器id
    
    8、删除一个容器
     docker rm 容器id
    
    9、启动一个做了端口映射的tomcat
    [root@localhost ~]# docker run -d -p 8888:8080 tomcat
    -d:后台运行
    -p: 将主机的端口映射到容器的一个端口    主机端口:容器内部的端口
    
    10、为了演示简单关闭了linux的防火墙
    service firewalld status ;查看防火墙状态
    service firewalld stop:关闭防火墙
    
    11、查看容器的日志
    docker logs container-name/container-id
    
    更多命令参看
    https://docs.docker.com/engine/reference/commandline/docker/
    可以参考每一个镜像的文档
    
    12、重命名容器名称
    docker rename tensquare_base tensquare_mysql
    

    四、数据卷与数据卷容器

    数据卷:类似共享文件夹,创建个文件夹与文件夹的映射关系,来共享数据。

    作用:容器数据的持久化+容器间的数据共享。

    如何创建数据卷?

    • 1、命令行使用 -v 来挂载并创建容器与主机之间目录的对应关系。
      1-1、命令行创建:
      docker run -it centos -v /mydatavolumn:/datavolumn #主机目录:容器目录。
      1-2、查看容器数据卷是否挂在成功:
      docker inspect 容器id #命令以 json 串的形式显示容器的信息。可查看数据卷是否挂在成功。也可使用该命令修改已停止容器得配置文件。参考教程:
      1-3、验证容器停止退出后,修改主机文件内容后是否与容器内数据同步:
      是,类似 redis 的数据持久化 aof ,容器重启后会拉取主机目录全部数据,进行一次同步。
      1-4、命令权限:
      docker run -it -v /宿主机目录/容器内目录:ro 镜像名 #带权限创建数据卷,ro 只读,容器内数据只读,不可写。主机内的数据可单项同步到容器,在容器内不可写操作。

    • 2、使用 dockerfile 来创建数据卷。
      2-1、根目录下新建 mydocker 文件夹并进入,创建 Dockerfile 文件。
      2-2、使用 Volume 指令给镜像添加一个或多个数据卷。
      From centos #From 类似 extends 继承的意思。
      VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
      CMD echo "Create finished......"
      CMD /bin/bash #等同于 docker exec -it /bin/bash
      2-3、使用 dockerfile 文件构建镜像
      docker build -f dockerfile文件目录 -t 镜像名称
      2-4、当启动容器后,容器内会自动创建对应的数据卷目录,主机对应的默认文件名称以uuid_data 形式命名呈现,可使用 docker inspect 容器id 来查看容器信息。

    • 3、Docker 挂载主机目录 Docker 访问出现 cannot open directory .: Permission denied
      解决办法:在挂载目录后多加一个 --privileged=true 参数即可。

    数据卷容器:命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。

    作用:容器间传递数据、共享。

    1、运行容器 dc01 (该容器已经挂载了 /dataVolumeContainer1 /dataVolumeContainer2 两个数据卷)
    docker run -it --name dc01 centos

    2、运行容器 dc02 数据卷继承于 dc01(该容器运行时也会有 dc01 挂载的两个数据卷目录)
    docker run -it --name dc02 --volumes-from dc01 centos

    3、运行容器 dc03 数据卷继承于 dc01(该容器运行时也会有 dc01 挂载的两个数据卷目录)
    docker run -it --name dc03 --volumes-from dc01 centos

    4、分别在 dc01、dc02、dc03 的数据卷中创建 01.txt、02.txt、03.txt。此时父容器<-->子容器内的对应数据卷中都会包含 01.txt、02.txt、03.txt 三个文件。达成容器之间的数据共享。

    5、当删除容器 dc01 后,修改 dc02 数据卷内的数据仍然会影响到 dc03。
    结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。


    五、Dockerfile 解析
    5-1、什么是 Dockerfile ?
    • Dockerfile 介绍

    JavaEE Hello.java-->Hello.class
    Docker Images-->Dockerfile
    对镜像源码级的描述。Dockerfile 是用来构建 Docker 镜像的构建文件,是由一系列命令和参数构成的脚本。
    以 centos 镜像为例:https://hub.docker.com/_/centos/

    • 编写规则:
    • 每条保留字指令都必须为大写字母且后面要跟随至少一个参数。
    • 指令按照从上到下,顺序执行。
    • #表示注释。
    • 每条指令都会创建一个新的镜像层,并对镜像进行提交。
    5-2、Dockerfile 构建过程解析

    docker build -f Dockerfile -t tagname .
    (1)docker 从基础镜像运行一个容器。
    (2)执行一条指令并对容器作出修改。
    (3)执行类似 docker commit 的操作提交一个新的镜像层。
    (4)docker 再基于刚提交的镜像运行一个新容器。
    (5)执行 dockerfile中 的下一条指令直到所有指令都执行完成。
    注意必须有个 点号。

    5-3、Dockerfile 中的保留字指令
    保留字指令 含义
    FROM 基础镜像,当前新镜像是基于哪个镜像的
    MAINTAINER 镜像维护者的姓名和邮箱地址
    RUN 容器构建时需要运行的命令
    EXPOSE 当前容器对外暴露出的端口
    WORKDIR 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
    ENV 用来在构建镜像过程中设置环境变量
    ADD 将宿主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 URL 和解压 tar 压缩包
    COPY 类似ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置 COPY src dest COPY ["src", "dest"]
    VOLUME 容器数据卷,用于数据保存和持久化工作
    CMD 指定一个容器启动时要运行的命令
    Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
    ENTRYPOINT 指定一个容器启动时要运行的命令
    ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
    ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
    • 指令分类:
    • Build( FROM MAINTAINER COPY ADD RUN ONBUILD .dockerignore)
    • Both ( WORDDIR USER )
    • RUN (CMD ENV EXPOSE VOLUME ENTRYPOINT )
    • 总结:从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段
    • Dockerfile 是软件的原材料
    • Docker 镜像是软件的交付品
    • Docker 容器则可以认为是软件的运行态。
      Dockerfile 面向开发,Docker 镜像成为交付标准,Docker 容器则涉及部署与运维,三者缺一不可,合力充当 Docker 体系的基石。
    5-4、Dockerfile 案例,见实战部分
    • 1、自定义镜像 Tomcat9。
    • 2、自定义镜像 Redis。
    • 3、自定义镜像 Mysql。
    • 4、自定义镜像 Oracel。

    六、Docker 仓库
    4-1、访问 Docker 仓库
    4-2、访问 GitHub
    4-1、访问 Docker 私有仓库

    七、Docker 实战
    docker 安装单机 Redis
    • docker 启动 redis 容器
    docker run -p 6380:6379 -v /home/PData/redis/data:/data -v /home/PData/redis/conf/redis.conf
    docker 安装 Tomcat
    • 1、查找 Docker Hub 上的 Tomcat 镜像

    docker search tomcat

    • 2、拉取镜像

    docker pull tomcat

    • 3、创建并运行容器

    docker run -it --name tomcat -p 8888:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat

    • 命令说明:

    -it i 交互,t 终端,交互终端如 tomcat 启动后,命令行一直处于等待输入状态。相对于 -d 后台运行,守护进程运行。
    -p 8080:8080:将容器的 8080 端口映射到主机的 8888 端口。大P 代表随机分配端口。
    -v $PWD/test:/usr/local/tomcat/webapps/test:将主机中当前目录下的test挂载到容器的/test

    4、查看容器运行情况
    docker ps

    5、通过浏览器进行访问 192.168.31.7:8888 tomcat 主页。

    6、docker commit -a " " tagname 提交容器副本形成新的镜像。可搞集群部署。

    docker 安装 MySQL
    • 1、拉取 MySQL 镜像

    docker pull tomcat

    • 2、创建 MySQL 容器并运行:
    docker run -p 3306:3306 --name mymysql
    -v $PWD/conf:/etc/mysql/conf.d
    -v $PWD/logs:/logs
    -v $PWD/data:/var/lib/mysql
    -e MYSQL_ROOT_PASSWORD=root
    -d mysql

    或者

    docker run -p 3307:3306 --name tensquare_mysql -v /home/PData/mysql/conf:/etc/mysql/conf.d -v /home/PData/mysql/logs:/logs -v /home/PData/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d be0dbf01a0f3 ```
    • 命令说明:

    run:创建容器并运行情况
    -p 8080:8080:将容器的8080端口映射到主机的8080端口
    -v $PWD/test:/usr/local/tomcat/webapps/test:将主机中当前目录下的test挂载到容器的/test
    -p:映射指定端口
    --name:运行容器名称
    -v:目录挂载,将当前主机目录挂载到docker 容器的目录

    • 3、进入 MySQL 容器,连接 MySQL。:

    docker exec -it mymysql bash
    mysql -uroot -proot

    • 4、查看用户信息:

    select host,user,plugin,authentication_string from mysql.user;
    备注:
    host为 % 表示不限制ip
    localhost 表示本机使用
    plugin 非 mysql_native_password 则需要修改密码

    • 5、修改用户 Hosts ip 访问限制以及密码

    ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

    exit 可退出 docker 容器。

    docker 安装 gitlab(git 自托管仓库)

    详情参考:

    docker 安装 Nexus(使用 Maven 私服仓库管理)

    详情参考

    # 创建容器并运行
    docker run -id --privileged=true --name=nexus3 --restart=always -p 8081:8081 -v /home/nexus3/nexus-data:/var/nexus-data 8eb898be2a53
    
    注:需分配 2G 内存,等待 Nexus 初始化完成才可访问成功。
    docker 构建 yapi 接口文档管理平台。

    docker 构建 yapi(云服务器:47.95.38.201)
    参考教程:
    初始化管理员账号成功,账号名:"admin@admin.com",密码:"ymfe.org"
    访问 :http://47.95.38.201:3000/
    管理员:admin@admin.com
    密码:admin@admin.com

    docker 部署 oracle 数据库 。

    参考教程:

    docker 部署 fastDFS 文件系统 。

    docker 部署 fastDFS 文件系统参考教程:

    1、下载镜像
    docker pull season/fastdfs 
    
    2、启动 tracker 服务器
    docker run -ti -d --name trakcer -v ~/tracker_data:/fastdfs/tracker/data --net=host season/fastdfs tracker
    
    注:启动这个容器之前请确认 22122 这个端口没有被占用 ,命令:netstat -aon | gerp 22122;关闭防护墙
    ~/ 代表 home 用户路径 /home/xxx/
    
    
    3、启动 Storage 服务器
    docker run -tid --name storage -v ~/storage_data:/fastdfs/storage/data -v ~/store_path:/fastdfs/store_path --net=host -e TRACKER_SERVER:192.168.163.130:22122 season/fastdfs storage
    
    注:默认配置的 ip 地址不会生效需要自己重新配。
    配置命令:
    (1)docker cp storage:/fdfs_conf/storage.conf ~/ 把 storage.conf 拷贝到当前目录
    (2)vi storage.conf 进入vi界面找到 tracker_server=192.168.163.130:22122 编辑 ip 地址 完成之后:wq保存退出
    (3)docker cp ~/storage.conf storage:/fdfs_conf/ 把修改好的文件拷贝回之前的目录下 在重启一下 storage 就OK了
    (重启命令:docker stop storage 关闭; docker start storage 开启)
    
    4、docker exec -it trakcer(或者 storage ) bash (进入容器)
    >cd fdfs_conf/fdfs_monitor storage.conf(进入配置中心) 
    
    docker exec -it storage bash
    cd fdfs_conf
    fdfs_monitor storage.conf #进入配置中心
    
    注:查看配置是否生效记得把 trakcer 换成 storage 去查 
    打印出 tracker server is 47.95.38.201:22122 表示成功了
    
    
    5、开启一个客户端 用来文件的上传与下载
    docker run -ti --name fdfs_sh --net=host season/fastdfs sh (开启一个客户端 用来文件的上传与下载) 
    
    >docker cp ~/storage.conf fdfs_sh:/fdfs_conf/ (修改配置文件ip地址) 
    > cd fdfs_conf > fdfs_upload_file storage.conf /a.txt (上传文件) 如上传成功则会返回一个位置(group1/M00/00/00/wKijglwGjv6AIY45AAAABncc3SA663.txt)
    
    6.查看文件上传的位置 进入~目录 >cd store_path > cd data>之后跟着返回的位置找就可以了
    Dockerfile 构建 Tomcat

    1、编写 Dockerfile 文件内容

    FROM centos
    MAINTAINER zzyy<zzyybse126.com>
    
    #把宿主机当前上下文的 c.txt 携贝到容器/usr/local/路径下
    COPY c.txt /usr/local/incontainer.txt
    
    #把 jdk 与 tomcat 添加到容器中
    ADD jdk-8u171-linux-x64.tar.gz /usr/local
    ADD apache-tomcat-9.0.8.tar.gz /usr/local
    
    #安装vim编辑器
    RUN yum -y install vim
    
    #设置工作访问时候的 WORKDIR 路径,登录落脚点
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    
    #配置 jdk 与 tomcat 环境变量
    ENV JAVA_HOME /usr/local/jdk 8.0 171
    ENV CLASSPATH JAVA_HOME/lib/dt.jar: $JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
    ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
    ENV PATH $PATH: JAVA_HOME/bin: &CATALINA_HOME/lib: $CATALINA_HOME/bin
    
    #容器运行时监听的端口
    EXPOSE 8080
    
    #启动时运行 tomcat
    #ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup. sh
    #CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina. sh","run"
    CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh & tail-f/usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out

    2、docker build -f Dockerfile -t tagname 构建 dockerfile 生成 docker 镜像。
    具体操作参考:https://blog.csdn.net/haiyangyiba/article/details/88805614

    Dockerfile 构建 Redis

    参考:https://blog.csdn.net/u012706771/article/details/87867684

    Dockerfile 构建 Mysql

    1、新建 /home/PData/Dockerfile MysqlDockerfile 文件

    # docker build 时默认文件名为 Dockerfile,否则在-f 路径+filename 指定文件
    #基础镜像,当前新镜像是基于哪个镜像的
    FROM mysql:8.0
    
    #设置 mysql 密码变量
    ENV MYSQL_PWD root
    
    #mysql 容器对外暴露的端口
    EXPOSE 3307
    
    #设置容器启动时执行的命令
    CMD ["mysqld"]

    2、执行 docker build 命令构建镜像。
    docker build -f /home/PData/Dockerfile/MysqlDockerfile -t pgzmysql:v1.0 .

    3、根据镜像 id 启动并运行容器。

    #1、启动容器:根据 mysql 镜像创建并运行 tensquare_base 数据库容器实例
    docker run -p 3307:3306 --name tensquare_mysql -v /home/PData/mysql/conf:/etc/mysql/conf.d -v /home/PData/mysql/logs:/logs -v /home/PData/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d be0dbf01a0f3 
    
    #2、进入容器
    docker exec -it tensquare_mysql bash
    #在一个已经 "exit” 的 docker 容器中修改配置文件,需要使用 docker inspect + 容器id 命令。docker exec 命令是在容器运行得前提下进行操作。
    
    #3、链接 tensquare_base 数据库测试
    mysql -h localhost -u root -p #密码为空,直接回车
    
    select user,host from user;# 查看root 对应的是 % 还是 localhost,
    
    #修改 root 用户密码
    ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
    ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
    
    #赋予远程连接权限
    use mysql;
    update user set host = '%' where user = 'root';
    
    #4、重命名容器名称
    docker rename tensquare_base tensquare_mysql
    
    #5、设置 docker 容器开机启动
    docker update --restart=always xxx
    
    参考:https://www.cnblogs.com/royfans/p/11393791.html
    
    #6、
    Dockerfile 构建 Oracle

    八、docker compose 使用(快速部署分布式应用)

    Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用

    安装:

    安装问题:

    pip 方式安装,卸载命令:
    sudo pip uninstall docker-compose


    九、Docker 使用问题整理


    =第02章-基础设施即服务-Docker.md

  • 相关阅读:
    小米笔试题:无序数组中最小的k个数
    搜狐畅游笔试题:1. 美丽的项链(动态规划) 2.多线程并发交替输出
    RPC系列:基本概念
    度小满面试题20190923
    Java 基础系列:异常
    JAVA基础系列:ThreadLocal
    leetcode 410. 分割数组的最大值(二分法)
    JAVA基础系列:Object类
    Redis系列1——概述
    剑指offer:对称的二叉树(镜像,递归,非递归DFS栈+BFS队列)
  • 原文地址:https://www.cnblogs.com/pengguozhen/p/13985226.html
Copyright © 2011-2022 走看看