概述
对于大多数应用类(非操作系统类)的镜像而言,其使用的步骤常常如下所示:
- 搜索镜像
- pull 拉取镜像
- 查看镜像确定版本
- 使用镜像生成容器实例(服务需要进行端口映射,常见应用使用套接字进行连接)
- 可能需要修改相关的配置文件
- 停止容器
- 移除容器
- 移除镜像
这里以常见的 Tomcat 和 MySQL 来说明。
Tomcat
Shell > docker search tomcat
Shell > docker pull tomcat:latest
# 通过输出信息,知道了 Tomcat 的版本为 11.0.22
Shell > docker inspect tomcat:latest
...
"TOMCAT_VERSION=11.0.22",
...
# 使用镜像生成容器实例也是固定的写法
Shell > docker run -d --name="tomcat-v11" -p 8080:8080 tomcat:latest
Shell > docker ps
配置 webapps 目录
此时就能直接访问了吗?并不是。根据官方的说明,这时候使用浏览器访问 http://192.168.100.20:8080 会返回 404 状态码,因为默认情况下没有加载 webapps。
You can then go to http://localhost:8080 or http://host-ip:8080 in a browser (noting that it will return a 404 since there are no webapps loaded by default).
需要执行以下的复制操作,让 /usr/local/tomcat/webapps/ 目录包含一些特定的文件与目录:
Shell > docker exec -it tomcat-v10-1 /bin/bash
root@554063696b31:/usr/local/tomcat# ls -l
total 232
drwxr-xr-x 2 root root 4096 May 5 23:14 bin
-rw-r--r-- 1 root root 26826 May 1 18:29 BUILDING.txt
drwxr-xr-x 1 root root 4096 Jun 1 13:14 conf
-rw-r--r-- 1 root root 8626 May 1 18:29 CONTRIBUTING.md
-rw-r--r-- 1 root root 30936 May 5 23:13 filtered-KEYS
drwxr-xr-x 2 root root 4096 May 5 23:13 lib
-rw-r--r-- 1 root root 60517 May 1 18:29 LICENSE
drwxrwxrwt 1 root root 4096 Jun 1 13:14 logs
drwxr-xr-x 2 root root 4096 May 5 23:13 native-jni-lib
-rw-r--r-- 1 root root 2333 May 1 18:29 NOTICE
-rw-r--r-- 1 root root 3224 May 1 18:29 README.md
-rw-r--r-- 1 root root 6470 May 1 18:29 RELEASE-NOTES
-rw-r--r-- 1 root root 16114 May 1 18:29 RUNNING.txt
drwxrwxrwt 2 root root 4096 May 5 23:13 temp
-rw-r--r-- 1 root root 32010 May 5 23:13 upstream-KEYS
drwxr-xr-x 2 root root 4096 May 5 23:13 webapps
drwxr-xr-x 7 root root 4096 May 1 18:29 webapps.dist
drwxrwxrwt 2 root root 4096 May 1 18:29 work
root@554063696b31:/usr/local/tomcat# ls -l webapps
total 0
root@554063696b31:/usr/local/tomcat# cp -pr webapps.dist/* webapps/
root@554063696b31:/usr/local/tomcat# exit
再次访问:

包含角色和用户
默认情况下,容器实例内的 /usr/local/tomcat/conf/tomcat-users.xml 文件未包含任何角色和用户,需要使用者去修改该文件的内容:
root@554063696b31:/usr/local/tomcat# apt-get update
root@554063696b31:/usr/local/tomcat# apt-get -y install vim
...
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="tomcat" password="TomcatVersion11" roles="tomcat,roles,manager-gui,manager-script,manager-jmx"/>
</tomcat-users>
注释掉 Value 标签
注释掉容器实例里 /usr/local/tomcat/webapps/manager/META-INF/context.xml 文件的 Value 标签。
...
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
...
重启 Tomcat 容器实例,以完成修改操作:
Shell > docker restart tomcat-v11
MySQL
也是一样的操作步骤:
Shell > docker pull mysql:latest
Shell > docker inspect mysql:latest
...
"MYSQL_VERSION=9.7.0-1.el9",
...
- 众所周知,MySQL 程序默认占用 3306 端口,因此我们在生成容器实例时需要指定端口映射
- 除此之外,我们还需要指定 MySQL 的 root 用户的密码
- 对 MySQL 数据目录使用数据卷
- 为了防止出现中文字符的乱码,需要:
- 指定默认的字符集(utf8mb4)
- 指定校验规则(utf8mb4_unicode_ci),与字符集匹配
Shell > docker run -d -p 3306:3306 --name=mysql9 --privileged=true \
-v /docker/mysql/data/:/var/lib/mysql/:rw -e MYSQL_ROOT_PASSWORD=338922549 mysql:latest \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
Shell > docker ps
Shell > docker exec -it mysql9 /bin/bash
bash-4.4# mysql -u root --password='338922549'
mysql> show variables like '%server%';
+---------------------------------+--------------------------------------+
| Variable_name | Value |
+---------------------------------+--------------------------------------+
| character_set_server | utf8mb4 |
| collation_server | utf8mb4_unicode_ci |
| immediate_server_version | 999999 |
| innodb_dedicated_server | OFF |
| innodb_ft_server_stopword_table | |
| original_server_version | 999999 |
| server_id | 1 |
| server_id_bits | 32 |
| server_memory | 0 |
| server_uuid | c9c49516-5dc0-11f1-b2b0-0242ac110002 |
+---------------------------------+--------------------------------------+
10 rows in set (0.005 sec)
这里 -e 中的 "e" 表示 env,即 MySQL 当中的环境变量。
在 Docker 版的 MySQL 中:
- /var/lib/mysql/ - MySQL 初始化成功之后的数据目录(datadir)
- /etc/my.cnf - MySQL 的配置文件
若要查看该容器实例有关日志方面的消息,请执行以下命令:
Shell > docker logs mysql9
版权声明:「自由转载-保持署名-非商业性使用-禁止演绎 3.0 国际」(CC BY-NC-ND 3.0)
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论










