docker常用安装:mysql+redis+nginx

docker安装mysql5.7

1.docker hub寻找镜像:docker search mysql

[root@izbp13m488196e5hna361rz /]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10545     [OK]       
mariadb                           MariaDB is a community-developed fork of MyS…   3937      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   773                  [OK]
percona                           Percona Server is a fork of the MySQL relati…   527       [OK]       
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   86                   
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   79                   
centurylink/mysql                 Image containing mysql. Optimized to be link…   59                   [OK]
bitnami/mysql                     Bitnami MySQL Docker Image                      48                   [OK]
deitch/mysql-backup               REPLACED! Please use http://hub.docker.com/r…   41                   [OK]
databack/mysql-backup             Back up mysql databases to... anywhere!         38                   
prom/mysqld-exporter                                                              37                   [OK]

2.从docker hub上拉取mysql 5.7镜像,注意tag为5.7:docker pull mysql:5.7

[root@izbp13m488196e5hna361rz /]# docker pull mysql:5.7
5.7: Pulling from library/mysql
a076a628af6f: Already exists 
f6c208f3f991: Pull complete 
88a9455a9165: Pull complete 
406c9b8427c6: Pull complete 
7c88599c0b25: Pull complete 
25b5c6debdaf: Pull complete 
43a5816f1617: Pull complete 
1831ac1245f4: Pull complete 
37677b8c1f79: Pull complete 
27e4ac3b0f6e: Pull complete 
7227baa8c445: Pull complete 
Digest: sha256:b3d1eff023f698cd433695c9506171f0d08a8f92a0c8063c1a4d9db9a55808df
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
[root@izbp13m488196e5hna361rz /]# docker images mysql
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        5.7       a70d36bc331a   5 weeks ago   449MB

3.使用mysql5.7镜像创建容器

docker run -p 3306:3306 \
--name mysql57 \
-v /nick/mysql/conf:/etc/mysql/conf.d \
-v /nick/mysql/logs:/logs \
-v /nick/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d \
mysql:5.7
# 命令说明:
-p 3306:3306:将主机的3306端口映射到docker容器的3306端口。
--name mysql57:运行容器的名字
-v /nick/mysql/conf:/etc/mysql/conf.d :将主机/nick/mysql录下的conf/my.cnf 挂载到容器的 /etc/mysql/conf.d
-v /nick/mysql/logs:/logs:将主机/nick/mysql目录下的 logs 目录挂载到容器的 /logs。
-v /nick/mysql/data:/var/lib/mysql :将主机/nick/mysql目录下的data目录挂载到容器的 /var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
-d mysql:5.7 : 后台程序运行mysql5.7

查看容器:

[root@izbp13m488196e5hna361rz nick]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED              STATUS              PORTS                               NAMES
fbcdf7813a1b   mysql:5.7   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql57

4.进入容器中的mysql,进行添加库、添加表、添加数据的操作:

[root@izbp13m488196e5hna361rz nick]# docker exec -it fbcdf7813a1b /bin/bash
root@fbcdf7813a1b:/# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.33 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database db01; 
Query OK, 1 row affected (0.00 sec)

mysql> use db01;
Database changed

mysql> create table t_book(id int not null primary key, bookName varchar(20));
Query OK, 0 rows affected (0.23 sec)

mysql> insert into t_book values(1,"python");
Query OK, 1 row affected (0.11 sec)

mysql> show tables;
+----------------+
| Tables_in_db01 |
+----------------+
| t_book         |
+----------------+
1 row in set (0.00 sec)

mysql> select * from t_book; 
+----+----------+
| id | bookName |
+----+----------+
|  1 | python   |
+----+----------+
1 row in set (0.00 sec)

5.客户端使用工具连接数据库

新建的库、表、数据都正常。

6.进行数据库备份

 进行数据库的全量备份:docker exec fbcdf7813a1b mysqldump --all-databases -uroot -p123456 > /nick/mysql/backup/all-databases.sql

[root@izbp13m488196e5hna361rz mysql]# docker exec fbcdf7813a1b mysqldump --all-databases -uroot -p123456 > /nick/mysql/backup/all-databases.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@izbp13m488196e5hna361rz mysql]# ll backup/
total 3492
-rw-r--r-- 1 root root 3573909 Mar  4 16:22 all-databases.sql
[root@izbp13m488196e5hna361rz mysql]# vi backup/all-databases.sql 

-- MySQL dump 10.13  Distrib 5.7.33, for Linux (x86_64)
--
-- Host: localhost    Database:
-- ------------------------------------------------------
-- Server version       5.7.33

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `mysql`

。。。。。。。。。。

docker安装redis

1.从docker hub上拉取redis 3.2镜像,注意tag为3.2:docker pull redis:3.2

[root@izbp13m488196e5hna361rz ~]# docker pull redis:3.2
3.2: Pulling from library/redis
Digest: sha256:7b0a40301bc1567205e6461c5bf94c38e1e1ad0169709e49132cafc47f6b51f3
Status: Downloaded newer image for redis:3.2
docker.io/library/redis:3.2
[root@izbp13m488196e5hna361rz ~]# docker images redis
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
redis        3.2       87856cc39862   2 years ago   76MB

2.使用redis 3.2镜像创建容器

docker run -p 6379:6379 \
-v /nick/redis/data:/data \
-d redis:3.2 redis-server --appendonly yes
命令说明:
-p 6379:6379 : 将容器的6379端口映射到主机的6379端口
-v /nick/redis/data:/data : 将宿主机中目录下的data挂载到容器的/data
redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置
[root@izbp13m488196e5hna361rz ~]# docker run -p 6379:6379 \
> -v /nick/redis/data:/data \
> -d redis:3.2 redis-server --appendonly yes
a44f0c71a099000c26e525136fef9a437d98f7abddbdd66ff8ce4f5cdee30afa
[root@izbp13m488196e5hna361rz ~]# docker ps 
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                               NAMES
a44f0c71a099   redis:3.2   "docker-entrypoint.s…"   6 seconds ago   Up 4 seconds   0.0.0.0:6379->6379/tcp              pedantic_williamson
fbcdf7813a1b   mysql:5.7   "docker-entrypoint.s…"   7 days ago      Up 7 days      0.0.0.0:3306->3306/tcp, 33060/tcp   mysql57

3.用客户端redis-cli连接测试,插入数据并关闭redis

[root@izbp13m488196e5hna361rz ~]# docker exec -it a44f0c71a099 redis-cli
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> shutdown

4.查看宿主机中的/nick/redis/data数据文件

[root@izbp13m488196e5hna361rz data]# ll /nick/redis/data/
total 4
-rw-r--r-- 1 systemd-bus-proxy input 81 Mar  5 15:18 appendonly.aof
[root@izbp13m488196e5hna361rz data]# cat appendonly.aof 
*2
$6
SELECT
$1
0
*3
$3
set
$2
k1
$2
v1
*3
$3
set
$2
k2
$2
v2

docker安装nginx

 1.从docker hub上拉取nginx 1.8镜像,注意tag为1.8:docker pull nginx:1.8

[root@izbp13m488196e5hna361rz data]# docker images nginx
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        1.8       0d493297b409   4 years ago   133MB

2.使用nginx 1.8镜像创建容器

[root@izbp13m488196e5hna361rz data]# docker run -p 8888:80 -d nginx:1.8
d5920f13fd0c8ca2d49c930a3b0a80ca64e2e0f967ddbee809d7614f0f8365fe
[root@izbp13m488196e5hna361rz data]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                               NAMES
d5920f13fd0c   nginx:1.8   "nginx -g 'daemon of…"   5 seconds ago   Up 4 seconds   443/tcp, 0.0.0.0:8888->80/tcp       blissful_bartik
a44f0c71a099   redis:3.2   "docker-entrypoint.s…"   2 hours ago     Up 2 hours     0.0.0.0:6379->6379/tcp              pedantic_williamson
fbcdf7813a1b   mysql:5.7   "docker-entrypoint.s…"   7 days ago      Up 7 days      0.0.0.0:3306->3306/tcp, 33060/tcp   mysql57

3.浏览器测试

 

 

4.实际工作中一般会准备好nginx的配置文件,并在宿主机中挂载配置文件和日志

docker run -p 8888:80 \
-v /nick/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /nick/nginx/log:/var/log/nginx \
-v /nick/nginx/conf.d:/etc/nginx/conf.d \
-d nginx:1.8
命令说明:
-p 8888:80 : 将容器的80端口映射到主机的8888端口
-v /nick/nginx/nginx.conf:/etc/nginx/nginx.conf : 将宿主机中目录下的nginx.conf覆盖到容器的nginx.conf文件
-v /nick/nginx/log:/var/log/nginx : 日志目录挂载
-v /nick/nginx/conf.d:/etc/nginx/conf.d : 配置文件目录挂载
-d nginx:1.8 后台启动
[root@izbp13m488196e5hna361rz log]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                               NAMES
d23f24e8efaf   nginx:1.8   "nginx -g 'daemon of…"   19 minutes ago   Up 19 minutes   443/tcp, 0.0.0.0:8888->80/tcp       cool_hoover

验证一下配置文件nginx.conf是否覆盖(这里宿主机准备好的文件中worker_processes为2)

[root@izbp13m488196e5hna361rz log]# grep worker_processes /nick/nginx/nginx.conf 
worker_processes  2;
[root@izbp13m488196e5hna361rz log]# docker exec d23f24e8efaf grep worker_processes /etc/nginx/nginx.conf 
worker_processes  2;

很重要的一点:

当 -v 后面是 文件a:文件b 时,是文件的覆盖,需要在宿主机中事先准备好文件a(不然会报错),一般用来设置容器的启动配置项。

当 -v 后面是 路径a:路径b 时,是文件夹的挂载,一般用于数据、日志等目录的同步,方便在宿主机中查询与跟踪。


posted @ 2021-03-05 18:19  酒红色  阅读(424)  评论(0编辑  收藏  举报