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 时,是文件夹的挂载,一般用于数据、日志等目录的同步,方便在宿主机中查询与跟踪。