docker高级篇(dockerw)

  本篇文章为你整理了docker高级篇(dockerw)的详细内容,包含有dockerhib dockerw docker- dockerf docker高级篇,希望能帮助你了解 docker高级篇。

  Docker-compose是什么?能干嘛?解决了哪些痛点?

  Docker-compose是Docker官方推出 的一个工具软件,可以管理多个Docker容器组成的一个应用。你需要编写一个一个YAML格式的配置文件:docker-compose.yml。写好多个容器之间的调用关系。然后,只需要一个命令,就能同时启动/关闭这些容器了。

  怎么理解:

  docker建议我们每一个容器只运行一个服务,因为docker容器本身占用资源极少,所以最好是将每一个服务单独地分割,但是这样,我们面临了一个问题:

  官方地址:

  https://docs.docker.com/compose/compose-file/compose-file-v3/

  官方下载:

  https://docs.docker.com/compose/install/

  安装步骤:

  1:下载

  

  

curl-L"https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/docker-compose

 

  2:给目录赋权限

  

chmod+x/usr/local/bin/docker-compose

 

  3:查看compose的版本号

  

docker-compose--version

 

  卸载步骤:

  

rm/usr/local/bin/docker-compose

 

  compose核心概念

  一个文件,两个要素:

  一个文件:docker-compose.yml

  两个要素:

  服务*(service):一个个应用容器实例,比如订单服务、库存服务、mysql容器、nginx容器等

  工程(project):由一组关联的应用容器组成一个完整的业务单元,在docker-compose.yml文件中定义

  compose使用的三个步骤

  1:编写Dockerfile定义各个微服务应用并构建出对应的镜像文件

  2:使用docker-compose.yml定义一个完整业务单元,安排好整个应用中的各个容器服务

  3:最后 ,执行docker-compose up命令,来启动并运行整个应用程序,完成部署上线

  compose常用命令

  compose编排微服务

  需求描述:

  user服务,增删改查。查询的时候,如果缓存中,没有就去数据库中查询。

  注意:数据库使用docker中mysql的,redis也使用docker里面的。

  我们不使用docker-compose情况下:

  启动mysql容器:

  

dockerrun-d-p3306:3306--privileged=true-v/root/mysql/log:/var/log/mysql-v/root/mysql/data:/var/lib/mysql-v/root/mysql/conf:/etc/mysql/conf.d-eMYSQL_ROOT_PASSWORD=123456--namemysql57mysql:5.7

 

  启动redis容器:

  

dockerrun-p6379:6379--namereids608--privileged=true-v/app/redis/redis.conf:/etc/redis/redis.conf-v/app
/redis/data:/data-dredis:6.0.8redis-server/etc/redis/redis.conf

 

  本地编写完用户微服务后,mvn package后,上传的docker的宿主机后,构建镜像:

  docker build -t order:1.0.2

  启动镜像:

  

dockerrun-d-p6001:6001be1face5d825

 

  docker ps查看是否启动成功:

  发现三个服务都启动了。

  所以我们可以得到如下对比:

  启动后,swagger测试:

  访问swagger-ui:宿主机id:端口/swagger-ui.html#

  http://192.168.50.131:6001/swagger-ui.html#

  访问正常。从swagger新建用户,然后从数据库和redis中都可以查询到。

  虽然上面来看,是没问题了。那么这种没有使用compose会有哪些问题呢?

  问题如下:

  1:先后启动顺序要求固定的,先mysql+redis,然后才是微服务镜像,启动微服务,访问成功

  2:多个run命令。。。。

  3:容器间的停机或宕机,有可能导致ip地址对应的容器实例变化,映射出问题。要么生产ip写死(虽然可以,但是不推荐),要么通过服务调用。

  当很多微服务的时候,那就疯了。所以,我们引入docker-compose文件统一管理起来。

  使用docker-compose文件实战

  使用docker-composy.yml服务编排,一套带走。

  步骤:

  1:编写docker-compose.yml文件

  

version:"3"
services:
microService:
image:order:1.0.2
container_name:ms01
ports:
-"6001:6001"
volumes:
-/app/microService:/data
networks:
-kaigejava_net
depends_on:
-redis
-mysql
redis:
image:redis:6.0.8
ports:
-"6379:6379"
volumes:
-/app/redis/redis.conf:/etc/redis/redis.conf
-/app/redis/data:/data
networks:
-kaigejava_net
command:redis-server/etc/redis/redis.conf
mysql:
image:mysql:5.7
environment:
MYSQL_ROOT_PASSWORD:123456
MYSQL_ALLOW_EMPTY_PASSWORD:no
MYSQL_DATABASE:db2021
MYSQL_USER:kaigejava
MYSQL_PASSWORD:kaigejava123
ports:
-"3306:3306"
volumes:
-/app/mysql/db:/var/lib/mysql
-/app/mysql/conf/my.cnf:/etc/my.cnf
-/app/mysql/init:/docker-entrypoint-initdb.d
networks:
-kaigejava_net
command:--default-authentication-plugin=mysql_native_password#解决外部无法访问
networks:
kaigejava_net:

 

  文件详解:

  version:xanzai都用3版本

  services:服务

  image:image的名字:TAG版本

  container_name:容器名称

  ports:端口映射

  volumes:数据卷挂载地址

  networks:网络名称

  depends_on:依赖于redis 和mysql

  redis:redis相关配置

  mysql:mysql相关配置

  命令转化:

  同理redis和mysql也是一样的。

  networks: kaigejava_net:这个相当于是:docker network create kaigejava_net

  2:修改微服务工程中mysql和redis连接的ip.将ip修改成服务名称

  更新微服务配置文件后,重新packer。然后上传到docker宿主机后,重新生成镜像:

  docker build -t order:1.0.2 .

  3:执行docker-compose up或者执行docker-compose up -d

  注意:执行命令的时候,最好在docker-compose.yml文件目录

  我们可以看到mysql\redis\ms01都done了。

  注意到了吗?order微服务我们给contener的名字设置了ms01.redis和mysql没有设置容器名称。可以看到会自动以当前文件夹名称为前缀,追加mysql前面

  验证是否真的成了。

  1:验证网络是否添加了kaigejava_net

  docker network ls

  使用docker ps命令查看:

  mysql、redis、微服务都正常启动了。

  4:进入mysql容器实例并创建数据库db2021+新表t_user

  使用mysql客户端连接到mysql中,发现数据库db2021已经存在了。创建表:

  

CREATETABLE`t_user`(
`id`int(10)unsignedNOTNULLAUTO_INCREMENT,
`username`varchar(50)NOTNULLDEFAULTCOMMENT,
`password`varchar(50)NOTNULLDEFAULTCOMMENT,
`sex`tinyint(4)NOTNULLDEFAULT0COMMENT0=1=,
`deleted`tinyint(4)unsignedNOTNULLDEFAULT0COMMENT01,
`update_time`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT,
`create_time`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8COMMENT=

 

  5:测试

  通过页面访问用户的新增和根据用户id获取。

  一切正常。OK

  6:关停

  docker-compose stop

  一键停服务。

  如操作有问题欢迎去 我的个人博客(www.kaigejava.com)留言或者 微信公众号(凯哥Java)留言交流哦。

  

  

  本系列教程直通车

  直通车,本系列教程已发布文章,快速到达,《Docker学习系列》教程已经发布的内容如下:

  【图文教程】Windows11下安装Docker Desktop

  【填坑】在windows系统下安装Docker Desktop后迁移镜像位置

  【Docker学习系列】Docker学习1-docker安装

  【Docker学习系列】Docker学习2-docker设置镜像加速器

  【Docker学习系列】Docker学习3-docker的run命令干了什么?docker为什么比虚拟机快?

  【Docker学习系列】Docker学习2-常用命令之启动命令和镜像命令

  【Docker学习系列】Docker学习系列3:常用命令之容器命令

  【Docker学习系列】Docker学习4-常用命令之重要的容器命令

  【Docker教程系列】Docker学习5-Docker镜像理解

  【Docker教程系列】Docker学习6-Docker镜像commit操作案例

  【Docker学习教程系列】7-如何将本地的Docker镜像发布到阿里云

  【Docker学习教程系列】8-如何将本地的Docker镜像发布到公司镜像服务器上?

  「Docker学习系列教程」9-Docker容器数据卷介绍

  「Docker学习系列教程」10-Docker容器数据卷案例

  Docker学习11-Docker常规方式安装软件

  「Docker学习系列教程」基础篇小总结及高级篇预告

  docker高级篇1-dockeran安装mysql主从复制

  docker高级篇2-分布式存储之三种算法

  docker高级篇第二章-分布式存储之实战案例:3主3从redis集群扩容配置

  docker高级篇第二章-分布式存储之实战案例:主从容错切换迁移案例

  Docker高级:Redis集群实战!4主4从缩容到3主3从,怎么处理?

  Dockerfile介绍及常用保留指令

  docker高级篇第三章-dockerfile案例之制作自己的centos镜像

  docker的虚悬镜像是什么?

  docker高级篇:实战-自己开发的微服务怎么在docker上面运行?

  Docker网络中篇-docker网络的四种类型

  

  【Docker学习教程系列汇总】笔记及遇到问题解决文章

  

  小福利:【凯哥优惠淘】

  凯哥自己开发的,领取外卖、打车、咖啡、买菜、各大电商的优惠券的公¥众¥号【凯哥优惠淘】。如下图:

  大家好,我是凯哥Java(kaigejava),乐于分享,每日更新技术文章,欢迎大家关注“凯哥Java”,及时了解更多。让我们一起学Java。也欢迎大家有事没事就来和凯哥聊聊~~~

  

  以上就是docker高级篇(dockerw)的详细内容,想要了解更多 docker高级篇的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: