实用干货分享(2) - Docker使用操作指南
一、Docker安装部署
1. 安装仓库
执行以下命令,安装Docker所需的包。其中yum-utils提供yum-config-manager工具;
device-mapper-persistent-data及lvm2则是devicemapper存储驱动所需的包。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
执行如下命令,安装stable仓库。必须安装stable仓库,即使你想安装edge或test仓库中的Docker构建版本。
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
[可选]执行如下命令,启用edge及test仓库。edge/test仓库其实也包含在了docker.repo 文件中,但默认是禁用的,可使用以下命令来启用。
sudo yum-config-manager --enable docker-ce-edge # 启用edge仓库
sudo yum-config-manager --enable docker-ce-test # 启用test仓库
如需再次禁用,可加上--disable 标签。例如:执行如下命令即可禁用edge仓库。
sudo yum-config-manager --disable docker-ce-edge
2. 安装Docker CE
执行以下命令,更新yum的包索引
sudo yum makecache fast
执行如下命令即可安装最新版本的Docker CE
sudo yum install docker-ce
在生产环境中,可能需要指定想要安装的版本,此时可使用如下命令列出当前可用的Docker版本。
yum list docker-ce.x86_64 --showduplicates | sort -r
可使用如下命令,安装想要安装的Docker CE版本。
sudo yum install docker-ce-
启动Docker
Sudo systemctl start docker
这样,Docker将会下载测试镜像,并使用该镜像启动一个容器。如果能够看到类似如下的输出,则说明安装成功。(时间较长)
二、Docker操作的基本命令
启动Docker:sudo systemctl start docker
Docker镜像导入:docker load < 镜像包名(一般格式为tar.gz)
Docker镜像导出:docker save 镜像名 > 镜像所要打成的包名(一般格式为tar.gz)
Docker镜像查看:docker images
查看已经启动的Docker容器:docker ps
查看所有Docker容器:docker ps -a
下载Docker镜像: docker pull 镜像名称(可以到镜像仓库查询)
创建镜像:docker build -t 镜像名称(自定):版本号(自定) . 执行此命令前必须先写好Dockerfile文件,创建镜像命令要在Dockerfile所在目录执行,不要忘记版本号后加空格和点。
停止Docker容器:docker stop 容器名(或容器id)
删除Docker容器:docker rm 容器名(或容器id)
删除Docker镜像:docker rmi 容镜像名:版本号(或镜像id)
进入Docker容器:sudo docker exec -it 容器名 bash
查看Docker容器的地址:docker inspect 容器名(或容器id)
向Docker容器中拷贝文件:docker cp 文件名 容器id:容器中的目录
启动Docker容器:docker run --name 容器名称(自定)-v 虚拟机目录:容器目录 -e 环境变量参数 -d docker镜像名称:版本号
--name 容器命名
-v 文件挂载
-e 设置环境变量
-d 选择镜像
-p 端口映射
例子:
docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
三、开源Docker镜像下载过程
(以mysql为例)
在阿里云镜像仓库找搜索mysql容器进行
查看下载好的镜像
启动:
docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.20
四、自己打包Docker镜像过程
(以logstash为例)
1. 目录准备
准备好logstash的模板文件、jdk1.8的安装包、logstash的配置文件以及logstash的安装包。
2. 修改配置文件
kafka的地址和端口要使用宿主机的地址以及在部署kafka容器时做的端口映射的端口(这里使用的就是这种方法)。
还可以使用docker inspect命令查询kafka容器的地址,然后使用kafka容器的地址和kafka匹配的端口。
模板文件的地址配置时要使用logstash容器内的地址,要与Dockerfile文件内所规定的目录层级一致(可以自定)。
3. Dockerfile文件编写
模板:
FROM centos:latest
MAINTAINER xzp
WORKDIR /usr/local
ADD jdk-8u251-linux-x64.tar.gz /usr/local
ENV JAVA_HOME=/usr/local/jdk1.8.0_251
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
ENV LANG C.UTF-8
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
WORKDIR /opt/logstash
ADD logstash-6.8.3.tar.gz /opt/logstash
ADD kafka-logstash-es.conf /opt/logstash/logstash-6.8.3/config
ADD es-template.json /opt/logstash/logstash-6.8.3/config
ENTRYPOINT ["/opt/logstash/logstash-6.8.3/bin/logstash", "-f", "/opt/logstash/logstash-6.8.3/config/kafka-logstash-es.conf"]
补充:
4. 生成镜像
5. 启动Docker容器
五、Docker打包镜像过程中
注意事项
● 在配置一些组件的配置文件时,文件中的ip和端口的配置要依据映射或是容器的ip和端口;
● 在配置文件以及脚本文件时有路径的一律使用镜像中的路径;
● 在要使用启动jar包的命令时,不论是在脚本中还是在Dockerfile中,一律不许使用nohup;
● 在使用docker build -t 进行生产镜像时,必须在Docker同级目录下执行;
● 在使用 docker build -t 时不要忽略最后的空格和点;
● 在生成平台组件的镜像时必须使用自己的jdk;
● 在Dockerfile 执行脚本文件时必须给脚本文件授权;
● docker save和docker load命令必须使用同一套。
六、Docker打包以及部署过程中
遇到的bug
解决办法:在Dockerfile文件添加授权命令并重新生产镜像。
添加命令为:RUN chmod -R 777 容器中的绝对路径
问题描述:端口映射出现问题
解决办法:使用systemctl restart docker命令重启docker
错误描述:容器启动之后,正常运转一段时间后,重启
解决办法以及解决思路:
①查看配置文件,检查配置项,查看输出的日志;
②如果使用的是容器管理平台,需要查看脚本文件中启动所需要的内存资源,不能分配资源少于脚本中所需的资源;
③将日志文件挂载出来,查看日志文件。
错误描述:数据库表名大小写报错,已经倒库时报错。
问题原因:数据库版本问题
解决办法以及解决思路:
①找较新版本的数据库镜像(不建议使用);
②自己打包镜像并在my.cnf中加入以下配置。
#解决时间默认值不兼容的
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#设置忽略大小写(简单来说就是sql语句是否严格),默认库名表名保存为小写, 不区分大小写
lower_case_table_names = 1
错误描述:在build镜像时,报错找不到路径
解决办法及解决思路:
①检查build命令后是否存在空格和点(千万不要忘记);
②检查Dockerfile中的路径是否正确;
③检查脚本中的路径是否与Dockerfile中的路径一致,都采用镜像中的路径,且必须为绝对路径。
七、开源组件Docker镜像运行指令
Filebeat启动命令
docker run -d --name=filebeat --user=root --volume="/home/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro" --volume="/var/lib/docker/containers:/var/lib/docker/cintainers:ro" --volume="/var/run/docker.sock:/var/run/docker.sock:ro" elastic/filebeat:6.8.3 filebeat -e -strict.perms=false
Es启动命令
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:6.8.3
Redis启动命令
docker run -p 6379:6379 --name myredis -v /home/redis/redis.conf:/etc/redis/redis.conf -d redis:5.0.4 redis-server /etc/redis/redis.conf --appendonil yes
Zk启动命令
docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime -d wurstmeister/zookeeper
Kafka的启动命令
ocker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=172.16.0.13:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.16.0.13:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka
mysql启动命令
docker run --name mysql --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
八、可参考的容器镜像仓库
国内(阿里):
https://account.aliyun.com/
官方:https://hub.docker.com/
实用干货分享(2) - Docker使用操作指南的更多相关文章
- 逆向实用干货分享,Hook技术第一讲,之Hook Windows API
逆向实用干货分享,Hook技术第一讲,之Hook Windows API 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) ...
- 逆向实用干货分享,Hook技术第二讲,之虚表HOOK
逆向实用干货分享,Hook技术第二讲,之虚表HOOK 正好昨天讲到认识C++中虚表指针,以及虚表位置在反汇编中的表达方式,这里就说一下我们的新技术,虚表HOOK 昨天的博客链接: http://www ...
- 【干货分享】Google 的设计准则,素材和资源
在谷歌,他们说, “专注于用户,所有其它的就会水到渠成 ”.他们遵循设计原则,寻求建立让用户惊喜的用户体验.谷歌一直挑战自己,为他们的用户创造一种视觉语言,综合优秀设计的经典原则和创新.谷歌设计规范是 ...
- 干货分享:SQLSERVER使用裸设备
干货分享:SQLSERVER使用裸设备 这篇文章也适合ORACLE DBA和MYSQL DBA 阅读 裸设备适用于Linux和Windows 在ORACLE和MYSQL里也是支持裸设备的!! 介绍 大 ...
- iOS - GitHub干货分享(APP引导页的高度集成 - DHGuidePageHUD - ②)
距上一篇博客"APP引导页的高度集成 - DHGuidePageHUD - ①"的发布有一段时间了, 后来又在SDK中补充了一些新的内容进去但是一直没来得及跟大家分享, 今天来跟大 ...
- iOS - GitHub干货分享(APP引导页的高度集成 - DHGuidePageHUD - ①)
好长时间没更新博客, 是时候来一波干货分享了;APP引导页话不多说每一个APP都会用到,分量不重但是不可缺少,不论是APP的首次安装还是版本的更新,首先展现给用户眼前的也就只有它了吧,当然这里讲的不是 ...
- 【干货分享】Node.js 中文资料导航
这篇文章与大家分享一批高质量的的 Node.js 中文资料.Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的, 易于扩展的网络应用 Node ...
- 干货分享:MySQL之化险为夷的【钻石】抢购风暴【转载】
转自: 干货分享:MySQL之化险为夷的[钻石]抢购风暴 - Vanos_韩尛哲 - 博客园http://www.cnblogs.com/Vanos-lcp/p/5642097.html 抢购钻石不稀 ...
- 32位汇编第四讲,干货分享,汇编注入的实现,以及快速定位调用API的数量(OD查看)
32位汇编第四讲,干货分享,汇编注入的实现,以及快速定位调用API的数量(OD查看) 昨天,大家可能都看了代码了,不知道昨天有没有在汇编代码的基础上,实现注入计算器. 如果没有,今天则会讲解,不过建议 ...
- 干货分享:互联网运营 学习SEO从零开始 SEO深度解析学习笔记
最近在自学SEO,互联网运营,把做的笔记干货分享给大家啊! 希望能帮到大家,如有好的建议可以关注我[磨人的小妖精]或留言,大家一起探讨. 之前还写过一篇文章互联网运营+SEO:推荐必看的5本书籍,学习 ...
随机推荐
- Salesforce AI Specialist篇之 Einstein Trust Layer
本篇参考: https://trailhead.salesforce.com/content/learn/trails/drive-productivity-with-einstein-ai http ...
- (系列五).net8 中使用Dapper搭建底层仓储连接数据库(附源码)
说明 该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发). 该系统文章,我会尽量说的非常详细,做到不管新手.老手都能看懂. 说明:OverallAuth2 ...
- 墨天轮访谈 | 华为云温云博:从客户视角出发,GaussDB(for Redis)究竟“香”在哪里?
分享嘉宾:温云博 华为云数据库NoSQL团队研发工程师 整理:墨天轮社区 导读 GaussDB(for Redis)采用云原生分布式架构,完全兼容Redis协议,支持丰富数据类型. 提供数据实时持久化 ...
- 优质技术文章分享 | 首届【MogDB数据库征文活动】进行中,期待您的参与
2022年6月30日,MogDB 3.0版本正式发布,基于2.1版本进一步增强,集成了openGauss 3.0.0版本的新增特性,并融合了云和恩墨的创新特性研发,持续助力用户达成安稳易用的企业级数据 ...
- vue前端开发仿钉图系列(1)高德地图的使用详解
最近公司让参考钉图做图层模块相关的功能,很庆幸有机会细细研究地图相关的东西.因为手机端用的是高德地图,web端也使用高德地图.还是和往常一样,先贴上效果图. 步骤1.在高德开放平台注册信息,创建自己的 ...
- .NET高级调试 - 3.7对象检查
简介 在大多数调试会话中,首先需要检查的项目就是分析应用程序的状态.在确认程序的问题是某种无效状态造成的,我们便需要分析程序是如何变成无效状态的.那么在分析过程中,需要为我们深入了解对象的各种审查方法 ...
- Gitlab私有存储库支持SourceLink 调试之使用proxy方式
前情概要 在 让你发布的nuget包支持源代码调试#为gitlab的私有源代码项目提供支持 小节中有介绍到如何让gitlab的私有存储库支持SourceLink. 其中有一个方法是说在vs中打开web ...
- Kubernetes 持久化存储之 NFS 终极实战指南
作者:运维有术星主 在 Kubernetes 生态系统中,持久化存储扮演着至关重要的角色,它是支撑应用稳定运行的基石.对于那些选择自建 Kubernetes 集群的运维架构师而言,选择合适的后端持久化 ...
- Web渗透07_脚本代码注入和OS命令注入( 恐怖级别 )
1 PHP代码注入 1.1 原理成因 网站对用户的输入过滤出现问题,同时网站的脚本编写用到一些危险函数 eval(),assert().如果被攻击者发现漏洞,直接可能造成攻击者完全控制整个web甚至是 ...
- 解决ValueError: day is out of range for month的问题
Bug类型 ValueError: day is out of range for month 解决思路 值错误:天超出了月的范围 解决方法 开始日期要早于结束日期 还有一种是 2月最大为28天,如果 ...