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 dockerdocker-engine.x86_64
1.7.1-1.el7 @/docker-engine-1.7.1-1.el7.x86_64.rpm
2)、删除安装包,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
启动docker">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安装docker虚拟机">2、 安装Docker虚拟机
yum install -y docker3、运行、重启、关闭Docker虚拟机
service docker start service docker start
service docker stop
4、搜索镜像
docker search 镜像名称5、下载镜像
docker pull 镜像名称6、查看镜像
docker images7、删除镜像
docker rmi 镜像名称8、运行容器
docker run 启动参数 镜像名称9、查看容器列表
docker ps -a10、停止、挂起、恢复容器
docker stop 容器ID docker pause 容器ID
docker unpase 容器ID
11、 查看容器信息
docker inspect 容器ID12、删除容器
docker rm 容器ID13、查看容器日志
docker logs 容器名称或容器ID14、数据卷管理
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 mysql2)、拉取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 redis2)、拉取
docker pull redis # 带版本
docker pull redis:4.0
3)、查看容器
docker images4)、启动一个容器
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 centos2)、保存镜像到本地文件
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 -a2)、导出docker容器
docker export 70c74ebbfac4 > ubuntu_sshd.tar3)、查看大小
du -sh ubuntu_sshd.tar4)、上传和导入
# 把这个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_backup
2、把这个镜像保存到指定目录
docker save -o /data/software/project/mysql5.7.tar mysql5.7
3、拷贝到其他宿主机上,加载这个镜像
docker load -i mysql5.7.tar
5、备份MySQL数据,导入到另一个mysql容器。
1、使用mysqldump命令备份导出数据库中的所有表结构和数据
docker exec -it mysql01 mysqldump -uroot -proot demo > /home/bak/demo.sql
2、只导出数据不导出表结构
docker exec -it mysql01 mysqldump --opt -t -uroot -proot demo > /home/bak/demo2.sql
3、只导出表结构不导出数据
docker exec -it mysql01 mysqldump --opt -d -uroot -proot demo > /home/bak/demo1.sql
4、使用mysqldump导出特定表的结构
docker exec -it mysql01 mysqldump -uroot -proot -B demo --table playmath_user > /home/bak/playmath_user.sql
5、docker执行导入(恢复)数据库命令
docker exec -i mysql01 mysql -uroot -proot playmath_sso < /home/bak/playmath_sso.sql
总结
根据居士本人这些年的工作经验,初中级工程师只需了解docker命令即可,因为大部分公司中是不需要你来操作的,都有专门的集成工程师来搭建和维护,但对于正在往架构师方向前进的工程师而言,熟练掌握docker的安装、命令、具体使用以及整合springboot打包、docker高级用法等都是必备的技能,需要花时间实操。
其实不用想那么复杂,这种偏运维性质的技能,你会百度会做文档就行,在一个公司顶多也就搭建一次,之后就是做好文档留痕,以后也不会有那么麻烦了。
本人原创文章纯手打,觉得有一滴滴帮助的话,就请伸出芊芊玉手点个推荐吧~~
以上是 Java架构师必备技能:docker使用大全 的全部内容, 来源链接: utcz.com/z/389988.html

