2023-12-09
Docker
00

目录

Docker 常用软件安装(九)
一、Tomcat 安装
1、查找镜像
2、镜像拉取和查看
3、运行 tomcat 容器
4、访问 tomcat 首页
5、附加内容:tomcat 8 版本安装
二、mysql 安装
1、查找镜像
2、镜像拉取和查看
3、运行 mysql 容器
4、mysql 配置文件修改
5、创建数据库,并插入数据
6、**mysql容器中mysql命令无法输入中文**
问题原因
解决方法
第一种 进入容器的时候设置字符集
第二种 需要重新构建 docker 容器 (优点 永久生效一劳永逸) 构建docker 容器时候 时候增加一个变量
6、附加测试
三、nginx 安装
1、查找镜像
2、镜像拉取和查看
3、创建 nginx 配置文件
4、创建nginx容器并运行
5、访问测试

Docker 常用软件安装(九)

这篇文章介绍了如何使用 Docker 安装和部署常用软件 Tomcat、MySQL 和 Nginx。可以通过访问 Docker Hub 或通过命令“docker search”来查找镜像,然后拉取和查看镜像。使用相应命令之后,可以运行容器并访问其首页来验证容器是否运行正常。其中,Tomcat 10 版本需要修改主页目录内容,而 Tomcat 8 版本不需要。MySQL 镜像需要修改配置文件以解决中文字符乱码文件,而 Nginx 镜像启动前需要先创建外部挂载的配置文件。

Docker 常用软件安装(九)

摘要:本文介绍通过 Docker 安装部署常用软件 Tomcat、mysql 和 nginx 。

一、Tomcat 安装

1、查找镜像

Tomcat 镜像可以通过访问 docker hub 或者通过命令 docker search 来查找。

示例:通过 docker hub 查找 Tomcat 镜像。

https://image.myxuechao.com/docker/34.png

使用命令 docker search tomcat 进行镜像搜索。

https://image.myxuechao.com/docker/35.png

2、镜像拉取和查看

镜像拉取:

bash
docker pull tomcat

查看镜像:

bash
[root@10-60-55-35 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat latest e76527586e57 2 days ago 454MB

3、运行 tomcat 容器

运行 tomcat 命令如下:

bash
docker run -d --name mytomcat -p 8080:8080 tomcat:latest

查看 tomcat 容器运行状态:

bash
docker ps

https://image.myxuechao.com/docker/36.png

4、访问 tomcat 首页

访问 http://ip:8080 验证容器运行是否正常。

https://image.myxuechao.com/docker/37.png

由于 Tomcat 10 版本猫主页位置内容变更,所以进入容器需要修改主页目录内容。

主页内容在 webapps.dist 中,而我们访问的路径在 webapps 目录,所以需要复制 webapps.dist 目录下的文件内容到 webapps 目录下。

https://image.myxuechao.com/docker/38.png

bash
# 进入 tomcat 容器 docker exec -it mytomcat /bin/bash # 主页内容在 webapps.dist 中,而我们访问的路径在 webapps 目录,所以需要复制 webapps.dist 目录下的文件内容到 webapps 目录下。 # 复制 root@f96e06103310:/usr/local/tomcat# cp -r webapps.dist/* webapps/

再次访问 http://ip:8080 验证容器运行是否正常。

https://image.myxuechao.com/docker/39.png

5、附加内容:tomcat 8 版本安装

tomcat 8 版本无需修改主页,运行命令如下:

bash
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8

注意,此镜像无需额外pull,本地无此镜像,会自动pull 该镜像。

二、mysql 安装

1、查找镜像

mysql 镜像可以通过访问 docker hub 来查找。

示例:通过 docker hub 查找 mysql:5.7 镜像。

https://image.myxuechao.com/docker/40.png

https://image.myxuechao.com/docker/41.png

2、镜像拉取和查看

镜像拉取:

bash
docker pull mysql:5.7

查看镜像:

bash
[root@10-60-55-35 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7 bdba757bc933 5 weeks ago 501MB

3、运行 mysql 容器

启动 Mysql 容器,并配置容器卷映射

(1) 运行 mysql 命令如下:

bash
docker run -d -p 3306:3306 \ --privileged=true \ -v /app/mysql/log:/var/log/mysql \ -v /app/mysql/data:/var/lib/mysql \ -v /app/mysql/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=root \ --name mysql \ mysql:5.7
  • -privileged=true :授予权限
  • v /whb/mysql/log:/var/log/mysql :日志数据卷挂载。
  • v /whb/mysql/data:/var/lib/mysql :数据数据卷挂载。
  • v /whb/mysql/conf:/etc/mysql/conf.d :配置数据卷挂载。
  • e MYSQL_ROOT_PASSWORD=123456 :通过环境变量配置 mysql root 密码。

(2) 查看 mysql 容器运行状态:

bash
docker ps

https://image.myxuechao.com/docker/42.png

4、mysql 配置文件修改

(1) my.cnf 文件修改,解决中文字符乱码文件。

在宿主机/app/mysql/conf下新建 my.cnf,通过容器卷同步给mysql实例,解决中文乱码问题,内容如下。

bash
[client] default_character_set=utf8 [mysqld] collation_server = utf8_general_ci character_set_server = utf8

(2) 重启 mysql 容器,并查看字符编码

重启容器:

bash
docker restart mysql

查看字符编码:

bash
# 进入 mysql 容器 docker exec -it mysql /bin/bash # 登录 mysql ,密码 root mysql -u root -p # 查看 MySQL 字符编码 mysql> SHOW VARIABLES LIKE 'character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)

5、创建数据库,并插入数据

bash
#查看数据库 mysql> SHOW DATABASES; # 创建数据库 lxctest mysql> create database lxctest; Query OK, 1 row affected (0.00 sec) # 使用数据库 lxctest mysql> use lxctest; Database changed # 创建数据表 user mysql> create table user(id int,name varchar(20)); Query OK, 0 rows affected (0.40 sec) # 在数据表 user 中插入数据 mysql> insert into user values(1,'发烧的'); Query OK, 1 row affected (0.05 sec) # 查询 数据表 user 中的数据 mysql> select * from user; +------+------+ | id | name | +------+------+ | 1 | whb | +------+------+ 1 row in set (0.00 sec)

6、mysql容器中mysql命令无法输入中文

这里我想输入中文输入不了,这会导致你想用原生sql语句插入中文数据插入不了,你复制sql语句中有中文也复制不上去。

https://image.myxuechao.com/docker/43.png

问题原因

这是因为mysql容器的字符集没有使用utf8,用了别的字符集,这里我进去容器之后用命令查看字符集是POSIX

  • locale 这是是查看容器使用的字符集

https://image.myxuechao.com/docker/44.png

解决方法

第一种 进入容器的时候设置字符集

bash
#进入 mysql 容器 docker exec -it [容器id或名字] env LANG=C.UTF-8 /bin/bash # 登录 mysql ,密码 root mysql -uroot -p

第二种 需要重新构建 docker 容器 (优点 永久生效一劳永逸) 构建docker 容器时候 时候增加一个变量

  • 加入这个变量 : -e LANG="C.UTF-8"
bash
docker run -d -p 3306:3306 \ --privileged=true \ -v /app/mysql/log:/var/log/mysql \ -v /app/mysql/data:/var/lib/mysql \ -v /app/mysql/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=root \ -e LANG="C.UTF-8" \ --name mysql \ mysql:5.7

6、附加测试

问:删除容器,再次创建容器挂载数据卷,查看数据是否存在?

答:此处实验内容省略,数据还在。

三、nginx 安装

1、查找镜像

nginx 镜像可以通过访问 docker hub 来查找。

示例:通过 docker hub 查找 nginx 镜像。

https://image.myxuechao.com/docker/45.png

https://image.myxuechao.com/docker/46.png

2、镜像拉取和查看

命令描述
docker pull nginx下载最新版Nginx镜像 (其实此命令就等同于 : docker pull nginx
)
docker pull nginx
下载指定版本的Nginx镜像 (xxx指具体版本号)

镜像拉取:

bash
docker pull nginx

查看镜像:

bash
docker images

3、创建 nginx 配置文件

启动前需要先创建 nginx 外部挂载的配置文件 /etc/docker/nginx/conf/nginx.conf,之所以要先创建 , 是因为 nginx 本身容器只存在 /etc/nginx 目录 , 本身就不创建 nginx.conf 文件,当服务器和容器都不存在 nginx.conf 文件时, 执行启动命令的时候 docker 会将 nginx.conf 作为目录创建 , 这并不是我们想要的结果 。

bash
# 创建挂载目录 mkdir -p /etc/docker/nginx/conf mkdir -p /etc/docker/nginx/log mkdir -p /etc/docker/nginx/html # 可以执行一行命令代替上面的三行命令 sudo mkdir -p /etc/docker/nginx/{conf,html,logs}

使用以下命令验证目录是否已成功创建:

bash
ls -l /etc/docker/nginx

容器中的 nginx.conf 文件和 conf.d 文件夹复制到宿主机。

bash
# 生成容器 docker run --name nginxtest -d -p 80:80 nginx # 将容器 nginx.conf 文件复制到宿主机 docker cp nginxtest:/etc/nginx/nginx.conf /etc/docker/nginx/conf/nginx.conf # 将容器 conf.d 文件夹下内容复制到宿主机 docker cp nginxtest:/etc/nginx/conf.d /etc/docker/nginx/conf/conf.d # 将容器中的 html 文件夹复制到宿主机 docker cp nginxtest:/usr/share/nginx/html /etc/docker/nginx

查看复制到本地的配置文件

bash
# 在服务器安装 tree [root@10-60-55-35 ~]# sudo yum install tree #查看/etc/docker/nginx 下的文件结构 [root@10-60-55-35 ~]# tree /etc/docker/nginx /etc/docker/nginx ├── conf │   ├── conf.d │   │   └── default.conf │   └── nginx.conf ├── html │   ├── 50x.html │   └── index.html └── logs

删除运行的容器

bash
docker rm -f nginxtest

4、创建nginx容器并运行

nginx容器运行命令:

bash
docker run \ -p 80:80 \ --name nginxtest \ -v /etc/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /etc/docker/nginx/conf/conf.d:/etc/nginx/conf.d \ -v /etc/docker/nginx/logs:/var/log/nginx \ -v /etc/docker/nginx/html:/usr/share/nginx/html \ --privileged=true \ -d nginx:latest

参数说明:

参数说明
-p 80:80将容器的 80(后面那个) 端口映射到主机的 80(前面那个) 端口
–name nginxtest启动容器的名字
-v /etc/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf挂载nginx.conf配置文件
-v /etc/docker/nginx/conf/conf.d:/etc/nginx/conf.d \挂载nginx配置文件
-v /etc/docker/nginx/logs:/var/log/nginx \挂载nginx日志文件
-v /etc/docker/nginx/html:/usr/share/nginx/html \挂载nginx内容
nginx
本地运行的版本
-d后台运行

查看容器运行情况:

https://image.myxuechao.com/docker/47.png

5、访问测试

访问 http://ip

,查看页面是否正常。

https://image.myxuechao.com/docker/48.png

如果想修改页面内容,修改本地数据卷 /etc/docker/nginx/html

重启 nginx 容器,再次访问nginx容器。

bash
docker restart nginxtest
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:LiuXueChao

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!