Docker基础篇09 — 常见应用类镜像的使用

概述

对于大多数应用类(非操作系统类)的镜像而言,其使用的步骤常常如下所示:

  • 搜索镜像
  • 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

再次访问:

Tomcat-1

包含角色和用户

默认情况下,容器实例内的 /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
Avatar photo

关于 陸風睿

GNU/Linux 从业者、开源爱好者、技术钻研者,撰写文档既是兴趣也是工作内容之一。Q - "281957576";WeChat - "jiulongxiaotianci",Github - https://github.com/jimcat8
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇