第八章、Docker常规安装简介
总体步骤
搜索镜像
拉取镜像
查看镜像
启动镜像 (服务端口映射)
停止容器
移除容器
安装tomcat
docker hub上面查找tomcat镜像
docker search tomcat
从docker hub上拉取tomcat镜像到本地
docker pull tomcat
docker images查看是否有拉取到tomcat
docker images tomcat
使用tomcat镜像创建容器实例(也叫运行镜像)
docker run -it -p 8080:8080 tomcat
-p小写,主机端口:docker容器端口
-p大写,随机分配端口7
-i:交互
t:终端
d:后台
访问猫首页
问题:
在火狐浏览器上localhost:8080
最后访问报404的情况:
HTTP状态404-未找到
类型 状态报告 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。
Apache Tomcat/9.0.35
解决:
可能没有映射端口或者没有关闭防火墙(不是问题关键所在)
把webapps.dist目录换成webapps(解决方法)
先成功启动tomcat:
docker run -d -p 8888:8080 tomcat
docker exec -it 1dbbc5360a5f /bin/bash
查看webapps文件夹查看为空:
ls -l
rm -r webapps
mv webapps.dist webapps
免修改版说明
docker pull billygoo/tomcat8-jdk8
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
安装mysql
docker hub上面查找mysql镜像
docker search mysql
从docker hub上(阿里云加速器)拉取mysql镜像到本地标签为5.7
docker pull mysql:5.7
使用mysq15.7镜像创建容器(也叫运行镜像)
简单版
使用mysql镜像:
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker ps
docker exec -it 容器ID/bin/bash
mysql -uroot -p
建库建表插入数据
外部Win10也来连接运行在dokcer上的mysql容器实例服务
问题:
插入中文数据试试为什么报错?
docker上默认字符集编码隐患
docker里面的mysql容器实例查看,内容如下:SHOW VARIABLES LIKE 'character%'
删除容器后,里面的mysql数据怎么办
容器实例一删除,你还有什么? 删容器到跑路。。 。。?
实战版
新建mysql容器实例:
docker run -d -p 3306:3306 --privileged=true -v /zzyyuse/mysql/log:/var/log/mysql -v /zzyyuse/mysql/data:/var/lib/mysql -v /zzyyuse/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=000000 --name mysql mysql:5.7
新建my.cnf:
通过容器卷同步给mysq容器实例
[root@zzyy ~]# cd /zzyyuse/mysql/conf/
[root@zzyy conf]# ls
[root@zzyy conf]# vim my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
重新启动mysql容器实例再重新进入并查看字符编码
docker restart mysql
docker exec -it mysql /bin/bash
mysql -uroot -p
SHOW VARIABLES LIKE 'character%';(这是一个 MySQL 查询,它用于显示与字符集(character set)相关的数据库变量。)
再新建库新建表再插入中文测试
结论:
之前的DB无效 ("DB" 通常指的是 "数据库"(Database)的缩写。) 修改字符集操作+ 重启mysql容器实例 之后的DB有效需要新建。
结论:docker安装完MySQL并run出容器后,建议请先修改完字符集编码后再新建mysql库-表-插数据
mysql> create database db02; ( 这个命令用于创建一个名为 "db02" 的新数据库。)
QueryOK,1 row affected (0.00 sec)
mysql> use db02; ( 这个命令将当前数据库更改为 "db02",意味着所有后续操作将在这个数据库上执行。)
Database changed
mysql> create table t1(id int , name varchar(20)); ( 这个命令创建了一个名为 "t1" 的新表,它有两列,分别是 "id"(整数类型)和 "name"(最大长度为 20 的字符串类型)。)
mysql> insert into t1 values(1,'z3'); (这个命令向 "t1" 表中插入了一行数据,具体是插入了 (1, 'z3') 这一行。)
Query OK, 1 row affected (0.02 sec)
mysql> select * from t1; (最后这个命令执行了一个简单的查询,从 "t1" 表中选择所有行,并将结果返回。)
+------+------+
| id | name |
+------+------+
| 1 | z3 |
+------+------+
1 row in set (0.00 secedo.01 sec)
安装redis
Redis(Remote Dictionary Server)是一个开源的高性能键值存储系统,它广泛用于构建缓存、消息队列、实时分析、计数器和其他数据处理任务。Redis 是一个多才多艺的数据存储系统,可以应用于各种不同的用途,从缓存到实时分析,从消息队列到计数器。其速度和多功能性使得它成为许多应用程序的核心组件。
从docker hub上(阿里云加速器)拉取redis镜像到本地标签为6.0.8
docker pull redis:6.0.8
入门命令
docker run -d -p 6379: 6379 redis:6.0.8
docker exec -it f216c38ea035 /bin/bash
redis -cli (这是 Redis 的命令行客户端工具,用于与 Redis 服务器进行交互。在终端中运行
redis-cli命令时,它会启动 Redis 客户端,允许用户执行 Redis 命令。)
set k1 v1 (这是 Redis 的 SET 命令,用于设置键值对。在这里,它将键名 "k1" 的值设置为 "v1"。这表示在 Redis 中创建一个名为 "k1" 的键,并将其值设置为 "v1"。)
get k1(这是 Redis 的 GET 命令,用于获取指定键的值。在这里,它会返回键名 "k1" 对应的值,即 "V1"。)
ping (这是 Redis 的 PING 命令,用于检查与 Redis 服务器的连接是否正常。如果服务器正常运行,它将返回一个 "PONG" 响应,表示一切正常。)
命令提醒:容器卷记得加入 --privileged=true
Docker挂载主机目录Docker访问出现cannot open directory.:Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可
在CentOS宿主机下新建目录/app/redis
mkdir -p /app/redis
将一个redis.conf文件模板拷贝进/app/redis目录下
cp /myredis/redis.conf /app/redis/
cd /app/redis/ (拷贝配置文件,将准备好的redis.conf文件放进/app/redis目录下)
ls -l
/app/redis目录下修改redis.conf文件
默认出厂的原始redis.conf
/app/redis目录下修改redis.conf文件:
1.开启redis验证 可选
requirepass 000000
2.允许redis外地连接 必须
注释掉#bind 127.0.0.1
#IF YOU ARE SURE YOU WANT YOUR INSTANCETOLISTEN TO ALL THE INTERFACES
# JUST COMMENT THE FOLLOWING LINE.
#bind 127.0.0.1 允许redis外地连接
3.daemonize no
将daemonize yes注释起来或者daemonize no设置,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败
#By default Redis does not run as a daemon.Use 'yes' if you need it.
#Note that Redis will write a pidfile in /var/run/redis.pid when daemonized.
daemonize no
4.开启redis数据持久化
appendonly yes 可选
使用redis6.0.8镜像创建容器(也叫运行镜像)
docker run -p 6379:6379 --name myr3 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
docker run -p 6379:6379 --name myr3 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -v /app/redis/logs:/var/log/redis -d redis:6.0.8 redis-server /etc/redis/redis.conf
测试redis-cli连接上来
docker exec -it myr3 /bin/bash
set k1 v1
get k1
ping
证明docker启动使用了自己指定的配置文件
修改前:
127.0.0.1:6379>select 15 (在 Redis 中选择一个不同的数据库。Redis 支持多个数据库,编号从 0 到 15,默认情况下,客户端连接到数据库0。通过执行 select 命令,用户可以切换到不同的数据库,以便在不同的数据库中存储和检索数据。我们用的配置文件,数据库默认是16个)
OK
修改后 (记得重启服务):
vim redis.conf
databases 10
宿主机的修改会同步给docker容器里面的配置。
docker restart myrs
测试redis-cli连接上来2
docker exec -it myr3 /bin/bash
redis -cli
127.0.0.1:6379> select 11
error) ERR DB index is out of range
127.0.0.1:6379> select 9
OK
127.0.0.1:6379[ 9]> select 15
(error)ERR DB index is out of range