Linux常用环境Docker安装

时间:2024-06-01 18:38:08

一、mysql安装

简单安装

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

 mysql容器本地挂载

cd /usr
mkdir mysql
cd mysql/
mkdir data
mkdir conf
mkdir init

 

可以手动导入自己的数据库信息

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v /usr/mysql/data:/var/lib/mysql \
  -v /usr/mysql/conf:/etc/mysql/conf.d \
  -v /usr/mysql/init:/docker-entrypoint-initdb.d \
  mysql

然后就可以连接了

常见操作指令

# 4.查看root目录,可以发现~/mysql/data目录已经自动创建好了
ls -l mysql
# 结果:
总用量 4
drwxr-xr-x. 2 root    root   20 5月  19 15:11 conf
drwxr-xr-x. 7 polkitd root 4096 5月  19 15:11 data
drwxr-xr-x. 2 root    root   23 5月  19 15:11 init

# 查看data目录,会发现里面有大量数据库数据,说明数据库完成了初始化
ls -l data

# 5.查看MySQL容器内数据
# 5.1.进入MySQL
docker exec -it mysql mysql -uroot -p123
# 5.2.查看编码表
show variables like "%char%";
# 5.3.结果,发现编码是utf8mb4没有问题
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb4                        |
| character_set_connection | utf8mb4                        |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb4                        |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+

# 6.查看数据
# 6.1.查看数据库
show databases;
# 结果,hmall是黑马商城数据库
+--------------------+
| Database           |
+--------------------+
| hmall              |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
# 6.2.切换到hmall数据库
use hmall;
# 6.3.查看表
show tables;
# 结果:
+-----------------+
| Tables_in_hmall |
+-----------------+
| address         |
| cart            |
| item            |
| order           |
| order_detail    |
| order_logistics |
| pay_order       |
| user            |
+-----------------+
# 6.4.查看address表数据
+----+---------+----------+--------+----------+-------------+---------------+-----------+------------+-------+
| id | user_id | province | city   | town     | mobile      | street        | contact   | is_default | notes |
+----+---------+----------+--------+----------+-------------+---------------+-----------+------------+-------+
| 59 |       1 | 北京     | 北京   | 朝阳区    | 13900112222 | 金燕龙办公楼   | 李佳诚    | 0          | NULL  |
| 60 |       1 | 北京     | 北京   | 朝阳区    | 13700221122 | 修正大厦       | 李佳红    | 0          | NULL  |
| 61 |       1 | 上海     | 上海   | 浦东新区  | 13301212233 | 航头镇航头路   | 李佳星    | 1          | NULL  |
| 63 |       1 | 广东     | 佛山   | 永春      | 13301212233 | 永春武馆       | 李晓龙    | 0          | NULL  |
+----+---------+----------+--------+----------+-------------+---------------+-----------+------------+-------+
4 rows in set (0.00 sec)

可以自己试试

exit退出

可以创建一个网络

docker network create network1

# 2.然后查看网络

docker network ls

# 3.让dd和mysql都加入该网络,注意,在加入网络时可以通过--alias给容器起别名 # 这样该网络内的其它容器可以用别名互相访问!

# 3.1.mysql容器,指定别名为db,另外每一个容器都有一个别名是容器名

docker network connect network1 mysql --alias db

我这里就不用了

docker network connect network1 mysql

 docker network inspect network1

可以进入容器

docker exec -it 容器名称 bash

二、安装elasticsearch

docker run -d \
  --name es \
  -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
  -e "discovery.type=single-node" \
  -v es-data:/usr/share/elasticsearch/data \
  -v es-plugins:/usr/share/elasticsearch/plugins \
  --privileged \
  --network hm-net \
  -p 9200:9200 \
  -p 9300:9300 \
  elasticsearch:7.12.1

 三、安装Kibana

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=hm-net \
-p 5601:5601  \
kibana:7.12.1

四、安装MongoDB

1.docker 拉取mysql镜像

docker pull mongo:latest

2.运行容器

创建外部挂载的文件并进行授权

mkdir -p /mydata/mongo/config
mkdir -p /mydata/mongo/data
mkdir -p /mydata/mongo/logs
touch /mydata/mongo/config/mongod.conf
chmod 777 /mydata/mongo

然后,使用编辑器打开mongod.conf文件,

cd /mydata/mongo/config
vim mongod.conf

并添加以下内容: 

# 数据库存储路径
dbpath=/mydata/mongo/data
 
# 日志文件路径
logpath=/mydata/mongo/logs/mongod.log
 
# 监听的端口
port=27017
 
# 允许所有的 IP 地址连接
bind_ip=0.0.0.0
 
# 启用日志记录
journal=true
 
# 是否后台运行
fork=true     
                   
# 启用身份验证
#auth=true 

运行MongoDB容器

docker run -dit --name mongo \
-p 27017:27017 \
-v /mydata/mongo/config/mongod.conf:/etc/mongod.conf \
-v /mydata/mongo/data:/data/db \
-v /mydata/mongo/logs:/var/log/mongodb \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=123456 \
--restart=always  \
mongo

参数说明

-i:表示运行容器
-t:表示容器启动后进入其命令行
-d:守护式方式创建容器在后台运行
-name:容器名称
 -p 27017:27017     端口映射    前面是外部访问端口:后面内部开发的端口,mongoDB默认是27017端口
 -v /mydata/mongo/data:/data/db  给容器内部的数据文件指向mongodbdata ,即删除了容器,容器数据也不会丢失,下次创建容器继续挂载到/mydata/mongo/data即可看到删除容器之前的数据
-e MONGO_INITDB_ROOT_USERNAME=admin
-e MONGO_INITDB_ROOT_PASSWORD=123456  指定容器内的环境变量 初始化容器账号、密码
--restart=always   容器挂掉后自动重启

进入容器内部

docker exec -it mongo /bin/mongosh
//或
docker exec -it mongodb bash
 
//登录容器
mongo admin -u admin -p 123456     -u 后面的是创建容器指定的账号   -p 后面跟的是创建容器指定的密码


说明:
如果MongoDB6.0及以上使用:
docker exec -it mongo /bin/mongosh
如果是6.0以下的版本使用:
docker exec -it mongo /bin/mongo

mongo中各个角色对应的权限


权限    说明
read    允许用户读取指定数据库
readWrite    允许用户读写指定数据库
dbAdmin    允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin    允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户
clusterAdmin    只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
readAnyDatabase    只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase    只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase    只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase    只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限
root    只在admin数据库中可用。超级账号,超级权限

五、安装redis

docker run --restart=always -p 6379:6379 --name myredis -d redis:6.2.1  --requirepass ningzaichun

 或

docker run --restart=always \
-p 6379:6379 \
--name myredis \
-v /home/dj/redis/redis.conf:/etc/redis/redis.conf \
-v /home/dj/redis/data:/data \
-d redis:7.0.12 redis-server /etc/redis/redis.conf

六、安装nginx

docker pull nginx:1.24.0
docker run -p 80:80 -d --name nginx nginx:1.24.0

拷贝 Nginx 主配置文件/etc/nginx/nginx.conf

# nginx容器名、/etc/nginx/nginx.conf 配置文件容器内的地址
# D:\Programing\Docker\volumns\nginx\conf 宿主机上拷贝的目标地址
docker cp nginx:/etc/nginx/nginx.conf D:\Programing\Docker\volumns\nginx\conf

Nginx 主配置文件包含了影响 Nginx 全局行为的命令,包括事件处理、HTTP 服务器的基本配置(如监听端口、文件路径等)、日志文件位置以及其他重要配置。

 拷贝 html 目录:/usr/share/nginx/html

docker cp nginx:/usr/share/nginx/html D:\Programing\Docker\volumns\nginx

这是 Nginx 的默认文档根目录。当您使用 Nginx 来提供静态网页服务时,放置在此目录下的文件和目录将可以通过 web 访问。(注:可以在配置文件 server 块中,使用 root 指令指定根目录)

正式运行镜像

拷贝文件完成后,删除第一次试运行的 nginx 容器:

 正式运行 nginx,将宿主机上的配置文件和文档根目录挂载到容器上:

# 多行便于展示()
docker run -p 81:80 \
    --network api-my_net \
    -d --name nginx \
    -v D:\Programing\Docker\volumns\nginx\conf\nginx.conf:/etc/nginx/nginx.conf \
    -v D:\Programing\Docker\volumns\nginx\conf\conf.d:/etc/nginx/conf.d \
    -v D:\Programing\Docker\volumns\nginx\html:nginx:/usr/share/nginx/html \
    nginx:1.24.0

# 可直接复制该行命令运行
docker run -p 81:80 --network my_net -d --name nginx -v D:\Programing\Docker\volumns\nginx\conf\nginx.conf:/etc/nginx/nginx.conf  -v D:\Programing\Docker\volumns\nginx\conf\conf.d:/etc/nginx/conf.d -v D:\Programing\Docker\volumns\nginx\html:/usr/share/nginx/html nginx:1.24.0

参数解释:

--network:将容器加入到名为 my_net 的网络。注:如果该网络不存在,docker 会报错。若网络不存在,需要执行docker network create my_net创建。
-p:端口映射,冒号前为宿主机端口,冒号后为容器内的端口,即宿主机*问 81 端口的 HTTP 请求会被交给 nginx 容器的 80 端口。
-d:后台运行容器;
--name:指定容器名称,本例中名称为 nginx。
-v:挂载配置文件、html 目录到宿主机;冒号前为宿主机文件路径,冒号后为挂载到容器中的路径。可以看到宿主机被挂载的三个目录/文件是第一次运行时从容器内拷贝出来的,