docker安装mysql redis_Docker安装Mysql和Redis以及构建部署应用镜像

为了方便本地测试项目,为了方便开启新的环境,为了方便部署,打算本地利用Docker安装Mysql和Redis。

搭建Springboot项目,编写Dockerfile,打包构建镜像。

简单使用docker-compose启动服务。

简述docker-compose和K8S。

环境

系统:mac

Docker Engine:19.03.8

Mysql:5.7,磁盘挂载目录:/Users/yclxiao/Program/volume/mysql

Redis:5.0.8,磁盘挂载目录:/Users/yclxiao/Program/volume/redis

安装Mysql-5.7

拉取官方镜像

docker pull mysql:5.7

复制代码

查看镜像库

docker images

复制代码

创建mysql的挂载的目录

mkdir -p /Users/yclxiao/Program/volume/mysql/data /Users/yclxiao/Program/volume/mysql/conf /Users/yclxiao/Program/volume/mysql/logs

复制代码

创建cnf文件

cd /Users/yclxiao/Program/volume/mysql/conf

touch my.cnf

复制代码

创建容器,将数据、日志、配置文件,映射到本机

docker run -p 3306:3306 --name mysql -v /Users/yclxiao/Program/volume/mysql/conf:/etc/mysql/conf.d -v /Users/yclxiao/Program/volume/mysql/logs:/logs -v /Users/yclxiao/Program/volume/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=rootpwd -d mysql:5.7

复制代码-d:后台运行容器

-p:将容器的端口映射到本机的端口

-v:将主机目录挂载到容器的目录

-e:设置参数

启动容器

docker start mysql

复制代码

docker run xxx 和 docker start xxx 区别?

docker run:

只有在第一次运行时使用,将镜像放到容器中,以后再次启动容器的时候,只需要使用docker start就可以了。

docker run 相当于执行了2个命令:

docker create:将镜像放入到容器中

docker start:启动容器,变成运行中的容器

docker start:

启动已经存在的容器

4be6cebef9cd9cb15658fd82f015d610.png

用Navicat等工具测试是否能连上

用户名:root

密码:rootpwd

安装Redis-5.0.8

在宿主机挂载目录下新建redis相关目录

/Users/yclxiao/Program/volume/redis/conf

/Users/yclxiao/Program/volume/redis/data

在/Users/yclxiao/Program/volume/redis/conf下

touch redis.conf

复制代码

拉取官方镜像,查看镜像

docker pull redis:5.0.8

docker images

复制代码

启动容器,redis:5.0.8镜像名称

docker run -d --name redis -p 6379:6379 -v /Users/yclxiao/Program/volume/redis/conf/redis.conf:/redis.conf -v /Users/yclxiao/Program/volume/redis/data:/data redis:5.0.8 redis-server --appendonly yes

复制代码

-d:让容器运行在后台

-p:前面是暴露出去的端口,后面是容器内部的服务端口

-v:将宿主机目录挂载到容器的/data目录,使用:

--name:此容器的别名

--appendonly:启用数据持久化保存

redis-server --appendonly yes:在容器执行redis-server启动命令,并且启动redis持久化配置

查看正在运行的容器

docker ps

复制代码

dad3503b942867f735819b7a90a05abf.png

RDM工具连接测试OK

Docker常用命令

docker search #从registry仓库搜索镜像

docker pull #从仓库下载镜像到本地

docker images #列出所有镜像

docker tag #为镜像起一个别名

docker rmi 镜像名 #删除某个镜像

docker rmi $(docker images -q) #删除所有镜像

docker push #将一个镜像push到registry仓库中

docker build -t . #构建进行,: .不可少

docker create #创建一个容器但是不启动它

docker run #创建并启动一个容器

docker start #启动一个停止状态的容器

docker ps -aq #列出所有容器的id

docker ps #列出正在运行的容器

docker ps -a #查看所有进程

docker stop 容器id #停止某个容器

docker rm 容器id #删除某个容器

docker stop $(docker ps -aq) #停止所有容器

docker rm $(docker ps -aq) #删除所有容器

docker kill #发送信号给容器,默认SIGKILL

docker exec #进入到容器里执行命令

docker inspect #深入容器内部获取容器所有信息

编写Dockerfile

Dockerfile是docker构建镜像的基础,也是docker区别于其他容器的重要特征,正是有了Dockerfile,docker的自动化和可移植性才成为可能。

FROM,从一个基础镜像构建新的镜像

FROM openjdk:8-jdk-alpine

复制代码

MAINTAINER,维护者信息

MAINTAINER yclxiao

复制代码

ENV,设置环境变量

ENV TESTVAR 123

复制代码

RUN,运行shell命令

RUN xxxxxx

复制代码

ADD,将外部文件拷贝到镜像里,src可以为url

ADD xxxxx /data/xxxxxx

复制代码

WORKDIR /path/to/workdir,设置工作目录

WORKDIR /var/www

复制代码

USER,设置用户ID

USER nginx

复制代码

VULUME,设置volume,设置挂载卷

VOLUME ['/data']

复制代码

EXPOSE,暴露哪些端口

EXPOSE 8080 8081

复制代码

ENTRYPOINT ["executable","param1","param2"] 执行命令

ENTRYPOINT ["/usr/sbin/nginx"]

复制代码

CMD ["param1","param2"]

CMD ["start"]

复制代码

docker创建、启动container时执行的命令,如果设置了ENTRYPOINT,则CMD将作为参数

示例:利用Dockerfile构建一个java应用的镜像

FROM openjdk:8-jdk-alpine

ENV TZ=Asia/Shanghai

#如果直接docker build命令打包镜像(非maven插件的形式),则需要加上这段变量

#ENV JAR_FILE=target/blog-dbpool-main-0.0.1-SNAPSHOT.jar

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

VOLUME /tmp

#pom.xml中dockerfile插件定义的参数

ARG JAR_FILE

COPY ${JAR_FILE} app.jar

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

复制代码

构建Java工程

搭建带有Dockerfile文件的Springboot工程,pom配置docker插件,构建镜像推送镜像,启动容器。

配置dockerfile-maven-plugin插件,官方推荐使用dockerfile-maven-plugin,不建议使用docker-maven-plugin:

本地maven的setting,在.m2文件夹里,注意一定要有servers,否则配置不生效

docker.io

yclxiao

xxxxxx

复制代码

构建镜像,推送仓库:

直接在dockerfile目录下,执行docker命令:

docker build -t yclxiao/blog-dbpool-main:0.0.1-SNAPSHOT .

docker push yclxiao/blog-dbpool-main:0.0.1-SNAPSHOT

复制代码

利用maven插件:

mvn clean package dockerfile:build

mvn clean package dockerfile:push

复制代码

执行docker images,可以在本地仓库看到此镜像。

查看dockerHub仓库https://hub.docker.com/,可以看到此镜像

创建启动容器:

docker run -p 8080:8080 yclxiao/blog-dbpool-main:0.0.1-SNAPSHOT [-d]

利用Docker-Compose部署

容器多了之后,必然需要一种管理容器的工具,那么docker-compose应运而生,docker-compose是用于定义和运行本机的多个docker容器的工具,负责实现对Docker容器集群的快速编排,可以使用yml文件来配置应用程序需要的所有服务。然后使用命令,从yml文件配置中创建并启动所有服务。

两个重要概念:

​服务(service):一个应用的容器,实际可以包括若干运行相同镜像的容器实例。

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

在Dockerfile同级目录下,编写docker-compose.yml,示例:

version: '3.7'

# 定义服务

services:

# 指定服务名称,例如spring-boot服务

app-server:

build:

context: . # 配置需要构建Dockerfile的路径 相对于docker-compose.yml

dockerfile: Dockerfile

# 指定服务运行的端口

ports:

- "8080:8080" # 将本机8080端口映射到容器8080端口

restart: always

# 需要依赖的服务 率先构建

depends_on:

- db

- redis

#environment: # 设置环境变量

#SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/airTicket?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false

#SPRING_DATASOURCE_USERNAME: root

#SPRING_DATASOURCE_PASSWORD: 123456

#SPRING_REDIS.HOST: redis

db:

# 指定服务使用的镜像

image: mysql:5.7

# 指定容器名称

container_name: mysql5.7

ports:

- "3306:3306"

restart: always

environment:

MYSQL_ROOT_PASSWORD: rootpwd

volumes:

- /Users/yclxiao/Program/volume/mysql/conf:/etc/mysql/conf.d

- /Users/yclxiao/Program/volume/mysql/logs:/logs

- /Users/yclxiao/Program/volume/mysql/data:/var/lib/mysql

redis:

image: redis:5.0.8

# 指定容器名称

container_name: redis5.0.8

volumes:

- /Users/yclxiao/Program/volume/redis/conf/redis.conf:/redis.conf

- /Users/yclxiao/Program/volume/redis/data:/data

command: ["redis-server", "--protected-mode", "no", "--appendonly", "yes"]

hostname:

redis

ports:

- "6379:6379"

复制代码然后执行命令,本地已经下载的镜像创建的容器,不会再下载创建了:

docker-compose build #根据docker-compose.yam构建完整镜像

docker-compose up #直接运行所有服务

docker-compose up -d #后台运行所有服务

docker-compose stop #停止所有容器

docker-compose ps #列出所有容器信息

复制代码docker-compose build , docker-compose up之后,输出日志正常,访问OK:http://localhost:8080/swagger-ui.html

Docker-Compose和K8S区别

Docker是容器技术的核心、基础,Docker Compose是一个基于Docker的单主机容器编排工具(容器管理工具),功能并不像Kubernetes那么丰富,Kubernetes是基于Dcoker的跨主机的容器管理平台。

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[Docker安装Mysql和Redis以及构建部署应用镜像]http://www.zyiz.net/tech/detail-119530.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 下查看端口占用情况 netstat / tasklist / findstr

为什么80%的码农都做不了架构师?>>> Windows服务器不熟悉很多,尤其是防火墙这块。不过其实和Linux一样,省事的话就是关了就好了。不过对于端口占用还是时常有的,比如QQ音乐,迅雷这些,如果你的电…

2015 年度计划

2019独角兽企业重金招聘Python工程师标准>>> scala -> akka -> sparketcd 使用开源产品 negroni https://github.com/codegangsta/negroni转载于:https://my.oschina.net/kuerant/blog/372981

php透明颜色的代码,PHP imagecolorallocatealpha - 为一幅图像分配颜色和透明度

PHP imagecolorallocatealpha - 为一幅图像分配颜色和透明度imagecolorallocatealpha — 为一幅图像分配颜色和透明度。语法int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )imagecolorallocatealpha() 的行为和 imagecolor…

Windows on Device 项目实践 4 - 智能风扇制作

在前面的文章中,我们已经学习并且利用Intel Galileo开发板和Windows on Device制作了火焰报警器、感光灯和PWM调光灯。在这个项目中,我们来利用温度传感器和直流电机,完成一个简单的智能风扇的制作。 1. 温度传感器 LM35 是很常用且易用的温度…

php接口异常,api接口异常怎么办

异常:在程序开发过程中出现的不正常情况,就是异常。比如除数是0,参数为null,调用参数的成员变量或者方法,数组下标越界。异常分为两大类型:(1)Exception:程序员可以解决的:空指针&am…

【吐槽】博客园新的原创文章在搜索引擎的排名不及转载的站点

最近写博客比较多,但发现文章被一些网站转载后,排名比博客园的链接还要高,有些搜索引擎甚至连博客园的链接都没有,坑爹,坑爹。。。 以前博客园的网友也遇到过类似的情况,也分享过一些防转载的经验&#xff…

Qt之程序发布以及打包成exe安装包

一、简述 Qt项目开发完成之后,需要打包发布程序,而因为用户电脑上没有Qt配置环境,所以需要将release生成的exe文件和所依赖的dll文件复制到一个文件夹中,然后再用 Inno Setup打包工具 打包成一个exe安装包,就可以发布了…

使用Nginx+WordPress搭建个人网站

背景 很多研究技术的朋友喜欢写博客。如果希望搭建一个完全属于自己的网站,也并不困难。这里简要分享一下我搭建这个博客网站的经验。 关键步骤 购买服务器、域名、DNS云解析服务网站备案(可选)安装NginxWordPressMySQLPHP配置WordPress运行网…

高仿QQ即时聊天软件开发系列之三登录窗口用户选择下拉框

上一篇高仿QQ即时聊天软件开发系列之二登录窗口界面写了一个大概的布局和原理 这一篇详细说下拉框的实现原理 先上最终效果图 一开始其实只是想给下拉框加一个placeholder效果,让下拉框在未选择未输入时显示一个提示字符串。由于Background对ComboBox无效&#xff0…

RoRoWoBlog 开源博客系统介绍

萝萝窝个人博客开源项目 以Asp.net MVC 2.0 ADO.Net Entity Framework 4.0 Unity 2.0 MvcPager JQuery 等技术框架,开发的个人博客系统。 支持MetaWeblog接口 通过MetaWeblog接口,可以将您个人博客系统中的博文,直接同步到您其它网站的博…

JAVA 面试知识点

主要包括以下几个部分: Java 基础知识点Java 常见集合高并发编程(JUC 包)JVM 内存管理Java 8 知识点网络协议相关数据库相关MVC 框架相关大数据相关Linux 命令相关面试,是大家从学校走向社会的第一步。 互联网公司的校园招聘&…

sqlserver 导出mysql,sqlserver数据(表)导出到mysql

这里说明我的工具: Navicat Premium1 首先 navicat 连接到 sqlserver 数据库,也就是我要从这里导出那个 170 万条数据的表,然后选中表右键单击,选择导出向导2 然后选择文本文件,下一步3 核对下我们要导出的表&#xff…

MediatR 知多少 - 简书

MediatR 知多少 - 简书 原文:MediatR 知多少 - 简书引言 首先不用查字典了,词典查无此词。猜测是作者笔误将Mediator写成MediatR了。废话少说,转入正题。 先来简单了解下这个开源项目MediatR(作者Jimmy Bogard,也是开源项目AutoMa…

oracle数据库扩展目录,Oracle 扩充磁盘空间

Oracle 扩充磁盘空间环境:OS:Oracle Linux Server release 6.3DB:Oracle 11.2.0.4.0问题:根目录磁盘空间不足,还剩6.5G解决办法:扩容磁盘空间;由于安装操作系统时没有使用LVM,不能直接扩容根目录&#xff0…

使用ANT打包Android应用

大家好,今天来分享一下如何使用ANT打包Android应用。 通常我们习惯用eclipse来开发Android程序,它会自动帮我们打包当前的应用程序。如果在Navigator视图下,我们可以看到以下几个文件: 在上图中,com包放置的是我们的cl…

迷你飞信一出,LibFetion该挂了把

飞信确实是个好东西! 发短信不要钱 支持群发,这样发个通知什么的,可以轻松搞定 但是以前的飞信客户端太庞大了 好几十M呢 而且光大还多了很多没有用的功能 比如:什么飞信空间啊,网上营业厅,彩信&#xff0c…

Java设计模式(1)工厂模式(Factory模式)

工厂模式定义:提供创建对象的接口。 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。为什么工厂模式是如此常用?因为工厂模式就相当于…

cmd使用另一个Oracle的sid,(转发备用)Oracle SID在本机上已经存在,请指定一个不同的SID”的解决办法...

(转发备用)Oracle SID在本机上已经存在,请指定一个不同的SID”的解决办法(2014-04-30 10:57:17)1、 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务。2、 开始&#xff0…

$Poj1952\ $洛谷$1687\ Buy\ Low,Buy\ Lower$ 线性$DP+$方案计数

Luogu Description 求一个长度为n的序列a的最长下降子序列的长度,以及这个长度的子序列种数,注意相同的几个子序列只能算作一个子序列. n<5000,a[i]不超过long范围 Sol 求最长下降子序列的长度: 1.f[i]表示以a[i]结尾的最长下降子序列长度 2.f[i]表示以i结尾的最长下降子序列…

JavaScript中的各种宽高以及位置总结

在javascript中操作dom节点让其运动的时候&#xff0c;常常会涉及到各种宽高以及位置坐标等概念&#xff0c;如果不能很好地理解这些属性所代表的意义&#xff0c;就不能理解js的运动原理&#xff0c;同时&#xff0c;由于这些属性概念较多&#xff0c;加上浏览器之间 实现方式…