docker部署
1、Docker的安装
https://docs.docker.com/install/linux/docker-ce/centos/#uninstall-old-versions 【安装网址】
2、docker的image (分配app运行的资源)
docker pull
3、docker的container(运行image的容器)
docker run -d --name=demo 镜像名称 # 指定名称
docker run -it centos 交互式运行
--进入运行的容器
docker exec -it 容id 执行的命令
docker exec -it 11a5342fsd3 /bin/bash
--启动和停止容器
docker start 容器名称
docker stop 容器名称
--查询看容器的详细信息
docker inspect 容器id
-- 查看日志
docker logs 容器id
4.创建docker网络
docker network create -d bridge hly-net
# 查看网络
docker network ls
----------
# docker network create -d bridge [netName]
-d:指定Docker网络类型,bridge,overlay(用于Swarm)
# 运行第一个容器
docker run -d -P --name web1 --network hly-net -v /src/webapp:/webapp training/webapp
# 运行第二个容器
docker run -d -P --name web2 --network hly-net -v /src/webapp:/webapp training/webapp
测试网络
# docker exec -it web1 bash
# ping web2
4、镜像的构建
4.1 commit (不推荐)
docker commit 基础容器 镜像的名称
docker history 查询操作的历史
4.2 Dockerfile
FROM centos
RUN yum install -y vim -- 安装vim
docker build -t 镜像的名称
dockerfile的语法
FROM 就是image的基本层
LABEL 就是注释
RUN 就是运行的命令(主要每次运行一个run都会生成新的一层)
eg: yum update && yum install -y vim
python-dev # 反斜杠线换行
WORKDIR 设定义工作目录
WORKDIR /test # 如果不存在将自动创建
WORKDIR test1 # 这样会在test目录下面创建一个test1文件夹
pwd /test/test1
RUN cd 不推荐
尽量使用WORKDIR
ADD and COPY
ADD Hello /
ADD test.tar.gz / # 添加到根目录并解压
WORKDIR /root
ADD hello test/ # root/test/hello
WORKDIR /root
COPY hello test/
ENV
ENV MYSQL_VERSION 5.7
RUN yum install -y mysql-server="${MYSQL_VERSION }"
VOLUME and EXPOSE
VOLUME
格式为 VOLUME ["/data"]。
创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
EXPOSE
格式为 EXPOSE <port> [<port>...]。
告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -p 宿主机端口:容器的端口,Docker 主机会自动分配一个端口转发到指定的端口。
CMD and ENTRYPOINT
CMD
支持三种格式
CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;
CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;
指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。
如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。
ENTRYPOINT
两种格式:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2(shell中执行)。
配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。
# 基于哪个镜像
FROM java:8
# 将本地文件夹挂载到当前容器
VOLUME /tmp
# 拷贝文件到容器,也可以直接写成ADD comment-server.jar /app.jar
ADD comment-server.jar app.jar
RUN bash -c 'touch /app.jar'
# 开放端口
EXPOSE 8002
# 配置容器启动后执行的命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
5、端口映射
mysql
docker pull mysql:5.7
docker run --name docker-mysql -e MYSQL_ROOT_PASSWORD=root -d -p 3306:3306 mysql:5.7
docker run -p 3306:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker run -p 3306:3306 --name mysql -v /mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
# 设置编码格式的
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
-v mysql_data:/var/lib/mysql
/var/lib/mysql是mysql容器数据存储位置
-e MYSQL_ROOT_PASSWORD=t
设置mysql密码
绑定其他容器的ip地址和host名称
--link 其他容器名称:别名名称
docker run -d --link 其他容器名称:别名名称 .....
redis
docker pull redis
docker run --name dokcer-redis -d -p 6379:6379 redis
6、服务的编排:
docker-compose的安装
通过docker-compose.yml方式运行
version: '2'
services:
mysql:
image: mysql
restart: always
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: roof
ports:
- "3306:3306"
volumes:
- mysql_vol:/var/lib/mysql
networks:
- micro
server:
image: server
container_name: server
ports:
- "8761:8761"
networks:
- micro
client:
image: client
container_name: client
ports:
- "8762:8762"
depends_on:
- mysql
- server
networks:
- micro
networks:
micro:
driver: bridge
volumes:
mysql_vol:
docker-compose up -d 启动部署
在docker部署微服务项目:
1、使用dockerfile构建项目镜像
2、在docker使用生成镜像启动对应服务
服务名称 |
端口 |
---|---|
comment-server |
8002 |
house-server |
8011 |
user-server |
8000 |
esp-zuul |
9000 |
esp-web |
7000 |
comment-server ->user-server
部署用户服务
docker run -d --name user-server --hostname user -p 8000:8000 house/user
房产服务
docker run -d --name house-server --hostname house --link user-server:user -p 8011:8011 house/house
部署评论服务
docker run -d --name comment-server --hostname comment --link user-server:user -p 8002:8002 house/comment
部署网关
docker run -d --name zuul-server --hostname zuul --link house-server:house --link user-server:user --link comment-server:comment -p 9000:9000 house/zuul
部署web
docker run -d --name web --link zuul-server:zuul -p 7000:7000 house/web
- TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络
- ASP.NET的路由系统:路由映射
- ASP.NET Core的配置(3): 将配置绑定为对象[上篇]
- ASP.NET的路由系统:URL与物理文件的分离
- 使用Excel分析CloudStack使用记录
- 卷积神经网络初探索
- TensorFlow 深度学习笔记 逻辑回归 实践篇
- 黑客是如何实施暴力破解的?
- Python的初学者你现在可以自己“看”到代码的运行了!
- ASP.NET Core的配置(3): 将配置绑定为对象[下篇]
- TensorFlow 深度学习笔记 从线性分类器到深度神经网络
- 微信版12306来了!用12306微信小程序买票靠谱吗
- 无需写try/catch,也能正常处理异常
- “人工智能毁灭人类”是一种末世恐惧传染病
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 吴师兄导读:如何快速入门数据结构和算法
- 你真的会做 2 Sum 吗?
- 漫画:什么是计数排序?
- vue使用腾讯位置服务选点组件问题总结
- Spring 的 Controller 是单例还是多例?怎么保证并发的安全
- Python游戏开发 制作AI贪吃蛇!
- Python老司机手把手带你写爬虫,整站下载妹子图,一次爽个够!
- 教你用云开发打造一个双端自动发布的博客体系(下)
- 国科大&中科院提出CANet:用于图像复原的拼接注意力网络
- 【Kubernetes】Octant部署
- 使用注意力机制来做医学图像分割的解释和Pytorch实现
- 用Python写个爬虫小程序,给女朋友每日定时推送睡前小故事
- 数据量大的表建立索引或者修改表结构太慢的解决办法
- Activiti7入门Demo
- mybatis 中#与$的区别