当前位置: 首页 > news >正文

网站建设说明书资讯类网站源码

网站建设说明书,资讯类网站源码,异度空间图书馆主题 wordpress,上海网站建筑公司docker学习笔记1.docker简介1.1为什么会出现docker#xff1f;1.2docker理念1.3虚拟机#xff08;virtual machine#xff09;1.4容器虚拟化技术1.5一次构建到处运行2.docker安装2.1前提条件2.2docker基本构成2.3docker安装步骤*2.4测试镜像3.docker常用命令3.1 启动docker3… docker学习笔记1.docker简介1.1为什么会出现docker1.2docker理念1.3虚拟机virtual machine1.4容器虚拟化技术1.5一次构建到处运行2.docker安装2.1前提条件2.2docker基本构成2.3docker安装步骤*2.4测试镜像3.docker常用命令3.1 启动docker3.2 停止docker3.3 重启docker3.4 查看docker状态3. 5 开机启动3.6 查看docker概要信息3.7 查看docker总体帮助文档4.常用镜像命令4.1 搜索镜像4.2 列出本地镜像4.3 拉取镜像4.4 删除镜像4.5 删除全部镜像4.6 查看镜像构建过程4.7 将指定镜像保存成 tar 归档文件4.8 使用 Dockerfile 创建镜像4.9 标记本地镜像4.10 登陆到一个Docker镜像仓库4.11 登出一个Docker镜像仓库4.12 将本地的镜像上传到镜像仓库4.13 查看虚悬镜像5.常用容器命令5.1 启动容器5.2 查看正在运行的容器5.3 退出容器5.4 启动已停止运行的容器5.5 重启容器5.6 停止容器5.7 强制停止容器5.8 删除容器5.9 查看容器日志5.10 查看容器内运行的进程5.11 查看容器内部细节5.12 容器与宿主机文件拷贝5.13 进入docker容器内部5.14 docker 安装mysql6.Docker镜像6.1 什么是镜像6.2 Docker镜像加载原理6.3 Docker镜像commit6.4 容器导入导出6.5 save 和 export区别6.6 docker commit7.将镜像推送到阿里云8.搭建docker 私服8.1.下载 registry8.2.启动8.3.推送到私服8.4.pull到本地9.Docker容器数据卷9.1.容器数据卷挂载9.2.容器只读不写9.3 容器数据传递10.dockerFile10.1 dockerFile概述10.2 dockerFIle经典案例10.3 DockerFile常用保留字指令10.4 docker build10.5 使用docker构建一个java环境11.docker网络11.1 docker网络常用命令11.2 网络模式11.2.1 bridge11.2.2 host11.2.3 none11.2.4 container11.2.5 自定义网络12.Docker-compose12.1 Docke是什么r-compose12.2 docker-compose能做什么12.3 安装docker-compose12.4 Compose核心概念12.5 Compose使用的三个步骤12.6 compose常用命令12.7 docker-compose启动多服务查看容器输出日志检查配置检查配置有问题才有输出重启服务启动服务停止服务1.docker简介 学习docker的前提熟悉linux基本命令和熟悉git命令。 1.1为什么会出现docker 一款产品从开发到上线从操作系统到运行环境再到应用配置。作为开发运维之间的协作我们需要关心很多东西这也是很多互联网公司都不得不面对的问题特别是各种版本的迭代之后不同版本环境的兼容对运维人员都是考验 Docker之所以发展如此迅速也是因为它对此给出了一个标准化的解决方案。 环境配置如此麻烦换一台机器就要重来一次费力费时。很多人想到能不能从根本上解决问题软件可以带环境安装也就是说安装的时候把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。 之前在服务器配置一个应用的运行环境要安装各种软件就拿尚硅谷电商项目的环境来说吧Java/Tomcat/MySQL/JDBC驱动包等。安装和配置这些东西有多麻烦就不说了它还不能跨平台。假如我们是在 Windows 上安装的这些环境到了 Linux 又得重新装。况且就算不跨操作系统换另一台同样操作系统的服务器要移植应用也是非常麻烦的。 传统上认为软件编码开发/测试结束后所产出的成果即是程序或是能够编译执行的二进制字节码等(java为例)。而为了让这些程序可以顺利执行开发团队也得准备完整的部署文件让维运团队得以部署应用程式开发需要清楚的告诉运维部署团队用的全部配置文件所有软件环境。不过即便如此仍然常常发生部署失败的状况。Docker镜像的设计使得Docker得以打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外运作应用程式所需要的系统环境由下而上打包达到应用程式跨平台间的无缝接轨运作。 1.2docker理念 Docker是基于Go语言实现的云开源项目。 Docker的主要目标是“BuildShip and Run Any App,Anywhere”也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理使用户的APP可以是一个WEB应用或数据库应用等等及其运行环境能够做到“一次封装到处运行”。 Linux 容器技术的出现就解决了这样一个问题而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器上面而 Docker 容器在任何操作系统上都是一致的这就实现了跨平台、跨服务器。只需要一次配置好环境换到别的机子上就可以一键部署好大大简化了操作。 1.3虚拟机virtual machine 虚拟机就是带环境安装的一种解决方案它可以在一种操作系统里面运行另一种操作系统比如在Windows 系统里面运行Linux 系统。应用程序对此毫无感知因为虚拟机看上去跟真实系统一模一样而对于底层系统来说虚拟机就是一个普通文件不需要了就删掉对其他部分毫无影响。这类虚拟机完美的运行了另一套系统能够使应用程序操作系统和硬件三者之间的逻辑不变。 虚拟机的缺点 1 资源占用多 2 冗余步骤多 3 启动慢 1.4容器虚拟化技术 由于前面虚拟机存在这些缺点Linux 发展出了另一种虚拟化技术Linux 容器Linux Containers缩写为 LXC。 Linux 容器不是模拟一个完整的操作系统而是对进程进行隔离。有了容器就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同不需要捆绑一整套操作系统只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。 比较了 Docker 和传统虚拟化方式的不同之处 传统虚拟机技术是虚拟出一套硬件后在其上运行一个完整操作系统在该系统上再运行所需应用进程 而容器内的应用进程直接运行于宿主的内核容器内没有自己的内核而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。 每个容器之间互相隔离每个容器有自己的文件系统 容器之间进程不会相互影响能区分计算资源。 1.5一次构建到处运行 更快速的应用交付和部署 传统的应用开发完成后需要提供一堆安装程序和配置说明文档安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件在正式生产环境加载镜像并运行即可应用安装配置在镜像里已经内置好大大节省部署配置和测试验证时间。 更便捷的升级和扩缩容 随着微服务架构和Docker的发展大量的应用会通过微服务方式架构应用的开发构建将变成搭乐高积木一样每个Docker容器将变成一块“积木”应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时可通过镜像运行新的容器进行快速扩容使应用系统的扩容从原先的天级变成分钟级甚至秒级。 更简单的系统运维 应用容器化运行后生产环境运行的应用可与开发、测试环境的应用高度一致容器会将应用程序相关的环境和状态完全封装起来不会因为底层基础架构和操作系统的不一致性给应用带来影响产生新的BUG。当出现程序异常时也可以通过测试环境的相同容器进行快速定位和修复。 更高效的计算资源利用 Docker是内核级虚拟化其不像传统的虚拟化技术一样需要额外的Hypervisor支持所以在一台物理机上可以运行很多个容器实例可大大提升物理服务器的CPU和内存的利用率。 2.docker安装 2.1前提条件 目前CentOS 仅发行版本中的内核支持 Docker。 Docker 运行在 CentOS 7 上要求系统为64位、系统内核版本为 3.10 以上。 Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。 docker官网docker 查看自己的内核 uname命令用于打印当前系统相关信息内核版本号、硬件架构、主机名称和操作系统类型等。 uname -r查看已安装的CentOS版本信息CentOS6.8有CentOS7无该命令 cat /etc/redhat-release2.2docker基本构成 Docker 镜像:Image就是一个只读的模板。镜像可以用来创建 Docker 容器一个镜像可以创建很多容器。 Docker 利用容器:Container独立运行的一个或一组应用。容器是用镜像创建的运行实例。 它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。 可以把容器看做是一个简易版的 Linux 环境包括root用户权限、进程空间、用户空间和网络空间等和运行在其中的应用程序。 容器的定义和镜像几乎一模一样也是一堆层的统一视角唯一区别在于容器的最上面那一层是可读可写的。 仓库Repository是集中存放镜像文件的场所。 仓库(Repository)和仓库注册服务器Registry是有区别的。仓库注册服务器上往往存放着多个仓库每个仓库中又包含了多个镜像每个镜像有不同的标签tag。 仓库分为公开仓库Public和私有仓库Private两种形式。 最大的公开仓库是 Docker Hub(https://hub.docker.com/) 存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云 等 小总结 需要正确的理解仓储/镜像/容器这几个概念: Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境这个打包好的运行环境就似乎 image镜像文件。只有通过这个镜像文件才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件可以生成多个同时运行的容器实例。 image 文件生成的容器实例本身也是一个文件称为镜像文件。 一个容器运行一种服务当我们需要的时候就可以通过docker客户端创建一个对应的运行实例也就是我们的容器 至于仓储就是放了一堆镜像的地方我们可以把镜像发布到仓储中需要的时候从仓储中拉下来就可以了。 2.3docker安装步骤* ce社区版 ee企业版 docker下载地址https://docs.docker.com/engine/install/centos/ 1.查看本机是否安装 gcc: yum list installed | grep gcc 如果没有 执行以下命令 yum -y install gcc yum -y install gcc-c x2.卸载掉以前的docker旧版本 yum -y remove docker docker-common docker-selinux docker-engine3.安装需要的软件包 yum install -y yum-utils device-mapper-persistent-data lvm24.设置stable镜像仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 5.更新软件包索引 yum makecache fast 6.安装docker ce版本 yum -y install docker-ce 7.启动docker systemctl start docker 8.测试 1docker version 2: docker run hello word 9.配置镜像加速 docker version 阿里云镜像地址 https://promotion.aliyun.com/ntms/act/kubernetes.html 登录进去找到镜像服务 vim /etc/docker/daemon.json #网易云 {registry-mirrors: [http://hub-mirror.c.163.com] #阿里云 {registry-mirrors: [https://自已的编码.mirror.aliyuncs.com] }systemctl daemon-reloadsystemctl restart docker 10.卸载docker 1.systemctl stop docker 2.yum -y remove docker-ce 3.rm -rf /var/lib/docker 2.4测试镜像 1.查看docker镜像是否配置成功 docker info 2.运行 docker run hello-world 测试docker是否安装成功 3.docker run hello-world 都做了什么和maven的概念差不多 4.docker底层原理 docker是怎么工作的 Docker是一个Client-Server结构的系统Docker守护进程运行在主机上 然后通过Socket连接从客户端访问守护进程从客户端接受命令并管理运行在主机上的容器。 容器是一个运行时环境就是我们前面说到的集装箱。 为什么docker比vm快 docker有着比虚拟机更少的抽象层。由亍docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。 docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。 3.docker常用命令 3.1 启动docker systemctl start docker3.2 停止docker systemctl stop docker3.3 重启docker systemctl restart docker3.4 查看docker状态 systemctl status docker3. 5 开机启动 systemctl enable docker3.6 查看docker概要信息 docker info3.7 查看docker总体帮助文档 docker --help· 查看docker命令帮助文档 docker 具体命令 --help 4.常用镜像命令 4.1 搜索镜像 命令 docker search # 例如查询mysql docker search mysqlNAME DESCRIPTION STARS OFFICIAL AUTOMATED 镜像名称 镜像说明 点赞数量 是否官方认证 是否自动认证 # 详细参数 Options:-f, --filter string 过滤掉输出结果# docker search --filterSTARS9000 mysql [搜索 STARS 9000的 mysql 镜像]--format string 标准格式输出# 格式化输出 docker search --format {{.Name}}: {{.StarCount}} nginx-.Description 镜像描述 -.StarCount star数量 -.IsOfficial “OK” 表示官方镜像 - IsAutomated “OK” 表示自动构建 --limit int 最大搜索结果数(默认为25)# docker search --limit 20 mysql [搜索 mysql 镜像 只显示前20条]--no-trunc 不用截断输出 4.2 列出本地镜像 命令docker images -a, --all 显示所有镜像默认隐藏中间镜像--digests 显示摘要-f, --filter filter 根据提供的条件过滤输出--format string 使用 Go 模板打印漂亮的图像--no-trunc 使用 Go 模板打印漂亮的图像-q, --quiet 只显示镜像id#展示信息说明 REPOSITORY: 来自于哪个仓库比如phpswoole/swoole表示swoole官网的镜像 TAG : 镜像的标签信息比如18.04、latest表示不同的版本信息。标签只是标记并不能标识镜像内容latest标识最新的版本 IMAGE ID: 镜像的ID唯一标识镜像如果两个镜像的ID相同说明它们实际上指向了同一个镜像只是具有不同标签名称而已 CREATED: 创建时间说明镜像最后的更新时间 SIZE: 镜像大小优秀的镜像往往体积都较小# --format 模板说明 .ID 镜像id .Repository 镜像名称 .Tag 镜像标签 .Digest 镜像简介 .CreatedSince 自创以来经过的时间 .CreatedAt 创建图像的时间 .Size 镜像大小 4.3 拉取镜像 命令 docker pull Options:-a, --all-tags 下载镜像仓库中所有的指定镜像--disable-content-trust 跳过镜像验证默认值是true--platform string 如果服务具有多平台功能则设置平台-q, --quiet 一直详细输出# 没有TAG就是最新版 等价于 docker pull 镜像名字:latest查看镜像/容器/数据卷所占的空间 命令docker system Options:df 整体磁盘的使用情况events 获取docker系统实时事件不包括容器内的。info 查看整个docker系统的信息prune 清理资源此操作尤其需要注意 # 清理停止的容器,清理没有使用的网络,清理废弃的镜像,清理废弃的镜像 4.4 删除镜像 docker rmi [Options] 镜像名称|镜像ID Options:-f : 通过 SIGKILL 信号强制删除一个运行中的容器。–no-prune : 不移除该镜像的过程镜像默认移除4.5 删除全部镜像 # 谨慎使用 docker rmi -f $(docker images -qa)谈谈docker虚悬镜像是什么 仓库名、标签都是none的镜像俗称虚悬镜像dangling image4.6 查看镜像构建过程 命令docker history Options:-H, --human 以可读的格式打印镜像大小和日期默认为true--no-trunc 显示完整的提交记录-q, --quiet 仅列出提交记录ID 4.7 将指定镜像保存成 tar 归档文件 ocker save [OPTIONS] IMAGE [IMAGE...] -o : 输出到的文件4.8 使用 Dockerfile 创建镜像 docker build [OPTIONS] PATH | URL | –build-arg[] : 设置镜像创建时的变量 –cpu-shares : 设置 cpu 使用权重 –cpu-period : 限制 CPU CFS周期 –cpu-quota : 限制 CPU CFS配额 –cpuset-cpus : 指定使用的CPU id –cpuset-mems : 指定使用的内存 id –disable-content-trust : 忽略校验默认开启 -f : 指定要使用的Dockerfile路径 –force-rm : 设置镜像过程中删除中间容器 –isolation : 使用容器隔离技术 –label[] : 设置镜像使用的元数据 -m : 设置内存最大值 –memory-swap : 设置Swap的最大值为内存swap-1表示不限swap –no-cache : 创建镜像的过程不使用缓存 –pull : 尝试去更新镜像的新版本 –quiet, -q : 安静模式成功后只输出镜像 ID –rm : 设置镜像成功后删除中间容器 –shm-size : 设置/dev/shm的大小默认值是64M –ulimit : Ulimit配置。 –squash : 将 Dockerfile 中所有的操作压缩为一层。 –tag, -t: 镜像的名字及标签通常 name:tag 或者 name 格式可以在一次构建中为一个镜像设置多个标签。 –network: 默认 default。在构建期间设置RUN指令的网络模式4.9 标记本地镜像 标记本地镜像将其归入某一仓库 docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]4.10 登陆到一个Docker镜像仓库 如果未指定镜像仓库地址默认为官方仓库 Docker Hub docker login [OPTIONS] [SERVER]-u : 登陆的用户名-p : 登陆的密码4.11 登出一个Docker镜像仓库 如果未指定镜像仓库地址默认为官方仓库 Docker Hub docker logout [OPTIONS] [SERVER]4.12 将本地的镜像上传到镜像仓库 要先登陆到镜像仓库 docker push [OPTIONS] 镜像名称:[镜像标签]4.13 查看虚悬镜像 docker images -f danglingtrue -q # 删除虚悬镜像 docker rmi $(docker images -f danglingtrue -q) # 这个命令会删除所有未使用到的镜像即使并不是没有仓库名或没有标签。 docker image prune -a -fdocker images -a -f danglingtrue -q5.常用容器命令 5.1 启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] # docker run -it IMAGE_ID /bin/bash 常用 --add-host 添加自定义主机到IP的映射hostip --attach -a 登录容器 --blkio-weight block io 相对权重介于10到1000之间或者为0禁用默认为0 --blkio-weight-device block IO 设备权重相对设备权重 --cap-add 添加 Linux 容量 --cap-drop 删除 Linux 容量 --cgroup-parent 容器的可选父cgroup --cgroupns 在其自己的私有cgroup命名空间中运行容器 --cidfile 将容器ID写入文件 --cpu-count CPU数量仅windows --cpu-percent CPU百分比仅Windows --cpu-period 限制CPU CFS完全公平的调度程序期限 --cpu-quota 限制CPU CFS完全公平的调度程序配额 --cpu-rt-period 限制CPU实时时间以微秒为单位 --cpu-rt-runtime 限制CPU实时运行时间以微秒为单位 --cpu-shares -c CPU份额相对 --cpus CPU数量 --cpuset-cpus 允许执行的CPU数量0-30,1 --cpuset-mems 允许执行的MEM数量0-30,1 --detach -d 在后台运行容器并打印容器ID --detach-keys 覆盖后台容器的键序列 --device 将主机设备添加到容器 --device-cgroup-rule 将规则添加到“允许cgroup的设备”列表中 --device-read-bps 限制从设备读取的速率每秒字节数 --device-read-iops 限制从设备读取的速率每秒IO --device-write-bps 限制对设备的写入速率每秒字节数 --device-write-iops 限制对设备的写入速率每秒IO --disable-content-trust true 跳过图像验证 --dns 设置自定义DNS服务器 --dns-opt 设定DNS选项 --dns-option 设定DNS选项 --dns-search 设置自定义DNS搜索域 --domainname 容器NIS域名 --entrypoint 覆盖图像的默认ENTRYPOINT --env -e 设置环境变量 --env-file 读入环境变量文件 --expose 公开一个或多个端口 --gpus 添加GPU设备到容器 --group-add 添加其他群组加入 --health-cmd 运行命令以检查运行状况 --health-interval 运行检查间隔时间ms --health-retries 连续故障报告不健康 --health-start-period 开始运行状况重试倒计时之前容器初始化的开始时间ms --health-timeout 允许执行一次检查的最长时间ms --help 打印用法获取帮助 --hostname , -h 容器的主机名 --init 在容器内运行一个初始化程序以转发信号并获取进程 --interactive -i --io-maxbandwidth 系统驱动器的最大IO带宽限制仅Windows --io-maxiops 系统驱动器的最大IOps限制仅Windows --ip IPV4地址 --ip6 IPV6地址 --isolation --kernel-memory 内核内存限制 --label , -l 在容器上设置元数据 --label-file 读入行分隔的标签文件 --link 指定容器间的关联使用其他容器的IP、env等信息 --link-local-ip 容器IPv4 / IPv6链接本地地址 --log-driver 容器的日志记录驱动程序 --log-opt 日志驱动程序选项 --mac-address 容器MAC地址 --memory -m 内存限制 --memory-reservation 内存软限制 --memory-swap 交换限制等于内存加交换“-1”以启用无限交换 --memory-swappiness 调音容器内存交换0到100 --mount 将文件系统挂载附加到容器 --name 为容器分配一个名称 --net 将容器连接到网络 --net-alias 为容器添加网络范围的别名 --network 将容器连接到网络 --network-alias 为容器添加网络范围的别名 --no-healthcheck 禁用任何容器指定的健康检查 --oom-kill-disable 禁用OOM Killer --oom-score-adj 主机OOM首选项 --pid 使用PID命名空间 --privileged 赋予此容器扩展的特权 --publish -p(小写) 将容器的端口发布到主机 --publish-all -P(大写) 将所有公开的端口发布到随机端口 --read-only 将容器的根文件系统挂载为只读 --restart 容器退出时重新启动策略以应用 --rm 退出时自动删除容器 --runtime --tmpfs 挂载tmpfs目录 --tty -t 分配伪TTY --user -u 用户名或UID格式名称 --volume -v 绑定挂载卷 --volume-driver 容器的可选卷驱动器 --volumes-from 从指定的容器挂载卷 --workdir -w 容器内的工作目录 5.2 查看正在运行的容器 docker ps [OPTIONS] -a :显示所有的容器包括未运行的。 -f :根据条件过滤显示的内容。 --format :指定返回值的模板文件。 -l :显示最近创建的容器。 -n :列出最近创建的n个容器。 --no-trunc :不截断输出。 -q :静默模式只显示容器编号。 -s :显示总的文件大小。格式化选项(–format) .ID 容器ID .Image 镜像ID .Command Quoted command .CreatedAt 创建容器的时间点. .RunningFor 从容器创建到现在过去的时间. .Ports 暴露的端口. .Status 容器状态. .Size 容器占用硬盘大小. .Names 容器名称. .Labels 容器所有的标签. .Label 指定label的值 例如{{.Label “com.docker.swarm.cpu”}}’ .Mounts 挂载到这个容器的数据卷名称5.3 退出容器 exit直接退出容器并且停止容器运行ctrlpq退出容器容器正常运行5.4 启动已停止运行的容器 docker start 容器ID或者容器名5.5 重启容器 docker restart 容器ID或者容器名5.6 停止容器 docker stop 容器ID或者容器名5.7 强制停止容器 docker kill 容器ID或容器名5.8 删除容器 docker rm 容器ID 一次性删除多个容器实例 docker rm -f $(docker ps -a -q) docker ps -a -q | xargs docker rm5.9 查看容器日志 docker logs 容器ID5.10 查看容器内运行的进程 docker top 容器ID5.11 查看容器内部细节 docker inspect 容器ID5.12 容器与宿主机文件拷贝 # 容器到宿主机 docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- # 宿主机到容器 docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH docker copy /web/redis-6.2-rc2/redis.conf 92323cd4d868:/etc/redis/redis.conf SRC_PATH 指定一个文件 若 DEST_PATH 不存在 创建 DEST_PATH 所需的文件夹文件正常保存到 DEST_PATH 中若 DEST_PATH 不存在并以 / 结尾 错误目标目录必须存在若 DEST_PATH 存在并且是一个文件 目标被源文件的内容覆盖若 DEST_PATH 存在并且是目录 使用 SRC_PATH 中的基本名称将文件复制到此目录中 SRC_PATH指定目录若 DEST_PATH 不存在 将 DEST_PATH 创建为目录并将源目录的内容复制到该目录中 若 DEST_PATH存在并且是一个文件 错误无法将目录复制到文件若 DEST_PATH存在并且是目录 SRC_PATH 不以 /. 结尾源目录复制到此目录 SRC_PATH 以 /. 结尾源目录的内容被复制到该目录中 5.13 进入docker容器内部 docker exec -it CONTAINER_ID bash5.14 docker 安装mysql # 下载 docker run -p 3307:3306 -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD123456 --name mysql mysql:8.0.1# 运行 docker run --name mysql -p 3307:3306 --privilegedtrue -v /usr/local/mysql/conf:/etc/mysql/conf.d -v/usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORDadmin -d mysql:8.0.1 5.15 docker 安装redis # 配置文件中的“daemonize yes”和docker启动命令中 --restartalways守护进程的方式运行 两者冲突docker run --name redis -p 6378:6379 --privilegedtrue -v /home/docker/redis/data:/data -v/home/docker/redis/conf/redis.conf:/etc/redis/redis.conf -d redis:6.2 redis-server /etc/redis/redis.conf docker exec -it containerId redis-cli 6.Docker镜像 6.1 什么是镜像 是一种轻量级、可执行的独立软件包它包含运行某个软件所需的所有内容我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等)这个打包好的运行环境就是image镜像文件。 只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。分层的镜像 以我们的pull为例在下载的过程中我们可以看到docker的镜像好像是在一层一层的在下载 UnionFS联合文件系统Union文件系统UnionFS是一种分层、轻量级并且高性能的文件系统它支持对文件系统的修改作为一次提交来一层层的叠加同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承基于基础镜像没有父镜像可以制作各种具体的应用镜像。 特性一次同时加载多个文件系统但从外面看起来只能看到一个文件系统联合加载会把各层文件系统叠加起来这样最终的文件系统会包含所有底层的文件和目录 6.2 Docker镜像加载原理 Docker镜像加载原理 docker的镜像实际上由一层一层的文件系统组成这种层级的文件系统UnionFS。 bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统在Docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的Linux/Unix系统是一样的包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了此时内存的使用权已由bootfs转交给内核此时系统也会卸载bootfs。 rootfs (root file system) 在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版比如UbuntuCentos等等。 平时我们安装进虚拟机的CentOS都是好几个G为什么docker这里才200M 对于一个精简的OSrootfs可以很小只需要包括最基本的命令、工具和程序库就可以了因为底层直接用Host的kernel自己只需要提供 rootfs 就行了。由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别, 因此不同的发行版可以公用bootfs。 为什么 Docker 镜像要采用这种分层结构呢 镜像分层最大的一个好处就是共享资源方便复制迁移就是为了复用。 比如说有多个镜像都从相同的 base 镜像构建而来那么 Docker Host 只需在磁盘上保存一份 base 镜像 同时内存中也只需加载一份 base 镜像就可以为所有容器服务了。而且镜像的每一层都可以被共享。 重点理解 Docker镜像层都是只读的容器层是可写的 当容器启动时一个新的可写层被加载到镜像的顶部。 这一层通常被称作“容器层”“容器层”之下的都叫“镜像层”。 当容器启动时一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”“容器层”之下的都叫“镜像层”。 所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的容器层下面的所有镜像层都是只读的。 6.3 Docker镜像commit docker commit提交容器副本使之成为一个新的镜像 docker commit -m提交的描述信息 -a作者 容器ID 要创建的目标镜像名:[标签名]6.4 容器导入导出 #容器的导出 docker export CONTAINER_ID containerName.tar docker export b48f679497e4 rabbitMQ.tar # 容器的导入 cat fileName.tar | docker import - MIRROR_USER/MIRROR_NAME:MIRROR_VERSION6.5 save 和 export区别 1.docker export 和 docker import docker export 容器ID/容器Name xxx.tar 导出一个容器快照 docker import xxx.tar NewImageName:tag 导入一个容器快照到本地镜像库 适用场景主要用来制作基础镜像比如从一个ubuntu镜像启动一个容器然后安装一些软件和进行一些设置后使用docker export保存为一个基础镜像。然后把这个镜像分发给其他人使用作为基础的开发环境。(因为export导出的镜像只会保留从镜像运行到export之间对文件系统的修改所以只适合做基础镜像) 注意事项 ①会丢弃历史记录和元数据。 ②启动export与import命令导出导入的镜像必须加/bin/bash或者其他/bin/sh否则会报错。 ③docker export 导出的镜像是不带历史记录的如果原本的镜像有3层export 之后只会有1层这一层为从镜像运行到export之间对文件系统的修改。 ④可以使用docker history ImageName/ImageID 查看镜像只有一层待测试。 2.docker commit docker commit 容器ID/容器Name 生成新的镜像名字 选项说明 -a提交的镜像作者  -c使用dockerfile指令来创建镜像  -m提交时的说明文字  -p在commit的时候将正在运行的容器暂停 适用场景主要作用是将配置好的一些容器复用再生成新的镜像。 注意事项 commit是合并了save、load、export、import这几个特性的一个综合性的命令它主要做了 将container当前的读写层保存下来保存成一个新层 和镜像的历史层一起合并成一个新的镜像 如果原本的镜像有3层commit之后就会有4层最新的一层为从镜像运行到commit之间对文件系统的修改。 3.docker save 和 docker load docker save -o xxx.tar 镜像名 将指定镜像导出。 docker load -i xxx.tar 导入镜像到本地镜像库 适用场景生产环境没有外网在本机将镜像打包成tar。拷贝到生产环境再通过docker push到生产环境本地镜像仓库。 区别 docker save 保存的是镜像image docker export 保存的是容器container) docker load /docker import 载入的时候两者都会恢复为镜像。 docker load 无法对镜像重命名docker import 可以对镜像指定新名称。 docker export 比 docker save的包要小原因是save的是一个分层的文件系统export导出的只是一层文件系统。 docker commit保存镜像文件系统的历史层docker export保存从镜像运行到export之间对文件系统的修改的最新一层。 6.6 docker commit docker commit -m -a作者 容器ID 要创建的目标镜像7.将镜像推送到阿里云 1.登录阿里云找到镜像服务创建命名空间 2.创建镜像仓库选择本地镜像 3.在linux服务器上登录仓库 docker login --username阿里云账号 registry.cn-hangzhou.aliyuncs.com4.从仓库中拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/compasss/compass-registry:3.95.将镜像推送到阿里云镜像仓库 docker login --usernamecrazy2732195202 registry.cn-hangzhou.aliyuncs.com docker tag 108b9ad78dcd registry.cn-hangzhou.aliyuncs.com/compasss/compass-registry:3.9 docker push registry.cn-hangzhou.aliyuncs.com/compasss/compass-registry:3.98.搭建docker 私服 8.1.下载 registry docker pull registry8.2.启动 docker run -d --name reg -p 5000:5000 registry8.3.推送到私服 docker tag redis:6.0 192.168.22.162:5000/edis:6.0 docker push 192.168.22.162:5000/edis:6.08.4.pull到本地 docker pull 192.168.22.162:5000/edis:6.0 9.Docker容器数据卷 Docker挂载主机目录访问如果出现cannot open directory .: Permission denied 解决办法在挂载目录后多加一个–privilegedtrue参数即可 如果是CentOS7安全模块会比之前系统版本加强不安全的会先禁止所以目录挂载的情况被默认为不安全的行为 在SELinux里面挂载目录被禁止掉了额如果要开启我们一般使用–privilegedtrue命令扩大容器的权限解决挂载目录没有权限的问题也即使用该参数container内的root拥有真正的root权限否则container内的root只是外部的一个普通用户权限。 卷就是目录或文件存在于一个或多个容器中由docker挂载到容器但不属于联合文件系统因此能够绕过Union File System提供一些用于持续存储或共享数据的特性卷的设计目的就是数据的持久化完全独立于容器的生存周期因此Docker不会在容器删除时删除其挂载的数据卷 9.1.容器数据卷挂载 docker run -it --privilegedtrue -v /host_dir:/container_dir IMAGR_NAME 特点 1数据卷可在容器之间共享或重用数据 2卷中的更改可以直接实时生效 3数据卷中的更改不会包含在镜像的更新中 4数据卷的生命周期一直持续到没有容器使用它为止 5: 即使docker停止了重新启动也会从主机上把文件同步过来 9.2.容器只读不写 docker run -it --privilegedtrue -v /host_dir:/container_dir:ro IMAGR_NAME 9.3 容器数据传递 # 容器之间配置信息的传递数据卷的生命周期一直持续到没有容器使用它为止。 docker run -it --privilegedtrue -v /host_dir:/container_dir --volumes-from CONTIANER_NAME IMAGR_NAME 10.dockerFile 10.1 dockerFile概述 Dockerfile是用来构建Docker镜像的文本文件是由一条条构建镜像所需的指令和参数构成的脚本。 构建三步骤: 编写Dockerfile文件docker build命令构建镜像docker run依镜像运行容器实例 Dockerfile内容基础知识 1每条保留字指令都必须为大写字母且后面要跟随至少一个参数 2指令按照从上到下顺序执行 3#表示注释 4每条指令都会创建一个新的镜像层并对镜像进行提交 Docker执行Dockerfile的大致流程 1docker从基础镜像运行一个容器 2执行一条指令并对容器作出修改 3执行类似docker commit的操作提交一个新的镜像层 4docker再基于刚提交的镜像运行一个新容器 5执行dockerfile中的下一条指令直到所有指令都执行完成 从应用软件的角度来看Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段 Dockerfile是软件的原材料Docker镜像是软件的交付品Docker容器则可以认为是软件镜像的运行态也即依照镜像运行的容器实例 Dockerfile面向开发Docker镜像成为交付标准Docker容器则涉及部署与运维三者缺一不可合力充当Docker体系的基石。 1.Dockerfile需要定义一个DockerfileDockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道这时需要考虑如何设计namespace的权限控制)等等; 2.Docker镜像在用Dockerfile定义一个文件之后docker build时会产生一个Docker镜像当运行 Docker镜像时会真正开始提供服务; 3.Docker容器容器是直接提供服务的 10.2 dockerFIle经典案例 # user defined centos7# 定义当前镜像基于centosFROM centos# 定义作者的名字和邮箱 MAINTAINER compasscompass.qq.com# 用来在构建镜像过程中设置环境变量ENV MYPATH /usr/local# 指定在创建容器后终端默认登陆的进来工作目录WORKDIR $MYPATH# 容器构建时需要运行的命令RUN yum -y install vimRUN yum -y install net-tools# 对外开放的端口号EXPOSE 80# 指定一个容器启动时要运行的命令 CMD echo $MYPATH CMD echo my defined centos7 build success CMD /bin/bash 10.3 DockerFile常用保留字指令 1.FROM:指定当前镜像是基于那个镜像进行构建 # 例如基于centos镜进行构建 FROM centos:72.MAINTAINER:标识镜像的维护作者和邮箱 # 例如 MAINTAINER compasscompass.qq.com3…VOLUME:指定主机和容器之间数据同步的目录 #格式 VOLUME [/path/to/dir] #示例 VOLUME [/data] VOLUME [/var/www, /var/log/apache, /etc/apache]4.EXPOSE当前容器对外暴露的端口号 EXPOSE 30605.WORKDIR:容器构建完毕后使用终端进入容器的默认路径 WORKDIR /usr/local/bin/software6.USER:指定用于以什么样的角色去执行如果不指定默认是root USER root7.ENV:容器构建过程中设置的环境变量 # 定义环境变量 ENV CLASS_PATH /usr/local/jdk/bin # 别的地方引用环境变量 WORKDIR $CLASS_PATH8.ADD:将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包 将宿主机目录下的文件拷贝到镜像里面 (会自动解压 tar 压缩包),src 可以是一个本地文件或者是一个本地压缩文件压缩文件会自动解压。还可以是一个 url如果把 src 写成一个 url那么 ADD 就类似于 wget 命令然后自动下载和解压。 ?格式: ADD src... dest ADD [src,... dest] # 用于支持包含空格的路径 ?示例 ADD hom* /mydir/ # 添加所有以hom开头的文件 ADD hom?.txt /mydir/ # ? 替代一个单字符,例如home.txt ADD test relativeDir/ # 添加 test 到 WORKDIR/relativeDir/ ADD test /absoluteDir/ # 添加 test 到 /absoluteDir/9.COPY:类似ADD拷贝文件和目录到镜像中。 将从构建上下文目录中 源路径 的文件/目录复制到新的一层的镜像内的 目标路径 位置 COPY [src, dest]10RUN:容器构建时需要执行的shell指令 #例如容器构建时安装vim编辑器 [shell格式] RUN yum install vim #例如容器构建时安装vim编辑器 [CMD格式] RUN [可执行文件,参数1,参数n] RUN [./statat.sh,-p,3306] 11.CMD:指定容器启动后的要干的事情 Dockerfile 中可以有多个 CMD 指令但只有最后一个生效CMD 会被 docker run 之后的参数替换 CMD 指令类似于 RUN 指令用于运行程序但二者运行的时间点不同CMD 在docker run 时运行而非docker build; CMD 指令的首要目的在于为启动的容器指定默认要运行的程序程序运行结束容器也就结束注意: CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。语法格式CMD command 或CMD [executeable,param1,param2,...] CMD [param1,param2,...] 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数 12.NTRYPOINT:容器启动后需要执行的指令不会被覆盖 NTRYPOINT 指令类似于 CMD 指令但其不会被 docker run 的命令行参数指定的指令所覆盖而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序但是, 如果运行 docker run 时使用了 --entrypoint 选项此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序语法格式ENTRYPOINT command 或ENTRYPOINT [executeable,param1,param2,...] 13.ONBUILD :当该镜像被用于构建其他基础镜像的时候需要触发的操作 #格式 ONBUILD [INSTRUCTION] #示例 ONBUILD ADD . /app/src14.LABEL :为镜像添加标签 # 说明LABEL会继承基础镜像种的LABEL如遇到key相同则值覆盖 ABEL keyvalue keyvalue keyvalue ...# 例如 \ 表示换行 LABEL multi.label1value1 \ multi.label2value2 \15.ARG:指定构建参数 #设置变量命令ARG命令定义了一个变量在docker build创建镜像的时候使用 --build-arg varnamevalue 来指定参数 #如果用户在build镜像时指定了一个参数没有定义在Dockerfile种那么将有一个WarningARG username # 声明变量 ARG buildVersion1 #给变量赋默认值16.STOPSIGNAL当容器停止时给系统发送什么样的指令默认是15 STOPSIGNAL signal10.4 docker build #语法 docker build [OPTIONS] PATH | URL | - OPTIONS说明--build-arg[] :设置镜像创建时的变量--cpu-shares :设置 cpu 使用权重--cpu-period :限制 CPU CFS周期--cpu-quota :限制 CPU CFS配额--cpuset-cpus :指定使用的CPU id--cpuset-mems :指定使用的内存 id--disable-content-trust :忽略校验默认开启-f :指定要使用的Dockerfile路径--force-rm :设置镜像过程中删除中间容器--isolation :使用容器隔离技术--label[] :设置镜像使用的元数据-m :设置内存最大值--memory-swap :设置Swap的最大值为内存swap-1表示不限swap--no-cache :创建镜像的过程不使用缓存--pull :尝试去更新镜像的新版本--quiet, -q :安静模式成功后只输出镜像 ID--rm :设置镜像成功后删除中间容器--shm-size :设置/dev/shm的大小默认值是64M--ulimit :Ulimit配置。--squash :将 Dockerfile 中所有的操作压缩为一层。--tag, -t: 镜像的名字及标签通常 name:tag 或者 name 格式可以在一次构建中为一个镜像设置多个标签。--network: 默认 default。在构建期间设置RUN指令的网络模式 10.5 使用docker构建一个java环境 # 基础镜像 FROM centos:7 #作者信息 MAINTAINER compasscompass.qq.com # bash进入终端时的默认路径 WORKDIR / # 下载工具包 RUN yum install -y yum-utils # 安装vim RUN yum install -y vim # 下载网络工具包 RUN yum install -y net-tools #创建目录 RUN mkdir -p /soft/java # 将外部的jdk解压到指定路径 指定 -C解压到指定路径不然解压后不知道存放到哪儿去了 COPY [jdk-11.0.8_linux-x64_bin.tar.gz, /soft/java/] RUN tar -zxvf /soft/java/jdk-11.0.8_linux-x64_bin.tar.gz -C /soft/java # 配置环境变量 ENV JAVA_HOME/soft/java/jdk-11.0.8 ENV JRE_HOME${JAVA_HOME}/jre ENV CLASSPATH.:${JAVA_HOME}/lib:${JRE_HOME}/lib ENV PATH${JAVA_HOME}/bin:$PATH # 暴露端口 EXPOSE 8080 # 执行构建成功的命令 CMD echo build success # 进入到bash终端 CMD /bin/bash 镜像构建 # 文件名必须是叫 DockerFile ,在Dockerfile路径下准备好jdk并且需要确认解压后的名称和Dockerfile中的名称一致 docker build -t centos-java:11 .11.docker网络 docker启动后网络情况会产生一个名为docker0的虚拟网桥 11.1 docker网络常用命令 1.查看docker网络模式命令 docker network ls2.查看网络数据源 docker network inspect [NETWORT_NAME]3.删除网络 docker network rm [NETWORT_NAME]4.创建一个网络 docker network create [NETWORT_NAME]5.将正在运行的容器连接到网络 docker network connect [NETWORT_NAME] CONTATINER_NAME6.指定容器的ip地址 docker network connect --ip 10.10.10.10 网络名 容器7.启动容器时需要连接的网络 docker run -itd --network网络名 即将启动的容器8.删除没有使用的网络 docker network prune9.强制停止容器的网络 docker network disconnect 网络名 容器11.2 网络模式 11.2.1 bridge 为每一个容器分配、设置IP等并将容器连接到docker0的虚拟网桥。若没有特别申明则为默认自带一个IP以及网络设置。一人一个 --network bridge #没有进行特殊申明的话默认为docker011.2.2 host 容器不会虚拟出自己的网卡、IP等而是使用宿主机的IP和端口。多人一个 --network host11.2.3 none 容器有自己独立的Network namespace但是没有进行任何的相关配置。有但是空的 --network none11.2.4 container 新创建的容器不会创建自己的网卡没有自己的IP也不会进行相应的配置。而是和一个指定的容器共享IP端口范围等。自己没有用别人的 --network container:[容器名或容器ID]11.2.5 自定义网络 自定义网络新建时默认依旧是bridge模式连接到这个自定义网络的容器可以使用服务名称进行通信 # 创建一个网络 docker network create van_network # 让容器使用自定义网络 docker run -d -p 8081:8080 --network van_network --name tomcat81 billygoo/tomcat8-jdk812.Docker-compose 12.1 Docke是什么r-compose Compose 是 Docker 公司推出的一个工具软件可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml写好多个容器之间的调用关系。然后只要一个命令就能同时启动/关闭这些容器 Docker-Compose是Docker官方的开源项目 负责实现对Docker容器集群的快速编排。 12.2 docker-compose能做什么 docker建议我们每一个容器中只运行一个服务,因为docker容器本身占用资源极少,所以最好是将每个服务单独的分割开来但是这样我们又面临了一个问题 如果我需要同时部署好多个服务,难道要每个服务单独写Dockerfile然后在构建镜像,构建容器,这样累都累死了,所以docker官方给我们提供了docker-compose多服务部署的工具 例如要实现一个Web微服务项目除了Web服务容器本身往往还需要再加上后端的数据库mysql服务容器redis服务器注册中心eureka甚至还包括负载均衡容器等等 Compose允许用户通过一个单独的docker-compose.yml模板文件YAML 格式来定义一组相关联的应用容器为一个项目project。 可以很容易地用一个配置文件定义一个多容器的应用然后使用一条指令安装这个应用的所有依赖完成构建。Docker-Compose 解决了容器与容器之间如何管理编排的问题。 12.3 安装docker-compose 下载地址https://docs.docker.com/compose/install/ 官网https://docs.docker.com/compose/compose-file/compose-file-v3/ 二进制下载地址https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 #1.下载完毕后重命名 mv docker-compose-linux-x86_64 docker-compose #2.添加执行权限 hmod 777 docker-compose #3.一到到软件目录下 mv docker-compose /usr/local/bin/ #4.安装成功 查看版本号 docker-compose version # 5. 卸载docker-compse rm -f /usr/local/bin/docker-compose12.4 Compose核心概念 一文件 docker-compose.yml 两要素 服务service: 一个个应用容器实例比如订单微服务、库存微服务、mysql容器、nginx容器或者redis容器工程project : 由一组关联的应用容器组成的一个完整业务单元在 docker-compose.yml 文件中定义。 12.5 Compose使用的三个步骤 编写Dockerfile定义各个微服务应用并构建出对应的镜像文件使用 docker-compose.yml 定义一个完整业务单元安排好整体应用中的各个容器服务。最后执行docker-compose up命令 来启动并运行整个应用程序完成一键部署上线 12.6 compose常用命令 # 查看帮助 docker-compose -h # 启动所有docker-compose服务 docker-compose up # 启动所有docker-compose服务并后台运行 docker-compose up -d # 停止并删除容器、网络、卷、镜像。 docker-compose down # 进入容器实例内部 docker-compose exec docker-compose.yml文件中写的服务id /bin/bash docker-compose exec yml里面的服务id # 展示当前docker-compose编排过的运行的所有容器 docker-compose ps # 展示当前docker-compose编排过的容器进程 docker-compose top # 查看容器输出日志 docker-compose logs yml里面的服务id # 检查配置 docker-compose config # 检查配置有问题才有输出 docker-compose config -q # 重启服务 docker-compose restart # 启动服务 docker-compose start # 停止服务 docker-compose stop 12.7 docker-compose启动多服务 version: 3services:microService:image: order_service:1.6container_name: ms01ports:- 6001:6001volumes:- /app/microService:/datanetworks: - docker_compose_net depends_on: - redis- mysqlredis:image: redis:6.0.8ports:- 6379:6379volumes:- /app/redis/redis.conf:/etc/redis/redis.conf- /app/redis/data:/datanetworks: - docker_compose_netcommand: redis-server /etc/redis/redis.confmysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: 123456MYSQL_ALLOW_EMPTY_PASSWORD: noMYSQL_DATABASE: db2021MYSQL_USER: rootMYSQL_PASSWORD: rootports:- 3306:3306volumes:- /app/mysql/db:/var/lib/mysql- /app/mysql/conf/my.cnf:/etc/my.cnf- /app/mysql/init:/docker-entrypoint-initdb.dnetworks:- docker_compose_netcommand: --default-authentication-pluginmysql_native_password #解决外部无法访问networks: docker_compose_net: 执行执行 docker-compose up 或者 执行 docker-compose up -d 容器进程 docker-compose top 查看容器输出日志 docker-compose logs yml里面的服务id 检查配置 docker-compose config 检查配置有问题才有输出 docker-compose config -q 重启服务 docker-compose restart 启动服务 docker-compose start 停止服务 docker-compose stop ## 12.7 docker-compose启动多服务yaml version: 3services:microService:image: order_service:1.6container_name: ms01ports:- 6001:6001volumes:- /app/microService:/datanetworks: - docker_compose_net depends_on: - redis- mysqlredis:image: redis:6.0.8ports:- 6379:6379volumes:- /app/redis/redis.conf:/etc/redis/redis.conf- /app/redis/data:/datanetworks: - docker_compose_netcommand: redis-server /etc/redis/redis.confmysql:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: 123456MYSQL_ALLOW_EMPTY_PASSWORD: noMYSQL_DATABASE: db2021MYSQL_USER: rootMYSQL_PASSWORD: rootports:- 3306:3306volumes:- /app/mysql/db:/var/lib/mysql- /app/mysql/conf/my.cnf:/etc/my.cnf- /app/mysql/init:/docker-entrypoint-initdb.dnetworks:- docker_compose_netcommand: --default-authentication-pluginmysql_native_password #解决外部无法访问networks: docker_compose_net: 执行执行 docker-compose up 或者 执行 docker-compose up -d
http://www.dnsts.com.cn/news/118416.html

相关文章:

  • 网站搭建软件网站建设 书
  • dede 网站地图衡水学校网站建设
  • 如何做像淘宝一样的网站工商注册公司查名
  • 土特产网站建设状况竞价推广遇到恶意点击怎么办
  • 制作网站源码软件微信房地产网站建设
  • 庐江县住房和城乡建设局网站个人网站建设方案模板
  • 网站开发哈尔滨网站开发公司理财网站如何做推广
  • 深圳白帽优化西安网站优化指导
  • 网站建设项目报价单网站建设费 什么科目
  • 中文域名可以做网站吗saharan wordpress
  • 网站建设维护工作网站建设中目录是什么意思
  • 备案的时候需要网站吗网站被域名重定向
  • html5手机网站教程重庆做企业年报在哪个网站做
  • 怎么做网站演示h5制作免费素材
  • 关于网站建设的外文翻译宁夏建设工程交易中心网站
  • 网站可兼容移动端做网站用什么软件编辑
  • 互联网网站建设挣钱吗wordpress更新需要连接ftp
  • 高校健康驿站建设指引淮上网站建设
  • 广州公司网站制作公司深圳网站建设公司官网
  • 免费网站电视剧下载石家庄做建站模板
  • 商城网站建设哪家效益快网站式登录页面模板下载
  • 网站设计项目书网站qq访客记录原理
  • 个人微信号做网站行吗wordpress vpn
  • 网站手机缩放扬州网站建设电话
  • 怎样创建网站以及建站流程是什么织梦手机网站有广告位
  • 广东省特色专业建设网站建设银行e路通网网站
  • 浩博建设集团网站单位网站建设要记入无形资产吗
  • 网站建设公司的出路wordpress wap版
  • 网站专业优化公司网站建设框架怎么做
  • 网站升级停止访问如何做查询网站空间的服务商