零基础用Docker部署微服务
1. docker架构
这里的Client和DOCKER_HOST(docker server)都是在本地的,docker仓库Registry是在远程的;
Client的docker命令通过Docker daemon与docker server进行交互;
images镜像是由应用已经被docker打包好的镜像,如java、nginx的镜像,这些镜像可以运行在容器containers里;
每一个container容器都是运行在docker server(宿主机)上的,每一个container容器都是隔离的、独立的;
每一个container容器相当于一个Linux操作系统,每一个container容器都有自己的ip地址,所以可以在不同的container内部设置相同的端口号,宿主机不同的端口号映射到不同的容器。
Docker是容器化技术的实现。
2. Docker的安装
7、安装Docker
sudo yum install -y docker-ce
8、启动
systemctl start docker
如果把docker加入到开机启动 systemctl enable docker
查看docker是否运行 ps -ef | grep docker
9. 查看docker版本
docker version
3. 配置阿里云上docker加速的地址
来源:https://cr.console.aliyun.com/cn-hangzhou/mirrors
4. docker常用命令
4.1 镜像相关命令
在docker仓库查找被docker打包的镜像: docker search java
利用docker下载java8: docker pull java:8
查看本地安装的docker镜像: docker images
删除指定镜像: docker rmi java
4.2 容器相关命令
新建并启动容器
使用docker run命令即可新建并启动容器,下面是一些常用的参数:
比如新建并启动一个Nginx:
docker run -d -p 8100:80 nginx
如果当前没有nginx镜像,那么会先自动下载该nginx镜像。
通过浏览器访问:
列出当前运行容器
docker ps
如图可以看到镜像的名称IMAGE,对应的CONTAINER_ID,以及PORTS。
停止容器
docker stop CONTAINER_ID || NAMES
强制停止容器
docker kill CONTAINER_ID
启动已停止的容器
docker start CONTAINER_ID
查看容器所有信息
docker inspect CONTAINER_ID
查看容器日志
持续输出日志(展示88行)
docker logs --tail=88 -f CONTAINER_ID(OR NAMES)
docker container logs CONTAINER_ID
查看容器里的进程
docker top CONTAINER_ID
查看已经创建的容器
docker ps -a
进入运行的容器(在docker容器中使用jmap等命令查看jvm内存等信息)
docker container exec -it CONTAINER_ID /bin/bash 或 docker container exec -it CONTAINER_ID sh
退出容器
exit
重命名一个容器
docker rename old_name new_name
删除容器
docker ps -a 查看所有容器(包括未运行的容器)
docker rm CONTAINER_ID
删除镜像
docker images
docker rmi IMAGE ID
查看一个容器对应的端口映射
docker port 容器名name
4.3 Dockerfile常用命令
5. 构建一个自己定义的nginx docker镜像
创建了一个目录docker,进入该目录下
vim Dockerfile
内容如下:
# Dockerfile文件,自定义一个nginx的index.html
FROM nginx
RUN echo '<h1>This is my nginx Dockerfile<h1>' > /usr/share/nginx/html/index.html
意思是先获得nginx官方镜像,然后我将运行的container容器中nginx的目录下的index.html替换成我的内容。
在Dockerfile文件所在的目录下,执行
docker build -t nginx:mynginx .
mynginx就是一个tag,相当于版本号,"."表示Dockerfile文件所在的路径,在当前目录下。
现在,查看一下本地镜像
docker images
现在已经有本地镜像了,下一步就是新建容器并且运行
docker run -d -p 8101:80 nginx:mynginx
用浏览器访问一下
自定义nginx镜像大功告成!
6. 简单使用docker部署一个微服务项目
这里打算部署一个eureka server,端口号8200。
1. 首先把项目mvn clean install,目的是将项目和项目所依赖的jar包打成一个可执行的jar包,java -jar jar包名.jar;
2. 打成的jar包在项目的target目录下,将jar包上传至Linux服务器的eureka目录下;
3. 将jar包所在的目录创建一个Dockerfile文件 vim Dockerfile,内容为
# 基于哪个镜像 FROM java:8 # 将文件挂载到当前容器 VOLUME /tmp # 复制文件到容器根目录"/",并且命名为app.jar ADD eureka-0.0.1-SNAPSHOT.jar /app.jar
# 声明需要暴露的端口 EXPOSE 8200 # 配置容器启动后执行的命令,java -jar /app.jar ENTRYPOINT ["java","-jar","/app.jar"]
4. 在Dockerfile文件所在目录,使用docker build 命令构建镜像
docker build -t eureka-server:0.0.1 .
检查是否image构建成功: docker images
5. 新建容器并且运行
docker run -d -p 8200:8200 eureka-server:0.0.1
6. 最后访问宿主机的8200端口
该微服务部署成功!
7.docker-compose
https://www.cnblogs.com/theRhyme/p/10607872.html
来源:
图灵学院
零基础用Docker部署微服务的更多相关文章
- Docker部署微服务
部署时需要注!意!: 打开防火墙对应的应用端口!!用于外部访问!!内部互访问则不需要. 和对应数据库,缓存,消息中间件服务等的端口(当然这些服务必须先开启,它们也可使用docker部署开启) ,用于容 ...
- 使用docker部署微服务
https://my.oschina.net/silenceyawen/blog/1819472 http://jvm123.com/2019/08/docker-shi-yong.html 从201 ...
- docker部署微服务遇到的问题二
自己尝试将微服务部署到docker上面,期间按照周立的微服务架构实战13章进行学习 按照书上的步骤,一切部署成功之后,尝试访问,一直没有成功访问,周五部署了两遍 折腾了一下 还是没有找到为啥,周一继续 ...
- Docker部署微服务项目
测试包准备工作 1.spring.io或者ide创建demo工程 spring官网 2.本地demo代码,打包成jar包 使用Dockerfile构建微服务镜像 3.将jar包上传到你的vps lin ...
- docker微服务部署之:六、Rancher管理部署微服务
docker微服务部署之:五.利用DockerMaven插件自动构建镜像 一. 什么是Rancher Rancher是一个开源的企业级容器管理平台.通过Rancher,企业再也不必自己使用一系列的开源 ...
- docker入门与部署微服务--学习笔记
最近公司进一步去windows,走向 linux+云化. 原来的一大坨windows虚拟机服务器都要转向linux, 既然走向linux的话,那么docker肯定是要涉足的. 故学习了docker入门 ...
- Docker实战 | 第二篇:IDEA集成Docker插件实现一键自动打包部署微服务项目,一劳永逸的技术手段值得一试
一. 前言 大家在自己玩微服务项目的时候,动辄十几个服务,每次修改逐一部署繁琐不说也会浪费越来越多时间,所以本篇整理通过一次性配置实现一键部署微服务,实现真正所谓的一劳永逸. 二. 配置服务器 1. ...
- Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成——部署方案优化
Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成--部署方案优化 之前我们做的方案部署都是只能选择一个微服务部署并只有一台生产服务器,每个微服务只有一个 ...
- 【译文】用Spring Cloud和Docker搭建微服务平台
by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...
随机推荐
- python函数的创建和函数参数
[1]#函数的作用:1.减少重复代码 2.方便修改,更容易扩展3.保持代码的一致性 [2]#函数简单的定义规则: 函数代码块以def关键词开头,后接函数标识符名称和圆括号(),任何传入参数和自变量必须 ...
- 【死磕 Spring】—— IoC 之 Spring 统一资源加载策略
本文主要基于 Spring 5.0.6.RELEASE 摘要: 原创出处 http://svip.iocoder.cn/Spring/IoC-load-Resource/ 在学 Java SE 的时候 ...
- SVG 学习<三>渐变
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- VS使用GUID(UUID的基础知识)
UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,目的是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定. UU ...
- 文件查重工具 ultraCompare 和 UltraFinder 用法
UltraCompare 是一款文件内容比较工具,它可以对于文本.文件夹.二进制进行比较.可进行文本模式,文件夹模式以及二进制模式的比较,可对比较的文件.文件夹等进行合并,同步等操作.是进行比较操作的 ...
- ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM
(写在前面: 这里参考rbx书中第八章和ROS社区教程进行学习,先看社区教程) === Doing the Turtlebot Navigation === ref ros wiki: http ...
- Weex与Android交互(二)
扩展Android Weex 提供了扩展机制,可以根据自己的业务进行定制自己的功能. 主要分为两类扩展: Module 扩展 非UI的特定功能.例如sendHttp.openURL 等. Compon ...
- scrapy之parallel
Limiting Parallelism jcalderone May 22nd, 2006 This blog has moved! Read this post and its comments ...
- django之signal机制分析
django的signal在djangobb中的使用: from django.db.models.signals import post_save from django.dispatch impo ...
- div的全屏与退出全屏
div的全屏与退出全屏 作用:将div全屏与退出全屏,一般播放器使用较多. html按钮: <button onclick="showFull();"> 全屏 < ...