摘要:本文介绍通过 Docker 安装部署常用软件 Tomcat、mysql 和 nginx 。
一、Tomcat 安装
1、查找镜像
Tomcat 镜像可以通过访问 docker hub 或者通过命令 docker search
来查找。
示例:通过 docker hub 查找 Tomcat 镜像。
使用命令 docker search tomcat
进行镜像搜索。
2、镜像拉取和查看
镜像拉取:
docker pull tomcat
查看镜像:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest fb5657adc892 7 months ago 680MB
3、运行 tomcat 容器
运行 tomcat 命令如下:
docker run -d --name mytomcat -p 8080:8080 tomcat:latest
查看 tomcat 容器运行状态:
docker ps
4、访问 tomcat 首页
访问 http://ip:8080 验证容器运行是否正常。
由于 Tomcat 10 版本猫主页位置内容变更,所以进入容器需要修改主页目录内容。
# 进入 tomcat 容器
docker exec -it mytomcat /bin/bash
# 主页内容在 webapps.list 中,而我们访问的路径在 webapps 目录,所以需要复制 webapps.list 目录下的文件内容到 webapps 目录下。
root@f96e06103310:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work
# 复制
root@f96e06103310:/usr/local/tomcat# cp -r webapps.dist/* webapps/
再次访问 http://ip:8080 验证容器运行是否正常。
5、附加内容:tomcat 8 版本安装
tomcat 8 版本无需修改主页,运行命令如下:
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
注意,此镜像无需额外pull
,本地无此镜像,会自动pull
该镜像。
二、mysql 安装
1、查找镜像
mysql 镜像可以通过访问 docker hub 来查找。
示例:通过 docker hub 查找 mysql:5.7
镜像。
2、镜像拉取和查看
镜像拉取:
docker pull mysql:5.7
查看镜像:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 c20987f18b13 7 months ago 448MB
3、运行 mysql 容器
(1) 运行 mysql 命令如下:
docker run -d -p 3306:3306 \
--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 \
--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 容器运行状态:
docker ps
4、mysql 配置文件修改
(1) my.cnf 文件修改,解决中文字符乱码文件。
在本地 /whb/mysql/conf
路径下新建文件my.cnf
,内容如下。
[root@localhost ~]# cat /whb/mysql/conf/my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
(2) 重启 mysql 容器,并查看字符编码
重启容器:
docker restart mysql
查看字符编码:
# 进入 mysql 容器
docker exec -it mysql /bin/bash
# 登录 mysql ,密码 123456
root@12d852a52332:/# mysql -u root -p
Enter password:
# 查看 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、创建数据库,并插入数据
# 创建数据库 whbblog
mysql> create database whbblog;
Query OK, 1 row affected (0.00 sec)
# 使用数据库 whbblog
mysql> use whbblog;
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,'whb');
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、附加测试
问:删除容器,再次创建容器挂载数据卷,查看数据是否存在?
答:此处实验内容省略,数据还在。
三、nginx 安装
1、查找镜像
nginx 镜像可以通过访问 docker hub 来查找。
示例:通过 docker hub 查找 nginx
镜像。
2、镜像拉取和查看
命令 | 描述 |
---|---|
docker pull nginx | 下载最新版Nginx镜像 (其实此命令就等同于 : docker pull nginx:latest ) |
docker pull nginx:xxx | 下载指定版本的Nginx镜像 (xxx指具体版本号) |
镜像拉取:
docker pull nginx
查看镜像:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 7 months ago 141MB
3、创建 nginx 配置文件
启动前需要先创建 nginx 外部挂载的配置文件 /home/nginx/conf/nginx.conf
,之所以要先创建 , 是因为 nginx 本身容器只存在 /etc/nginx
目录 , 本身就不创建 nginx.conf
文件,当服务器和容器都不存在 nginx.conf
文件时, 执行启动命令的时候 docker 会将 nginx.conf
作为目录创建 , 这并不是我们想要的结果 。
# 创建挂载目录
mkdir -p /home/nginx/conf
mkdir -p /home/nginx/log
mkdir -p /home/nginx/html
容器中的 nginx.conf
文件和 conf.d
文件夹复制到宿主机。
# 生成容器
docker run --name nginx -d nginx
# 将容器 nginx.conf 文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/nginx.conf
# 将容器 conf.d 文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /home/nginx/conf/conf.d
# 将容器中的 html 文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /home/nginx
查看复制到本地的配置文件
[root@localhost ~]# tree /home/nginx
/home/nginx
├── conf
│ ├── conf.d
│ │ └── default.conf
│ └── nginx.conf
├── html
│ ├── 50x.html
│ └── index.html
└── log
删除运行的容器
docker rm -f nginx
4、创建nginx容器并运行
nginx容器运行命令:
docker run \
-p 80:80 \
--name nginx \
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /home/nginx/log:/var/log/nginx \
-v /home/nginx/html:/usr/share/nginx/html \
--privileged=true \
-d nginx:latest
参数说明:
参数 | 说明 |
---|---|
-p 80:80 | 将容器的 80(后面那个) 端口映射到主机的 80(前面那个) 端口 |
–name nginx | 启动容器的名字 |
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf | 挂载nginx.conf配置文件 |
-v /home/nginx/conf/conf.d:/etc/nginx/conf.d | 挂载nginx配置文件 |
-v /home/nginx/log:/var/log/nginx | 挂载nginx日志文件 |
-v /home/nginx/html:/usr/share/nginx/html | 挂载nginx内容 |
nginx:latest | 本地运行的版本 |
-d | 后台运行 |
查看容器运行情况:
5、访问测试
访问 http://ip:port ,查看页面是否正常。
修改本地数据卷 /home/nginx/html/index.html
重启 nginx 容器,再次访问nginx容器。
docker restart nginx
请问 这是什么程序源码啊