java工程师成长为架构师是一个艰难且耗费心力的过程,不仅仅需要熟悉java体系内相关的技术,同时要掌握许多运维相关的操作技能,随着k8s逐渐成为微服务持续集成开发难以越过的基础设施之后,docker就成为跨进门槛必备的技能之一。
虽然前两年kubernetes宣布v1.20开始弃用docker直到v1.23彻底排除,但这不意味着我们就要放弃学习docker,相反,国内诸多企业尤其是中小企业和事业单位存在大量用docker部署的既有项目,一些非互联网公司更是对升级版本十分审慎,大部分甚至还停留在v1.18之前,就比如居士的公司,虽然是互联网行业,但依然使用v1.15。
所以,学习docker依然是未来几年软件工程师躲不开的一环,成为架构师必备的核心技能之一并非掌握技术,而是强大的适应能力和学习动力。
查看内核:uname -r
如果不是3.10以上,升级内核版本:yum update
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
$ yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
$ 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
$ yum install -y docker-ce
查询版本列表,会列出当前存在的版本。
$ yum list docker-ce --showduplicates | sort -r指定版本安装
$ yum install -y 上面查出来的版本
如:yum install -y docker-ce-19.03.2
docker -v
systemctl start docker
systemctl enable docker
systemctl stop docker
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:自己阿里云控制台上获取到的,每个人不一样,推荐使用阿里云的,更快。)
yum -y update
yum install -y docker
service docker start service docker start service docker stop
docker search 镜像名称
docker pull 镜像名称
docker images
docker rmi 镜像名称
docker run 启动参数 镜像名称
docker ps -a
docker stop 容器ID docker pause 容器ID docker unpase 容器ID
docker inspect 容器ID
docker rm 容器ID
docker logs 容器名称或容器ID
docker volume create 数据卷名称 #创建数据卷 docker volume rm 数据卷名称 #删除数据卷 docker volume inspect 数据卷名称 #查看数据卷
docker network ls 查看网络信息 docker network create --subnet=网段 网络名称 docker network rm 网络名称
1)、vi /etc/sysctl.conf 在文件中添加 net.ipv4.ip_forward=1 这个配置 2)、重启网络服务 systemctl restart network
docker search mysql
# 建议不要拉取最新版,而是加上版本号如:docker pull mysql:5.7 docker pull 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
如果报类似“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';
然后再连接发现就可以了!
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
docker search redis
docker pull redis # 带版本 docker pull redis:4.0
docker images
docker run --name redis -p 6379:6379 --restart=always -d redis ############ 说明 --name 命名 -p 映射端口 --restart 重启后状态,always表示重启后自动启动容器 -d 后台运行 redis 容器原名称
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 -> 开启数据持久化
docker pull centos
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
# 把镜像拷贝到无网络的电脑,然后通过docker加载镜像即可。 docker load -i centos_image.tar
docker ps -a
docker export 70c74ebbfac4 > ubuntu_sshd.tar
du -sh ubuntu_sshd.tar
# 把这个ubuntu_sshd.tar传到别的服务器上,并导入容器。 # docer export 对应导入的命令是cat xxx | docker import – name ,我这里用的是niubi:latest。 cat ubuntu_sshd.tar | sudo docker import - niubi:latest
1)、save是针对镜像images,export是针对当前容器的快照;
2)、save可以回滚以前的配置,因为保留了历史记录;
3)、save比较大,export要小一些。
备份迁移的方式自己选,推荐用export,毕竟save太大了,对于历史也没啥用处 !
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
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高级用法等都是必备的技能,需要花时间实操。
其实不用想那么复杂,这种偏运维性质的技能,你会百度会做文档就行,在一个公司顶多也就搭建一次,之后就是做好文档留痕,以后也不会有那么麻烦了。
本人原创文章纯手打,觉得有一滴滴帮助的话,就请伸出芊芊玉手点个推荐吧~~