Java架构师必备技能:docker使用大全
前言
java工程师成长为架构师是一个艰难且耗费心力的过程,不仅仅需要熟悉java体系内相关的技术,同时要掌握许多运维相关的操作技能,随着k8s逐渐成为微服务持续集成开发难以越过的基础设施之后,docker就成为跨进门槛必备的技能之一。
虽然前两年kubernetes宣布v1.20开始弃用docker直到v1.23彻底排除,但这不意味着我们就要放弃学习docker,相反,国内诸多企业尤其是中小企业和事业单位存在大量用docker部署的既有项目,一些非互联网公司更是对升级版本十分审慎,大部分甚至还停留在v1.18之前,就比如居士的公司,虽然是互联网行业,但依然使用v1.15。
所以,学习docker依然是未来几年软件工程师躲不开的一环,成为架构师必备的核心技能之一并非掌握技术,而是强大的适应能力和学习动力。
安装
1、检查内核
查看内核:uname -r
如果不是3.10以上,升级内核版本:yum update
2、卸载旧版本
1)、列出你安装过的包
$ yum list installed | grep docker
docker-engine.x86_64
1.7.1-1.el7 @/docker-engine-1.7.1-1.el7.x86_64.rpm2)、删除安装包,remove后面就是上个命令查出来的。
$ sudo yum -y remove docker-engine.x86_643)、删除镜像/容器等
$ rm -rf /var/lib/docker
3、安装需要的软件包
$ yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
4、设置yum源
$ yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
PS:果这个yum源已经不存在了,可以百度一下重新找一个,这样做的目的是为了yum安装时速度更快。
阿里云yum源: http://down.wbvip.cn/huanjing/yum/Centos-7.repo
163yum源: http://down.wbvip.cn/huanjing/yum/CentOS7-Base-163.repo
5、安装最新版本
$ yum install -y docker-ce
6、安装指定版本
查询版本列表,会列出当前存在的版本。
$ yum list docker-ce --showduplicates | sort -r指定版本安装
$ yum install -y 上面查出来的版本
如:yum install -y docker-ce-19.03.2
7、检查版本
docker -v
8、启动docker
systemctl start docker
9、开机启动docker
systemctl enable docker
10、停止docker
systemctl stop docker
11、镜像加速
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
国内几个较快的加速源:
Docker 官方中国区: https://registry.docker-cn.com
网易: http://hub-mirror.c.163.com
中科大: https://docker.mirrors.ustc.edu.cn
阿里云:https://ou9izn87.mirror.aliyuncs.com
(PS:自己阿里云控制台上获取到的,每个人不一样,推荐使用阿里云的,更快。)
常用命令
1、更新软件包
yum -y update
2、 安装Docker虚拟机
yum install -y docker
3、运行、重启、关闭Docker虚拟机
service docker start
service docker start
service docker stop
4、搜索镜像
docker search 镜像名称
5、下载镜像
docker pull 镜像名称
6、查看镜像
docker images
7、删除镜像
docker rmi 镜像名称
8、运行容器
docker run 启动参数 镜像名称
9、查看容器列表
docker ps -a
10、停止、挂起、恢复容器
docker stop 容器ID
docker pause 容器ID
docker unpase 容器ID
11、 查看容器信息
docker inspect 容器ID
12、删除容器
docker rm 容器ID
13、查看容器日志
docker logs 容器名称或容器ID
14、数据卷管理
docker volume create 数据卷名称 #创建数据卷
docker volume rm 数据卷名称 #删除数据卷
docker volume inspect 数据卷名称 #查看数据卷
15、网络管理
docker network ls 查看网络信息
docker network create --subnet=网段 网络名称
docker network rm 网络名称
16、避免VM虚拟机挂起恢复之后,Docker虚拟机断网
1)、vi /etc/sysctl.conf
在文件中添加 net.ipv4.ip_forward=1 这个配置
2)、重启网络服务
systemctl restart network
实战案例
1、docker启动MySQL
1)、搜索MySQL
docker search mysql
2)、拉取MySQL
# 建议不要拉取最新版,而是加上版本号如:docker pull mysql:5.7
docker pull mysql
3)、启动MySQL
参考官网
docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
发现启动成功了,但是通过客户端还是连接不到MySQL,这是因为没有做端口映射。
# 停止MySQL
docker stop 容器id
# 端口映射
docker run --name mysql01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
3)、可能的错误
如果报类似“authentication plugin 'caching_sha2_password'”这样的错误,这是因为通过docker pull mysql默认下载的是最新版8.0(所以前面说最好自己加版本号),已经改变了以前的密码认证方式,用的caching_sha2_password,可以use msql; 然后查select * from user表去看。
解决方法:
首先,进入docker容器MySQL:docker exec -it mysql bash
然后,登入MySQL:mysql -u root -p
接着,执行下面的命令:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
然后再连接发现就可以了!
4)、高级用法
a)、使用自定义的配置文件、数据目录、日志目录
docker run ‐‐name mysql03 ‐v /conf/mysql:/etc/mysql/conf.d -v /conf/mysql/datadir:/var/lib/mysql MYSQL_ROOT_PASSWORD=123456 ‐d mysql:tag
含义:
i、把主机的/conf/mysql文件夹下的配置文件挂载到 mysqldocker容器的/etc/mysql/conf.d文件夹里面
改mysql的配置文件就只需要把mysql配置文件放在自定义的文件夹下(/conf/mysql)
ii、把主机的/conf/mysql/datadir数据目录挂载到docker容器的/var/lib/mysql下b)、指定mysql的一些配置参数
docker run ‐‐name some‐mysql ‐e MYSQL_ROOT_PASSWORD=123456 ‐d mysql:tag ‐‐character‐set‐server=utf8mb4 ‐‐collation‐server=utf8mb4_unicode_ci
含义:指定mysql的编码为utf8m64
2、docker启动Redis
1)、搜索
docker search redis
2)、拉取
docker pull redis
# 带版本
docker pull redis:4.0
3)、查看容器
docker images
4)、启动一个容器
docker run --name redis -p 6379:6379 --restart=always -d redis
############ 说明
--name 命名
-p 映射端口
--restart 重启后状态,always表示重启后自动启动容器
-d 后台运行
redis 容器原名称
5)、启动容器,加载配置文件并持久化数据
docker run -p 6379:6379 \
--name redis \
--privileged=true \
-v /data/software/redis/data:/data \
-v /data/software/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis:4.0.11 redis-server /etc/redis/redis.conf \
--requirepass "fly0228" \
--appendonly yes
############ 说明
-d -> 以守护进程的方式启动容器
-p 6379:6379 -> 绑定宿主机端口
--name myredis -> 指定容器名称
--restart always -> 开机启动
--privileged=true -> 提升容器内权限
-v /root/docker/redis/conf:/etc/redis/redis.conf -> 映射配置文件
-v /root/docker/redis/data:/data -> 映射数据目录
--appendonly yes -> 开启数据持久化
备份和迁移
1、备份和迁移docker镜像
1)、先从一个有网络的电脑下载docker镜像
docker pull centos
2)、保存镜像到本地文件
docker save -o centos_image.tar centos
保存mysql容器为镜像:
如:docker save -o /data/software/project/mysql5.7.tar mysql5.7(保存到/data/software/project/目录下名称为mysql5.7.tar,被保存的镜像为mysql5.7)
如果一次保存多个:
docker save -o images.tar postgres:9.6 mongo:3.4 redis3.0
3)、拷贝和加载镜像
# 把镜像拷贝到无网络的电脑,然后通过docker加载镜像即可。
docker load -i centos_image.tar
2、备份和迁移docker容器
1)、查找正在运行的容器id
docker ps -a
2)、导出docker容器
docker export 70c74ebbfac4 > ubuntu_sshd.tar
3)、查看大小
du -sh ubuntu_sshd.tar
4)、上传和导入
# 把这个ubuntu_sshd.tar传到别的服务器上,并导入容器。
# docer export 对应导入的命令是cat xxx | docker import – name ,我这里用的是niubi:latest。
cat ubuntu_sshd.tar | sudo docker import - niubi:latest
3、save和export的区别
1)、save是针对镜像images,export是针对当前容器的快照;
2)、save可以回滚以前的配置,因为保留了历史记录;
3)、save比较大,export要小一些。
备份迁移的方式自己选,推荐用export,毕竟save太大了,对于历史也没啥用处 !
4、保存mysql容器为镜像
1、把当前mysql容器作为镜像,可通过docker images查看。
docker commit -p 4e79d91d76bb mysql_backup2、把这个镜像保存到指定目录
docker save -o /data/software/project/mysql5.7.tar mysql5.73、拷贝到其他宿主机上,加载这个镜像
docker load -i mysql5.7.tar
5、备份MySQL数据,导入到另一个mysql容器。
1、使用mysqldump命令备份导出数据库中的所有表结构和数据
docker exec -it mysql01 mysqldump -uroot -proot demo > /home/bak/demo.sql2、只导出数据不导出表结构
docker exec -it mysql01 mysqldump --opt -t -uroot -proot demo > /home/bak/demo2.sql3、只导出表结构不导出数据
docker exec -it mysql01 mysqldump --opt -d -uroot -proot demo > /home/bak/demo1.sql4、使用mysqldump导出特定表的结构
docker exec -it mysql01 mysqldump -uroot -proot -B demo --table playmath_user > /home/bak/playmath_user.sql5、docker执行导入(恢复)数据库命令
docker exec -i mysql01 mysql -uroot -proot playmath_sso < /home/bak/playmath_sso.sql
总结
根据居士本人这些年的工作经验,初中级工程师只需了解docker命令即可,因为大部分公司中是不需要你来操作的,都有专门的集成工程师来搭建和维护,但对于正在往架构师方向前进的工程师而言,熟练掌握docker的安装、命令、具体使用以及整合springboot打包、docker高级用法等都是必备的技能,需要花时间实操。
其实不用想那么复杂,这种偏运维性质的技能,你会百度会做文档就行,在一个公司顶多也就搭建一次,之后就是做好文档留痕,以后也不会有那么麻烦了。
本人原创文章纯手打,觉得有一滴滴帮助的话,就请伸出芊芊玉手点个推荐吧~~
Java架构师必备技能:docker使用大全的更多相关文章
- IBM Java架构师的技能
一天,群里飘过一个IBM招聘信息.我看过之后,也只是如此而已. 大家好!我是XXX,IBM招聘java架构师,如今还有38个名额 学历大专以上即可,英语能面试交流的.项目有非常多到时候依据您面试会详谈 ...
- 成为java架构师的技能
0: 数据结构算法 数组.链表.堆.栈.队列.Hash表.二叉树等; 算法思想:递推.递归.穷举.贪心.分治.动态规划.迭代.分枝界限; 排序查找 B+/B-数.红黑树.图等; 图的深度优先搜索.图的 ...
- 架构师必备技能指南:SaaS(软件即服务)架构设计
1.介绍 从计算机诞生开始,就伴随着计算机应用程序的演变.简短的回顾历史,我们可以清楚的看到应用程序发生的巨大变化.上世纪70年代中期,随着个人PC机的爆炸式增长以及程序员的崛起,让计算机的计算能力得 ...
- Java架构师必会的技能
Java架构师必会的技能 我把它分为了五大专题 工程化专题 工程化专题 git git安装使用 git日常使用:fetch/pull/push/revert/rebase git分支管理git flo ...
- 成为一个高级java架构师所需要具备那些技能呢?
一.什么是架构师 所谓架构师,思考的是全局的东西,是如何组织你的系统,以达到业务要求,性能要求,具备可扩展性(scalability),可拓展性(extendability),前后兼容性等.可能涉及到 ...
- 一位资深Java架构师的晋级心得
架构师是什么? 是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物.一个架构师得需要足够的想像力,能把各种目标需求进行不同维度的扩展,为目标客户提供更为全面的需求清 ...
- Java架构师学习路线
Java架构师,首先要是一个高级java攻城狮,熟练使用各种框架,并知道它们实现的原理.jvm虚拟机原理.调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,连接池,线程池-- Java ...
- 【转载】java架构师进阶之路
Java架构师,应该算是一些Java程序员们的一个职业目标了吧.很多码农码了五六年的代码也没能成为架构师.那成为Java架构师要掌握哪些技术呢,总体来说呢,有两方面,一个是基础技术,另一个就是组织能力 ...
- 关于JAVA架构师
在我们行业内,我们大致把程序员分为四级 1.初级Java程序员的重心在编写代码.运用框架: 2.中级Java程序员重心在编写代码和框架: 3.高级Java程序员技术攻关.性能调优: 4.架构师 解决业 ...
随机推荐
- Keil MDK STM32系列(四) 基于抽象外设库HAL的STM32F401开发
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- RHCSA 第一天
1.修改主机名: 查看主机名 2.查看日期 使用指定格式输出日期 YY-mm-DD HH:MM:SS 3.将"We are learning RHCSA"输出在屏幕上 4.使用ti ...
- java有四种访问权限
Java面向对象的封装性是通过对成员变量和方法进行访问控制实现的,访问控制分为4个等级:私有.默认.保护和公有,具体规则如下表:
- 在3G移动通信网络信令流程里获取用户电话号的一种方法(中国电信cdma2000)
首先这些关于电话号的的寻找都是在分组域进行的 然后是首先在rp接口的A11接口寻找,没有看到,于是到pi接口,研究radius协议 发现在协议里也不含有与用户电话号码mdn相关的元素 然后偶遇一篇文档 ...
- NGINX的动静分离;什么是负载均衡
目录 一:动静分离 二:负载均衡 一:动静分离 动静分离是指在 web 服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提示整个服务的访问性和可维护 ...
- dfs时间复杂度分析
前言 之前一直想不明白dfs的时间复杂度是怎么算的,前几天想了下大概想明白了,现在记录一下. 存图方式都是链式前向星或邻接矩阵.主要通过几道经典题目来阐述dfs时间复杂度的计算方法. $n$是图中结点 ...
- jsp 中 include指令 用法, <%@ include file="..."%> 和 <jsp:include page="..." flush="true" />的区别?
原文链接https://blog.csdn.net/u012187452/article/details/51779052 1. 什么是jsp 文件? 个人理解. jsp 是一个容器,可以将我们编写 ...
- .NET 20周年软件趋势随想
从2000年微软启动.NET战略时,我还是一位大学生,当年著名的黑客Miguel de Icaza , Miguel 为了寻找GNOME项目开发框架经过充分的调研启动了一个志存高远的项目:Mono,一 ...
- Python PyQt5 | Hi音乐 v3.0.0 正式版发布
Hi音乐 两大平台全音乐搜索.收听与下载的简洁网络音乐播放器 中文介绍 | English Description 源码:Gitee 码云 简介 Hi音乐 是基于 Python 开发的简洁网络音乐播放 ...
- 斯坦福 CS183 & YC 创业课系列中文笔记
欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 面试求职交流群 724187166 ApacheCN 学习资源 目录 Zero to One 从0到1 ...