任务03编排Docker应用

Posted Y飞羽Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了任务03编排Docker应用相关的知识,希望对你有一定的参考价值。

预期达到的目标

  • 制作自己的镜像并上传dockerhub
  • 修改docker镜像中的mysql访问端口
  • 编排完整镜像,我选择使用java的springboot来制作镜像

制作自己的镜像并上传dockerhub

  1. 先要装docker,我选择装docker19,因为在工作实践中,发现docker19以下版本不支持https推送harbor,此处docker19的安装参考:docker19的安装
yum  update
yum install -y yum-utils  device-mapper-persistent-data  lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install  -y docker-ce
  1. docker安装完成后,启动一下,然后就可以开始安装mysql
systemctl start docker
docker search mysql
#此处我选择了centos7的mysql5.7来用
docker pull centos/mysql-57-centos7
#安装mysql,注意--privileged=true是开启docker内部的root权限操作,这样才可以在docker内部改配置文件,装其他东西
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1 --privileged=true --name=fymysql5.7 centos/mysql-57-centos7 
#启动mysql
docker start fymysql5.7
#进入mysql的docker内部,如果能正常进入,说明安装成功了,这里使用root进去是为了后面能安装东西
docker exec -it --user root fymysql5.7 bash
  1. 进入之后,可以修改一下配置文件,或者安装一些别的什么东西上去,然后作为自己的镜像传dockerhub,我准备安装一个vim,然后就可以丢上去
#这里已经在docker内部了
#由于前面使用了root登录,所以才能够yum安装vim
yum install -y vim   
vim /etc/my.cnf
#这里退出容器了,准备生成镜像开始提交
exit
docker commit 854f72094be6 fymysql5.7
#此处用docker images就能看到已经生成的镜像了
#下面准备上传已经做好的镜像,先登录
docker login -u dockerhub用户名 -p 密码
#给镜像取一个tagname,我这里取好的名字就是用户名/fymysql5.7,注意格式必须是你的用户名/xxxx,否则一会是提交不上去的
docker tag fymysql5.7 用户名/fymysql5.7
#提交dockerhub
docker push 用户名/fymysql5.7

修改mysql端口

  1. 端口,改配置文件即可,但是要配合外面的端口映射才能用,那么
#在安装的时候,将docker内部的3307和宿主机的3306连起来
docker run -d -p 3306:3307 -e MYSQL_ROOT_PASSWORD=1 --privileged=true --name=fymysql5.7 centos/mysql-57-centos7 
docker start 
#进入docker去修改mysql的配置文件
docker exec -it --user root fymysql5.7 bash
vim /etc/my.cnf
#在[mysqld]下面加入port=3307即可
exit
#出来重启mysql,OK
docker stop fymysql5.7
docker start fymysql5.7

编排完整镜像

  1. 开idea,新建springboot工程,写一个helloword页面,打成jar包
  2. 新建Dockerfile文件,和jar包放在一起,传到服务器上
  3. docker build -t xxx.jar,完成
  4. 我的Dockerfile内容:
FROM java:8
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp 
# 将jar包添加到容器中并更名为app.jar
ADD demo-0.0.1-SNAPSHOT.jar app.jar 
# 运行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

对于docker的思考

  • 在做任务的时候,其实早已不是第一次使用docker了,但我个人一直以来都不太能体会到docker的便利之处,下面举几个例子对比

直接安装的MYSQL vs docker mysql

安装速度docker mysql 略胜一筹,毕竟要打的指令比较少,但是,网络上默认安装的mysql,在不改配置的情况下,几乎是不能使用的。并且docker安装的mysql在配置上极其麻烦,首先是docker run时要指定的参数,并不是那么容易背下来,另外,bind0.0.0.0,端口设置,以及后续使用中时不时都要改的配置,修改起来远不如直接安装的mysql来的方便,并且,对于生产环境来说,docker mysql必须将data文件映射回宿主机,这个操作很麻烦,且破坏了docker制作好镜像到处使用的优点。

redis、mongodb、nginx等涉及到数据的组件,同样存在以上缺点,配置麻烦,且需要映射文件夹,并且,nginx用yum安装不香么?

曾想过另外一种方案,即将所有的组件,以及业务包,全部集成在一个docker中,这样就可以带着这个docker镜像到处跑,部署起来速度也是极快。但是这样做仅适用于极小规模的项目,毕竟稍微有点规模的项目,至少都是集群部署,这样的打包方式根本不能支持集群部署。

综上所述,如果docker内只部署单个组件,为什么不选择直接部署呢?更快更灵活更好用。
如果是多组件集成部署,那需要集群的情况下,又该如何?

  • 现在工作中是采用docker+k8s进行部署和运维。。但是我丝毫没感觉到便利。。反而从打包,提交镜像,调参数,读取日志各个方面,都造成了麻烦。。唯一有想到docker的优势在于,组件升级,例如将redis3.0升级为redis4.0,这个在各方面都已配置完毕的情况下,直接换镜像,确实是更方便。
  • 以上是我的个人感悟,docker能在全世界流行起来,必然是有它的优秀之处,但可能由于我所处的环境,所接触的项目,以及过往的经验,导致我未能体会到docker的好处,也欢迎各位大佬指教~

以上是关于任务03编排Docker应用的主要内容,如果未能解决你的问题,请参考以下文章

任务03编排Docker应用

任务03编排Docker应用

容器编排工具鉴赏- docker-compose KubernetesOpenShiftDocker Swarm

Docker入门篇之docker-compose单机编排

Docker Compose容器编排工具

Docker Swarm集群的管理和编排