【Docker】Docker持久化安装Mysql、Sql server、Oracle数据库

安装Docker

基础准备

1、Docker支持以下的CentOS版本:

·Docker运行在CentOS 7(64-bit)上要求系统为64位,系统内核版本为3.10以上

查看自己的系统版本:cat /etc/centos-release

查看系统内核版本命令:uname -a

2、更新yum

sudo yum update

3、如果存在旧版本docker请卸载

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

4、安装存储库

sudo yum install -y yum-utils

由于docker官方国内访问比较慢,可以通过阿里云的源来完成:

sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装 Docker 引擎

1、安装最新版本的 Docker Engine 和 containerd

sudo yum install docker-ce docker-ce-cli containerd.io

2、列出并排序在你的repo中可用的版本。这个例子根据版本号对结果进行排序,从最高到最低,并被截断

yum list docker-ce --showduplicates | sort -r

3、通过其完全限定的包名安装特定版本,即包名(docker-ce)加上从第一个冒号(:)开始的版本字符串(第2列) ,直到第一个连字符,中间用连字符(-)分隔。例如,docker-ce-18.09.1。

sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

例:sudo yum install docker-ce-17.12.1.ce docker-ce-cli-17.12.1.ce containerd.io

4、启动Docker

sudo systemctl start docker 

5、通过运行 hello-world 映像来验证 Docker Engine 安装是否正确。

sudo docker run hello-world

注:此命令下载测试映像并在容器中运行它。当容器运行时,它打印一条消息并退出。

配置镜像及设置全局容器日志大小

Docker默认拉取镜像是从这里拉取(https://hub.docker.com),国外地址拉取的速度比较慢。我们也可以配置国内镜像源。

● Docker 官方中国区:https://registry.docker-cn.com

● 网易:http://hub-mirror.c.163.com

● 中国科学技术大学:https://docker.mirrors.ustc.edu.cn

1、编辑配置文件/etc/docker/daemon.json(没有时会自动新建该文件)

vim /etc/docker/daemon.json

{
#配置镜像
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]#配置全局容器大小,否则日志文件会非常大
 "log-driver":"json-file",
  "log-opts":{
    "max-size" :"500m","max-file":"3"
  }
}

2、重启docker守护进程

systemctl daemon-reload
systemctl restart docker

Docker安装Compose

数据持久化,我的理解就是可通过编写yaml文件实现一键安装数据库且实现目录挂载,这样即使容器丢失数据也不会丢。

1、运行这个命令下载当前的 Docker Compose 稳定版本

sudo 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、对二进制文件应用可执行权限

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

3、测试安装

docker-compose --version

Docker安装Portainer

我的理解Portainer就是管理Docker的UI页面,不用每次都要进服务器才能对容器进行操作查看。

1、首先,创建 Portainer Server 用来存储数据库的卷:

docker volume create portainer_data

2、下载并安装 Portainer Server 容器:

docker run -d -p 8000:8000 -p 9443:9443 --name portainer \
    --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v portainer_data:/data \
    portainer/portainer-ce:2.11.1

注意:如果因为遗留的原因需要打开 HTTP 端口9000,在 docker run 命令中添加以下命令:
-p 9000:9000

docker run -d -p 8000:8000 -p 9443:9443 -p 9000:9000 --name portainer \
    --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v portainer_data:/data \
    portainer/portainer-ce:2.11.1

已经安装了 Portainer 服务器。你可以通过运行docker ps来检查 Portainer Server 容器是否已经启动。

3、登录Portainer

浏览器中输入https://服务器ip:9443,您将看到 Portainer Server 的初始设置密码创建用户页面。

到这其实Docker的环境已经准备好了,不过安装过程中请按我写的步骤一步一步走下来,如有报错请自行百度,哈哈,因为我也不懂~

docker-compose安装Mysql、Sql Server、Oracle数据库

在服务器中任意位置下(我是在/usr/local/tools)新建一个Database文件夹,子文件夹为data和yaml,进入yaml文件夹下再新建docker-compose.yaml文件,yaml文件中代码如下:

version: '3.1'
services:
  mysql-8:
    image: mysql:8.0.22
    restart: always
    container_name: mysql-8
    environment:
      MYSQL_ROOT_PASSWORD: ****** #自己设置密码
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3307:3306
    volumes:
      #../data其实就是我们Database文件下的data文件夹,data下面的子文件建可以自己先建好,没有的话也会自动生成,所以没关系,你也可以随意建文件夹,只要这边挂载的时候写对即可,为什么写../相对路径,因为方便迁移到其他机器
      - ../data/mysql/mysql8/data:/var/lib/mysql  
      - ../data/mysql/mysql8/conf:/etc/mysql/conf.d
      - ../data/mysql/mysql8/logs:/logs


  #服务名称
  sqlserver-2019:
    restart: always
    #容器名称
    container_name: sqlserver-2019
    #镜像名称
    image: mcr.microsoft.com/mssql/server:2019-latest
    #端口映射
    ports:
      - 1433:1433
    #挂载
    volumes:
      - ../data/mssql/mssql2019:/var/opt/mssql
    #环境变量
    environment:
      - ACCEPT_EULA=Y
      #SA用户密码长度必须至少为 8 个字符,并包含以下四组中的三组字符:大写字母、小写字母、10 位基数和符号
      - SA_PASSWORD=****** #自己设置密码

  oracle-11:
    hostname: oracle-11
    image: jaspeen/oracle-xe-11g:latest
    restart: always  
    container_name: oracle-11
    expose:
      - 1521
    privileged: true
    environment:
      - TZ=Asia/Shanghai
      - DOCKER_CLIENT_TIMEOUT=120
      - COMPOSE_HTTP_TIMEOUT=120
      - ORACLE_PDB=system   #默认数据库
      - ORACLE_PWD=oracle   #oracle system用户的密码
      - ORACLE_CHARACTERSET=AL32UTF8
    volumes:
      - ../data/oracle/oracle11:/u01/app/oracle
    ports:
      - 1521:1521

保存后进入tools文件夹给Database赋予权限:chmod -R 777 Database ,再回到yaml文件夹执行命令,两种方式:

  • 如果一键安装则
docker-compose up -d 
  • 如果分容器安装则加上容器名
docker-compose up -d mysql-8

docker-compose up -d sqlserver-2019

docker-compose up -d oracle-11

执行成功后,每个容器后会显示done,成功后即可利用Navicat进行连接。

需要注意的一点是,这里安装的oracle服务名为XE,不是默认的ORCL。

额外扩展

1、解决vim安装问题

我进入oracle后想配置一个环境变量,但是由于容器相当于是centos最小化安装,所以不支持vim,这个让我很烦,因为vi实在不方便,所以我打算安装vim,执行 sudo apt install vim却报错了:

【Docker】Docker持久化安装Mysql、Sql server、Oracle数据库_第1张图片
解决方法是更新apt:

sudo apt-get update
sudo apt-get upgrade

执行以上命令后再执行sudo apt install vim即可安装成功。

2、利用Navicat连接oracle后新建表空间

  • 利用sql查询临时表空间存放文件位置
select name from v$tempfile;

上面查出路径后请记住,下面要用:

create tablespace 表空间名称
datafile '/u01/app/oracle/oradata/XE/Sugonwyydata.dbf' #路径同上个语句查出来的一样,随便编一个dbf文件名即可
size 200m
autoextend on
next 10m;
  • 创建用户并选择表空间
create user 用户名

IDENTIFIED BY “密码”

DEFAULT tablespace 表空间名称 ;

3、授权用户以管理员权限登录

grant dba to 用户名;

如果想收回管理员权限只想拥有连接,导入,导出权限则

revoke dba from 用户名;

grant connect,exp_full_database,imp_full_database to 用户名;

4、添加system用户和新建用户对新建表空间操作表的权限

alter user system quota unlimited on 表空间名称;

grant unlimited tablespace to system;

grant insert any table to system;

grant unlimited tablespace to 新建用户;

5、移除新建用户对表空间的权限

revoke unlimited tablespace from 用户名;

ALTER USER SUGONTEST QUOTA UNLIMITED ON 表空间名称; 

最后附上docker容器的官方库地址:,代码中的image路径其实就是图中的tag页面标红处。

【Docker】Docker持久化安装Mysql、Sql server、Oracle数据库_第2张图片

-------------------------------分割线--------------------------------------------------------------------------------------------------------------------------------
今天用Navicat利用用户名和密码连接oracle,提示密码已过期,但是自己按照提示输入正确的旧密码和设置对应的新密码后无法修改成功提示【ORA-01017:invalid username/password;logon denied】
【Docker】Docker持久化安装Mysql、Sql server、Oracle数据库_第3张图片
百度了一下找到了原因所在,这是由于账号的密码设置了有效期(默认为:180天),可以通过打开Oracle服务器上的sqlplus工具,但是发现我突然不知道怎么利用Portainer上的oracle容器改密码!百度了很久找到了答案:
1、首先登录Portainer找到对应oracle容器并进入控制台
【Docker】Docker持久化安装Mysql、Sql server、Oracle数据库_第4张图片
2、先输入su - oracle切到oracle用户下,再用sqlplus / as sysdba登陆oracle系统,这种登录方式使用的是操作系统的验证方式,因此,无需输入用户名和密码即可直接登录进去。
【Docker】Docker持久化安装Mysql、Sql server、Oracle数据库_第5张图片
利用SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';查看Oracle账号的密码有效期
【Docker】Docker持久化安装Mysql、Sql server、Oracle数据库_第6张图片
3、修改密码:alter user 用户名称 identified by 密码;
比如:alter user tester01 identified by 123456;
注意修改密码时不要带特殊字符,如果带特殊字符记得带双引号,单引号不行!

4、如果在使用dba角色使用命令修改账号的密码后,使用Navicat登陆该账号如果提示【ORA-28000:the account is locked】(即账号被锁定的提示),则依旧在Oracle服务器上使用sqlplus工具使用dba角色登陆,输入解锁命令解除该指定账号的锁定状态
alter user 需要解锁的账号名称 account unlock;

5、如果想设置密码永不过期,则利用ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED ;

6、如果解锁了账号之后没多久又被锁定了,那么执行alter profile default limit failed_login_attempts unlimited,这样无论输入多少次都不会被锁定,但此时,数据的安全性将降低。

你可能感兴趣的:(linux,docker,docker,数据库,mysql)