docker
2021-03-23 18:41:48 3 举报
AI智能生成
docker入门
作者其他创作
大纲/内容
docker 简介
是什么
问题 : 为什么会有 docker 的出现?
一款产品从开发到上线,从操作系统,到运行环境,再到应用配置,作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司不得不面对的问题,特别是各种版本迭代之后,不同版本环境的兼容,对运维人员都是考验
docker 之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案
环境配置如此麻烦,换一台机器,就要重来一次,费时费力,很多人想到,能不能从根本上解决问题,软件可以带环境安装? 也就是说,安装的时候,把原始环境一模一样的复制过来,开发人员利用docker 可以清除协作编码时在我机器上可正常运行的问题
docker 镜像的设计,使得docker 得以打破过去[程序即应用]的观念,透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程序跨平台间无缝接轨运作
docker 理念
docker 是基于 go语言实现的云开源项目
docker 的主要目标是 Build ,Ship and Run App , Anywhere ,也是通过对应用组件的封装,分发,部署,运行等生命周期的管理,使用户的app (可以是一个web应用或数据库应用等)及其运行环境能够做到 一次封装,多次运行
Linux 容器技术的出现就解决了这样一个问题,而Docker 就是在它的基础上发展过来的,将应用运行在 Docker 容器上面,而Docker 容器在任何操作系统上都是一致的,这就实现了跨平台,跨服务器,只需要配置一次环境,换到别的机子上就可以一键部署好,大大简化了操作
一句话
解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术
能干嘛
之前的虚拟机技术
虚拟机就是带环境安装的一种解决方案,它可以在一个操作系统里面运行另外一种操作系统,比如 再Windows 里面运行Linux系统
应用程序对此毫无感知,因为虚拟机看上跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删除,对其他部分毫无影响,这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变
虚拟机的缺点
资源占用多
冗余步骤多
启动慢
容器虚拟化技术
由于前面虚拟机的特点,Linux 发展出另一种虚拟机技术,Linux 容器 (Linux Containers) 缩写 LXC
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中,容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置,系统因此变得高效轻量并保证部署在任何环境中的软件都能始终如一运行
Docker 与传统虚拟机的区别
传统虚拟机技术是虚拟机出了一套硬件后,在其上运行了一个完整的操作系统,在该操作系统上再运行所需要的进程
而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟,因此容器要比传统虚拟机更为轻便
每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源
开发/运维(DevOps)
一次构建,随处运行
更快速的应用交付和部署
更便捷的升级和扩缩容
更简单的系统运维
更高效的计算资源利用
企业级
新浪
美团
...
在哪下
官网
仓库
docker安装
前提说明
docker 要求linux 系统版本内核为 2.6.32-431 或者更高版本
查看自己Linux 版本
uname -r
3.10.0-1127.19.1.el7.x86_64
cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
docker 架构图
docker 的基本组成
镜像(image)
docker 镜像(image) 就是一个只读的模板,镜像可以用来创建 docker 容器,一个镜像可以创建很多容器
容器(Container)
docker 利用容器(Container) 独立运行的一个或一组应用,容器是用镜像创建的运行实例
它可以启动,开始,停止,删除,每个容器都是相互隔离的,保障安全的平台
可以把容器看做是一个简易版的 Linux 环境(包括root 用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序
容器的定义和镜像几乎是一模一样,也是一对层的统一视角,唯一区别在于容器的最上面那一层是可读可写的
仓库( Repositry)
仓库是集中存放镜像文件的场所,仓库和仓库注册服务器是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库又包含多个镜像,每个镜像有不同的标签
仓库又分为公开仓库和私有仓库
最大的公开仓库是 docker hub
存放了数量庞大的镜像供用户下载,国内最大的公开仓库阿里云,网易云等
小总结
docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好行成一个可交付的运行环境,这个打包好的运行环境就类似一个 image 镜像文件,只有通过这个镜像文件才能生成 docker 容器,image 文件可以看做是容器的模板,docker 根据image 文件生成容器的实例,同一个image 文件,可以生成多个同时运行的容器实例
image 文件生成容器实例,本身也是一个文件,称为镜像文件
至于仓库,就是存放一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候从仓库中拉下来即可
一个容器运行一种服务,当我们需要的时候,就可以通过docker 客户端创建一个对应的实例,也就是我们的容器
安装步骤
开机启动docker
systemctl enable docker
镜像配置
阿里云镜像加速配置
获取加速器地址链接
配置参考阿里云文档
如何查看是否修改成功
docker info 查看 Registry Mirrors:
docker search mysql 出现错误 Error response from daemon: Get https://index.docker.io/v1/search?q=java&n=25: dial tcp:
1), vim /etc/resolv.conf
2), systemctl restart network
3), systemctl restart docker
永远的hello word
docker run hello-world
底层原理
docker 是怎么工作的
docker 是一个Client-Server 结构的系统,Docker 守护进程运行在主机上,然后通过 socket 连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器,容器是一个运行时环境,就是我们前面说的集装箱
为什么docker比VM快
1),docker 有更少的抽象层
2), docker利用的是宿主的内核,而不需要centos
docker常用命令
帮助命令
docker version
docker info
docker help
镜像命令
docker images
列出本地主机上的镜像
REPOSITORY
TAG
IMAGE ID
CREATED
SIZE
镜像的仓库源
镜像的标签
镜像ID
镜像创建时间
镜像大小
同一个仓库源可以有多个TAG,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像,如果你不指定一个镜像的版本标签,例如你只使用 ubuntu ,docker 将默认使用 ubuntu:latest 镜像
options 说明
-a 列出本地所有的镜像(含中间映射层)
-q 只显示镜像ID
-- digests 显示镜像的摘要信息
--no-trunc 显示完整的镜像信息
docker search 某个xx镜像名字
网站
命令
docker search [OPTIONS] 镜像名字
OPTIIONS 说明
--no-trunc 显示完整的镜像描述
--filter=stars=? 列出收藏数不小于指定值的镜像
automated 只列出 automated build 类型的镜像
docker pull 下载某个xx镜像名字
docker rmi 删除某个xx镜像名字id
删除单个镜像
docker rmi -f 镜像ID
删除多个镜像
docker rmi -f [镜像名] [镜像名]
删除全部镜像
docker rmi -f $(docker images -q)
有了pull / 是不是有 commit ? push ?
容器命令
有镜像才能创建容器,这是根本前提(Centos 镜像演示)
docker pull centos
新建并启动容器
docker run [OPTIONS] image [COMMAND] [ARG...]
OPTIONS
--name=''容器新名字"
-d 后台运行容器,并返回容器ID,也即启动守护线程
-i 以交互模式运行容器,通常与 -t 同时使用
-t 为容器重新分配一个伪终端,通常与 -i 同时使用
-P 随机端口映射
-p 指定端口映射
列出当前所有正在运行的容器
docker ps [OPTIONS]
OPTIONS
-a 列出当前所有正在运行的容器+历史上运行过的
-l 显示最近创建的容器
-n 显示最近n个创建的容器
--no-trunc 不截断输出
-q ,静默模式,只显示容器编号
退出容器
exit 容器停止退出
ctrl +p +Q 容器不停止退出
启动容器
docker start [容器ID / 容器名]
重启容器
docker restart [容器ID / 容器名]
停止容器
docker stop [容器ID / 容器名]
强制停止容器
docker kill [容器ID / 容器名]
删除已停止容器
docker rm 容器ID
一次性删除多个容器
docker rm -f $(docker ps -q -n 4)
docker ps -a -q |xargs docker rm
重要
启动守护式容器
docker run -d [容器名]
问题 docker ps -a 进行查看,会发现容器已经退出
很重要的说明的这一点: Docker 容器后台运行,就必须有一个前台进程
容器运行的命令如果不是那些一直挂起的命令(比如运行的 top , tail ),就会自动退出
这个是 docker 机制问题,比如说你的 web容器,我们以nginx 为例,正常情况下,我们配置启动服务只需要启动响应的 service 即可,例如 service nginx start
但是这样做,nginx 为后台进程模式运行,就导致docker 前台没有运行的应用
这样的容器后台启动后,会立即自杀因为它觉得它没事可做了
所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行
查看容器日志
docker logs -f -t -tail 容器ID
-t 是加入时间戳
-f 跟随最新的日志打印
-tail 数字,显示最后多少条
查看容器内运行的进程
docker top [容器ID]
查看容器内部细节
docker inspect [容器ID]
进入正在运行的容器并以命令行交互
使用 ctrl + p+Q 退出后,如何重新进入呢?
docker attach [容器ID]
docker exec -t cf739b88e052 ls -l /tmp
docker exec -it dc182a4de9d1 /bin/bash
从容器内拷贝文件到主机上
docker cp [容器ID]:[容器内需要copy的文件路径] [新的路径]
小总结
如果命令不够则参考官网api
docker 镜像
是什么
UnionFS (联合文件系统)
UnionFS(联合文件系统), Unions 文件系统(UnionFS) 是一种分层,轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层一层的叠加,同时可以将不同的目录挂载到同一个虚拟文件系统下
UnionFS 文件系统时 Docker 镜像的基础,镜像可以通过分层来进行集成,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像
特性:
一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
Docker 镜像加载原理
docker 镜像实际上由一层一层的文件系统组成,这种层级的文件系统 UnionFS
bootfs(boot file system) 主要包含 bootloader 和 kernel ,bootloader 主要引是引导加载 kernel , Linux 刚启动时会加载 bootfs 文件系统,在 Docker 镜像的最底层是 bootfs , 这一层与我们典型的 Linux 系统一样,包含 boot 加载器和内核,当boot 加载完成后整个内核就在内存中,此时内存的使用权已由 bootfs 转交给内核,此时系统也会卸载 bootfs
rootfs 在 bootfs 之上,包含的就是典型 Linux 系统中的 /dev , /proc ,/bin , /etc 等标准目录和文件,rootfs 就是各种不同操作系统发型版,比如 Ubuntu , Centos等
平时我们安装虚拟机的 centos 都好几个G,为什么docker 这里才200M?
对于一个精简的centos , rootfs可以很小,只需要包括最基本的命令,工具和程序库就可以了,因为底层直接用 Host 的 kernel ,自己只需要提供 rootfs 就行了,由此可见对不同的linux 发行版,bootfs 基本是一致的,rootfs 会有差别,因此不同的发型版本可以共用 bootfs
分层的镜像
例如 docker pull tomcat
756975cb9c7e: Already exists
d77915b4e630: Already exists
5f37a0a41b6b: Already exists
96b2c1e36db5: Already exists
27a2d52b526e: Already exists
a867dba77389: Already exists
0939c055fb79: Already exists
0b0694ce0ae2: Already exists
ecfd61680f76: Pull complete
4cc8f7c49073: Pull complete
d77915b4e630: Already exists
5f37a0a41b6b: Already exists
96b2c1e36db5: Already exists
27a2d52b526e: Already exists
a867dba77389: Already exists
0939c055fb79: Already exists
0b0694ce0ae2: Already exists
ecfd61680f76: Pull complete
4cc8f7c49073: Pull complete
为什么Docker 镜像要采用这种分层结构呢?
最大的好处就是--共享资源,比如,有好多镜像都是从相同的 base 镜像构建而来,那么宿主机只需要保存一份base镜像,同时内存中也只需加载一份base 镜像,就可以为所有容器服务了,而且镜像的每一层都可以被共享
特点
docker 镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称作容器层,容器层之下的都叫镜像
docker 镜像commit 操作补充
docker commit 提交容器副本使之成为一个新的镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID要创建的目标镜像名:[标签名]
栗子
1), 从Hub 上下载tomcat镜像到本地并运行成功
docker run -it -p 8888:8080 [容器ID]
访问 域名:8888 如果访问失败404
docker exec -it [容器id] /bin/bash
ls -l 查看文件路径
把webapps 删除(它是空白的),然后把webapps.dist 名字修改为 webapps
2), 故意删除上一步镜像生产tomcat容器的文档
进入tomcat容器
docker exec [容器id] /bin/bash
cd /webapps
rm -r docs
3),也即当前的tomcat 运行实例是一个没有文档内容的容器,以它为模板 commit 一个没有doc 的tomcat 新镜像 atguigu/tomcat02
docker commit -a="zgx" -m="tomcat no docs" e42845b8701d zgx/tomcat:1.2
4), 启动我们新的镜像并和原来镜像对比
启动 zgx/tomcat1.2 没有 docs
启动原来的 tomcat 有docs
docker 容器数据卷
是什么
docker 理念 : 将运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的要求希望是持久化的
容器之间 希望有可能共享数据
docker 容器产生的数据,如果不通过 docker commit 生成新的镜像,使得数据做为镜像的一部分存活下来,那么当容器删除后,数据自然也就没有了,为了能保存数据在 docker 我们使用了卷
能干嘛
容器的持久化
容器间继承+共享数据
数据卷
容器内添加
直接命令添加
命令
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
查看数据卷是否挂载成功
容器和宿主机之间数据共享
容器停止退出后,主机修改后数据是否同步
命令(带权限)
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
dockerFile 添加
根目录新建mydocker 文件夹并进入
可在dockerfile中使用 VOLUME 指令来给镜像添加一个或多个数据卷
VALUME["/dataVolumeContainer","/dataVolumeContainer1","/dataVolumeContainer2"]
说明: 出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能直接在dockerFile 中实现,由于宿主机目录时依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录
file 构建
build 后生成镜像
或得一个新镜像 zzyy/centos
docker build -f /root/mydocker/dockerfile -t zzyy/centos .
run 容器
docker run -it zzyy/centos /bin/bash
通过上述步骤,容器内的卷目录地址已经知道对应的主机目录地址那?
使用 docker inspect [容器id] 查看 Mounts 已经给出了位置
主机对应默认地址
备注
docker 挂载主机目录docker 访问出现 catnot open directory.:Permission denied
在挂载目录后多加一个--privileged=true参数
数据卷容器
是什么
命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据的共享,挂载数据卷的容器,称之为数据卷容器
总体介绍
它们已经具有容器卷
/dataVolumeContainer
/dataVolumeContainer1
容器间传递共享(-- volumes from)
先启动一个父容器dc01 ,
在dataContainer2 新增一个内容
dc02 / dc03 继承自dc01
--volumes-from
命令docker run -it --name dco3 --volumes-from dc01 zzyy/centos
dc02 / dc03 分别在 dataContainer2中各自添加内容
回到 dc01 可以看到 dc02 /dc03 各自添加的都能共享了
删除dc01 ,dc02修改后 dc03是否可以访问
删除dc02后,dc03是否可以访问
新建dc04 继承自dc03 再删除dc03
结论: 容器之间配置信息的传递,数据卷的声明周期一直持续到没有容器使用它为止
dockerFile 解析
是什么
dockerfile 是用来构建docker 镜像的构建文件,是由一系列命令和参数构成的脚本
构建三步骤
编写dockerFile 文件
docekr build
docker run
文件什么样
以centos为例
dockerFile 构建过程解析
dockerfile 内容基础知识
1), 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2),指令按照从上到下,顺序执行
3),#表示注释
4), 每条指令都会创建一个新的镜像层,并对镜像进行提交
docker 执行dockerfile 的大致执行流程
1), docker 从基础镜像运行一个容器
2), 执行一条指令并对容器作出修改
3), 执行类似 docker commit 的操作提交一个新的镜像层
4), docker 再基于刚提交的镜像运行一个新容器
5), 执行 dockerfile中的下一条指令直到所有指令都执行完成
小总结
从应用软件的角度看
dockerfile 是软件的原材料
docker 镜像是软件的交付品
docker 容器则是可以认为是软件的运行态
dockerfile 面向开发,docker镜像成为交付标准,docker 容器则涉及部署与运维,三者缺一不可,合力充当docker 体系的基石
1), dockerfile 需要定义一个 dockerfile ,dockerfile 定义了进程需要的一切东西,dockerfile 涉及的内容包括执行代码或文件,环境变量,依赖包,运行时环境,动态链接库,操作系统的发行版,服务进程和内核进程等等
2),docker 镜像,在用 dockerfile 定义了一个文件之后,docker build 时会产生一个 docker镜像,当运行 docker镜像时,会真正开始提供服务
3),docker 容器,容器是直接提供服务的
dockerfile 体系结构(保留字指令)
FROM
基础镜像,当前镜像是基于那个镜像的
ADD
将宿主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 URL 和解压tar 压缩包
COPY
类似ADD ,拷贝文件和目录到镜像中,将从构建上下文目录中 <源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
COPY src dest
COPY [src dest]
LABEL
标签
CMD
指定一个容器启动时要运行的命令
dockerfile 中可以有多个 CMD指令,但只有最后一个生效,此目的会被docker run 之后的参数替换
ENTRYPOINT
指定一个容器启动时要运行的命令
ENTRYPONINT 的目的和 cmd 是一样的,都是在指定容器启动程序及参数
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
容器构建时需要运行的命令
EXPOSE
当前容器对外暴露出的端口
WORKDIR
指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
ENV
用来构建镜像过程中设置环境变量
VOLUME
容器数据卷,用于数据保存和持久化工作
ONBUILD
当构建一个被继承的 dockerfile 时运行的命令,父镜像在被子继承后父镜像的 onbuild 被触发
小总结
案例
Base 镜像(scratch)
docker hub中99% 的镜像都是通过在base 镜像中安装和配置需要的软件构建出来
自定义镜像 mycentos
Hub 默认的centos 镜像是什么情况
vim 无法编辑文本
ifconfig 没有这个命令
初始centos 运行镜像的默认路径是 /
我们自定义centos 镜像具有以下特性
登录后的默认路径
vim 编辑器
查看网络配置 ifconfig
自定义镜像
1),编写
vim dockerfile
2),构建
docker build -f dockerfile -t mycentos:1.3 .
3),运行
docker run -it --name mycentos1.3 [容器名字]:标签
4),列出镜像的变更历史
docker history [Images ID]
如果build出现错误 Error: Failed to download metadata for repo 'AppStream'
请关闭防火墙
CMD/ENTRYPOINT 镜像案例
都是指定一个容器启动时要运行的命令
CMD
dockerfile中可以有多个CMD 命令但只能有一个最后一个CMD 生效,CMD会被docker run 之后的参数替换掉
案例: tomcat演示
docker run -it -p 8888:8080 tomcat:latest ls -l
ENTRYPOINT
docker run 之后的参数会被当做参数传递给 ENTRYPONINT ,之后形成新的命令组合
案例
curl制作CMD版可以查询IP信息的容器
vim dockerfile3
docker build -f dockerfile3 -t myip:1.0 .
docker run -it myip:1.0
结果
curl 命令解释
curl 命令可以用来执行下载,发送各种HTTP请求,指定HTTP头部等操作,如果系统没有curl 可以使用 yum -y install curl 进行安装,也可以下载安装
curl是将下载文件输出到 stdout
使用命令 curl http://www.baidu.com 执行后,www.baidu.com 的html 就会显示在屏幕上
这是最简单的使用方法,用这个命令获得了 http://curl.haxx.se 指向的页面,同样,如果这里的URL 指向的是一个文件或者一幅图直接下载到本地,如果下载的是html文档,那么缺省的将只显示文件头部,即html文档的header ,要全部显示 请加参数 -i
问题
如果我们希望显示http 头信息,就需要添加 -i 参数
docker run myip:1.0 -i
docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "-i": executable file not found in $PATH: unknown.
ERRO[0000] error waiting for container: context canceled
ERRO[0000] error waiting for container: context canceled
why?
我们可以看到可执行文件找不到报错,executable file not found in $PATH: unknown.
跟在镜像名后面的是 CMD ,运行时会替换CMD 的默认值
因此这里-i 替换了原来的CMD ,而不是添加在原来的, curl -s cip.cn 后面,而-i 根本不是命令,所以自然找不到,那么如果我们希望加入这个-i参数,我们必须重新完整的输入这个命令
制作 ENTRYPONINT 版查询iP的信息容器
vim dockerfile4
docker build -f dockerfile4 -t myip:1.1 .
docker run myip:1.1 -i 有可以 docker run myip:1.1
ONBUILD 案例演示
vim dockerfile4
vim dockerfile5
# Executing 1 build trigger
---> Running in 388affb3fefb
success father ------ok
---> Running in 388affb3fefb
success father ------ok
自定义镜像 tomcat9
1), mkdir -p /mydocker/tomcat9
2), 在上述目录下 touch c.txt
3), 将jdk 和 tomcat 安装的压缩包拷贝进上一步目录
apache-tomcat-8.5.59.tar.gz
jdk-8u261-linux-x64.tar.gz
4), 在 /mydocker/tomcat9 目录下新建 dockerfile文件
vim dockerfile
5), 构建
docker build -f dockerfile -t mytomcat .
6),run
docker run -d -p 8888:8080 --name mytomcat9 -v /root/mydocker/tomcat9/test:/usr/local/apache-tomcat-8.5.59/webapps/test -v /root/mydocker/tomcat9/logs:/usr/local/apache-tomcat-8.5.59/logs myt9
7),验证
ip:端口 是否可以访问tomcat首页
8), 结合前述的容器卷将测试的web服务test发布
创建一个WEB-INF/web.xml
/test/index.html
重启 docker restart [容器ID] 然后访问 ip:端口/test
小总结
docker 常用安装
安装步骤
1), 搜索镜像
2), 拉取镜像
3),查看镜像
4),启动镜像
5),停止容器
6),移除镜像
安装mysql
docker search mysql
docker pull mysql
/root/mydocker/config/my.cnf
docker run -p 3306:3306 --name mysql -v /root/mydocker/mysql/data:/var/lib/mysql -v /root/mydocker/mysql/conf:/etc/mysql/ -v /root/mydocker/mysql/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
数据库备份
docker exec 59aef2f0c147 sh -c 'exec mysqldump -all -database -uroot -p"123456"'> /root/all-database.sql
docker update 容器id--restart=always
安装redis
1), 在linux /root/mydocker/redis/conf/redis.conf 创建redis.conf文件
docker run -d --name redis -p 6379:6379 -v /root/mydocker/redis/data:/data -v /root/mydocker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf --appendonly yes
在 /root/mydocker/redis/conf/redis.conf/ 目录下新建 redis.conf 文件
docker exec -it 34efecec40b5 redis-cli
查看持久化文件
data/目录下
进入 redis客户端进行测试
docker exec -it youthful_sammet redis-cli
设置docker 启动启动服务
docker update redis --restart=always
安装elasticsearch
下载镜像文件
docker pull elasticsearch:7.10.1
docker pull kibana:7.10.1
创建目录
mkdir -p elasticsearch/config
mkdir -p elasticsearch/data
mkdir -p elasticsearch/plugins
开放外网访问
echo “http.host: 0.0.0.0” >> /root/mydocker/elasticsearch/config/elasticsearch.yml
启动
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms64m -Xmx512m" -v /root/mydocker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearche.yml -v /root/mydocker/elasticsearch/data:/usr/share/elasticsearch/data -v /root/mydocker/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.10.1
浏览器访问
http://192.168.247.111:9200/
如果出现错误可以使用
docker logs elasticsearch
错误信息 root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes
设置elasticsearch文件夹权限
chmod -R 777 /root/mydocker/elasticsearch/
重新启动
docker start ID号
重新访问9200端口
安装 Kibana
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.247.111:9200 -p 5601:5601 -d kibana:7.10.1
http://192.168.247.111:5601/
出现 Kibana server is not ready yet
docker logs ID 查看日志在做详细处理
安装 Nginx
在 /root/mydocker 目录下
mkdir nginx
mkdir conf
mkdir html
mkdir logs
docker pull nginx:1.19
docker run -p 80:80 --name nginx -d nginx:1.19
在 /root/mydocker/ 目录下执行 docker container cp nginx:/etc/nginx .
docker stop nginx
docker rm nginx
创建新的nginx
docker run -d -p 80:80 --name nginx -v /root/mydocker/nginx/html:/usr/share/nginx/html -v /root/mydocker/nginx/logs:/var/log/nginx -v /root/mydocker/nginx/conf:/etc/nginx/ nginx:1.19
安装rabbitmq
拉取镜像
docker pull rabbitmq:management
安装rabbitmq
docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 rabbitmq:management
docker 重启 rabbitmq 自动重启
docker update rabbitmq --restart=always
访问后台
ip:15672
用户密码都是guest
安装 Zipkin
docker run -d -p 9411:9411 openzipkin/zipkin
本地镜像发布阿里云
本地镜像发布到阿里云流程
镜像生成方法
dockerfile
从容器中创建一个新的镜像, docker commit [OPTIONS] 容器ID [REPOSITORY:tag]
docker run -it mycentos:1.2 生成 ed6d63543489
docker commit -a zgx -m "new centos ip and vim" ed6d63543489 mycentos2.0
将本地镜像推送到阿里云
1登录阿里云创建镜像仓库(本地仓库)
2),将镜像推送至阿里云 (点击刚才创建仓库的-管理)
将阿里云镜像下载到本地
拉取参考 阿里云文档
0 条评论
下一页