Docker教程精简-含nacos+mysql配置部署

Docker使用教程

1、Docker安装

1.1、linux的docker安装

参考链接

1.2、docker镜像加速

参考链接

1.3、docker-compose安装

参考链接
强烈安利,建议先把这个安装上,用curl安装,千万别用apt-get安装!
我之前用apt-get安装的后果是装上去不能用也就算了,甚至原来装的docker都玩崩了,即使把这个卸载也不行,心态爆炸。

1.4、安装完成

$ docker version

在这里插入图片描述

$ docker-compose --version

在这里插入图片描述

2、Docker的使用

2.1、Docker镜像-mysql

2.1.1、下载镜像

建议先到Docker Hub搜索你要安装的镜像,比如搜索mysql,选择官方提供的镜像,找它的Tags,通俗理解为版本号,推荐选择5.7的版本,因为这个版本的mysql与其他技术组件的兼容性较好。

使用docker pull命令将镜像下载到本地

# docker pull [镜像名]:[Tags版本]  #下载指定版本的镜像
# docker pull [镜像名]    #下载最新版本的镜像等同于 docker pull [镜像名]:latest
$ docker pull mysql:5.7

2.1.2、查看镜像

$ docker images

在这里插入图片描述

2.1.3、删除镜像

# docker rmi [镜像名]:[Tags]
$ docker rmi mysql:5.7

2.2、Docker容器-mysql

2.2.1、概念理解

1、背景

你想在原来的系统安装mysql5.7又心血来潮想安装mysql8.0+,各个配置文件位置,还有环境变量,想想头都大了,而且那天想删除个软件又删不干净,简而言之就是各个软件不好管理,这种痛苦对于大部分强迫症患者来说,无异于是在你耳边用手指甲划黑板。更可气的是,你这些安装卸载的操作,有时很可能导致之前的软件出现故障,疯狂查资料,一时之间又解决不了,有时候烦的直接回滚快照或者重装系统,淦!

2、什么是docker容器(container)?有什么好处?(可以看一下这篇文章

你可以通俗的将docker容器理解为一个虚拟机。你在linux上运行了一个docker容器,就相当于你在wi10系统搞了个win7虚拟机,在win7虚拟机里面安装运行软件,你win10要管的只是管理win7虚拟机。虚拟机里面软件怎么胡来,对你win10系统不足为惧,不开心就把win7虚拟机给删了。(是不是有那味了?)

所以docker的好处就是你通过docker在系统上装软件,运行软件,不会对你原来的系统环境产生一些麻烦的影响。你主系统要做的只是管理docker 容器(虚拟机),至于软件运行就给docker容器(虚拟机)管啦。

而docker的优越性还在于他提供了一些命令能够统一管理你创建的多个容器,比如创建、删除、修改、查看你创建的容器。
在这里插入图片描述
有了docker之后,我想运行哪个软件,我只要事先下载好这个软件的镜像文件,让后通过这个镜像文件来在生成一个docker容器,就相当于创建了个虚拟机里面运行着那个软件。每一个docker容器,都相当于一个小型的虚拟机。因而每个docker容器运行互不干扰,也不会骚扰你主系统,除非你骚扰它。这就是我们说的docker隔离性很好。

即使这个docker容器被你玩坏了,或者之前配置的不好嫌弃了,直接一句命令删掉即可(docker rm),但之前下载的镜像还在,你只要通过这个镜像再创建一个docker容器就好了,十分的快速方便。

并且只要提供一个软件的镜像文件,就能创建多个相应的容器,比如我有一个mysql:5.7的镜像文件,我就能创建多个mysql5.7的容器:mysql-container01-3306、mysql-container02-3307…,并且同时运行(方便集群),你可以想用哪个用哪个,只需要配置好每个容器与主机的端口映射就好了。

接下来将介绍两种创建容器的方式:

2.2.2、docker run创建容器

$ docker run -d \
--name mysql-whyvent \
-p 3307:3306 \
-e MYSQL_ROOT_PASSWORD=xxxxxx  \
-v /home/software/Mysql/mysql-whyvent/conf:/etc/mysql/conf.d \
-v /home/software/Mysql/mysql-whyvent/logs:/var/log/mysql \
-v /home/software/Mysql/mysql-whyvent/data:/var/lib/mysql \
mysql:5.7

在这里插入图片描述
-d:表示该容器在后台运行

–name mysql-whyvent:表示给该容器起个名字mysql-whyvent

-p [主机端口]:[容器端口]:端口映射,将主机的端口与容器内部的端口映射起来,上例中访问主机的3307端口就能访问到你创建的mysql-whyvent容器

-e:表示配置该容器的环境变量,不同的docker镜像对应不同的环境变量,这个可以到Docker Hub搜索相应的镜像查看它的描述即可,以mysql的DockerHub为例,在他的描述下找到环境变量说明:MYSQL_ROOT_PASSWORD=xxxxxx 即表示配置mysql的root密码为xxxxxx

-v [主机文件路径]:[容器文件路径]:表示文件映射,将容器内的文件关联到主机上的某个位置的文件。这么做的原因是:比如你创建的mysql-whyvent容器运行了,但是没有搞文件映射,这时,你虽然能访问这个数据库,也能正常创库创表使用,但是你创的这些表啊,数据都保存到了这个容器内部的/var/lib/mysql文件下,你在主机环境下是无法直接获取这些文件的,除非你从容器内把文件拷出来(想象容器为虚拟机会好理解),这种做法很麻烦,命令为:(docker cp [容器名]:[容器文件路径] [主机文件路径])。所以一劳永逸的办法就是文件映射了。

[镜像名]:docker run 命令的最后一个属性为镜像名,表示用哪个镜像来创建容器。

2.2.3、docker-compose创建容器

说白了就是引用yaml文件里面设置的参数来创建容器,比第上一种方法好的是,你可以查看yaml文件获得创建容器的配置信息。

首先得安装一下docker-compose-参考链接

在你喜欢的目录下创建一个yaml文件,比如:docker-compose.yaml

version: "3.8"

services:
  mysql: #服务名
    container_name: mysql-whyvent #容器名称
    ports: #端口映射
      - "3307:3306"
    environment: #环境变量配置
      - MYSQL_ROOT_PASSWORD=xxxxxx 
    volumes: #文件映射
      - /home/software/Mysql/mysql-atguigu/conf:/etc/mysql/conf.d
      - /home/software/Mysql/mysql-atguigu/logs:/var/log/mysql
      - /home/software/Mysql/mysql-atguigu/data:/var/lib/mysql
    image: mysql:5.7 #镜像选择
# docker-compose -f [yaml文件路径] up -d # 创建容器
$ docker-compose -f docker-compose.yaml up -d

在这里插入图片描述

2.2.4、查看容器运行日志

# docker logs [容器名或ID]
$ docker logs mysql-whyvent

因为做了文件映射,所以也可以到主机映射的logs目录下查看

2.2.5、查看/停止/启动/重启/删除容器

# 查看正在运行的容器
$ docker ps
# 查看所有创建的容器
$ docker ps -a
# docker stop [容器名或ID] #停止运行的容器
$ docker stop mysql-whyvent
# docker start [容器名或ID] #启动容器
$ docker start mysql-whyvent
# docker restart [容器名或ID] #重新启动容器
$ docker restart mysql-whyvent
# docker rm [容器名或ID] #删除创建的容器
$ docker rm mysql-whyvent

2.2.6、进入容器内部

只有正在运行的容器,才能进入其内部,以mysql为例
在这里插入图片描述
进入mysql-whyvent容器内部

# docker exec -it [容器名或ID] /bin/bash
$ docker exec -it mysql-whyvent /bin/bash

在这里插入图片描述
进入容器内部后,你可以/var/lib/mysql目录下找到这个数据库容器创建的图表

也可以登录进mysql控制台,使用相关命令操作,exit退出;从容器内部退出到主机也用exit:
在这里插入图片描述

2.3、Networks容器网络-nacos+mysql

2.3.1、需求背景

当一个容器没有显式声明网络环境时,启动后会默认被加入到xxx_default网络中:

# 查看docker网络环境
$ docker network ls

在这里插入图片描述
可以通过docker network inspect 命令查看docker网络配置

# docker network inspect [容器网络环境名] #查看docker网络配置
$ docker network inspect mysql-whyvent_defalut

所以你默认创建的容器其实是各自运行在各自的网络中的,自然,一个容器是无法关联另一个容器的。

这时候,networks就来了,networks通常应用于集群服务,从而使得不同的应用程序得以在相同的网络中运行,从而解决网络隔离问题。

接下来就以nacos+mysql来实现nacos配置持久化来说明一个容器如何关联另一个容器。

2.3.2、创建虚拟网络

当我们需要一个容器关联另一个容器,比如说nacos的配置持久化就需要关联一个mysql数据库,这时候就需要mysql容器和nacos容器都统一到同一个网络环境中。所以,首先我们要创建一个它们共用的虚拟网络环境net-docker。

# docker network create [网络名] --driver bridge
$ docker network create net-docker --driver bridge

这时候查看docker网络环境,就存在了net-docker
在这里插入图片描述

2.3.3、创建mysql容器

修改mysql的docker-compose.yaml文件:

version: "3.8"

services:
  mysql: #服务名
    container_name: mysql-whyvent #容器名称
    ports: #端口映射
      - "3307:3306"
    environment: #环境变量配置
      - MYSQL_ROOT_PASSWORD=xxxxxx 
    volumes: #文件映射
      - /home/software/Mysql/mysql-whyvent/conf:/etc/mysql/conf.d
      - /home/software/Mysql/mysql-whyvent/logs:/var/log/mysql
      - /home/software/Mysql/mysql-whyvent/data:/var/lib/mysql
    image: mysql:5.7 #镜像选择
networks: #关联到网络环境net-docker
  default:
    external:
      name: net-docker

然后用doker-compose创建mysql容器,参考2.2.3

$ docker-compose -f docker-compose.yaml up -d

在这里插入图片描述
运行成功后,要在数据库中创建nacos数据库名称为:nacos,下面要引用。

这个数据库表的sql语句在nacos1.3的版本:nacos/conf/nacos-mysql.sql中。

2.3.4、创建nacos容器

修改nacos的nacos-standalone-mysql-5.7.yaml文件:

version: "3.8"
services:
  nacos:
    image: nacos/nacos-server:latest
    container_name: nacos-whyvent
    env_file:
      - nacos-standlone-mysql.env
    volumes:
      - /home/software/Nacos/nacos-whyvent/logs:/home/nacos/logs
      - /home/software/Nacos/nacos-whyvent/init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8849:8848"
    external_links: #关联容器外的 MySQL
      - mysql-whyvent
    restart: on-failure
networks: #配置和mysql容器互通的网络net-docker
  default:
    external:
      name: net-docker

修改nacos的yaml文件中指定的环境变量配置文件nacos-standlone-mysql.env:

PREFER_HOST_MODE=hostname
MODE=standalone # nacos的运行模式为standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=xxx.xxx.xxx.xxx #因为mysql-whyvent容器做了端口映射,所以这里的地址可以直接写主机的本地ip地址
MYSQL_SERVICE_DB_NAME=nacos #nacos持久化到mysql对应的图名称:nacos
MYSQL_SERVICE_PORT=3307
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=xxxxxx 

然后用docker-compose创建nacos容器:

$ docker-compose -f nacos-standalone-mysql-5.7.yaml up -d

在这里插入图片描述
接下来访问http://xxx.xxx.xxx.xxx:8849/nacos测试持久化配置应该是没毛病的。

2.4、DockerHub上传-mysql

通过容器提交镜像(docker commit)以及推送镜像(docker push)

2.4.1、创建DockerHub账号和仓库

我创建了一个common仓库,仓库名为:whyvent/common
在这里插入图片描述

2.4.2、从容器创建一个新的镜像

以mysql容器mysql-whyvent为例:

# docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# -a :提交的镜像作者;
# -c :使用Dockerfile指令来创建镜像;
# -m :提交时的说明文字;
# -p :在commit时,将容器暂停。
$ docker commit -a "whyvent" -m "mysql for whyvent" whyvent/common:mysql-whyvent

在这里插入图片描述
再次查看镜像,镜像whyvent/common:mysql-whyvent已经提交到本地了。

2.4.3、登录Docker账号

在这里插入图片描述

2.4.4、推送镜像到DockerHub仓库

# docker push [OPTIONS] NAME[:TAG]
# OPTIONS说明:
# --disable-content-trust :忽略镜像的校验,默认开启
$ docker push whyvent/common:mysql-whyvent

在这里插入图片描述
这样在自己的DockerHub仓库就可以看到上传的镜像了,你提交容器的环境变量配置就是该镜像的默认环境变量:
在这里插入图片描述

参考链接

1、Docker官方
2、Docker菜鸟教程
3、docker-compose安装nacos
4、浅谈docker-compose网络设置之networks
5、通过容器提交镜像(docker commit)以及推送镜像(docker push)笔记

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值