制作自己的javaweb镜像
1.制作自己的基于tomcat、mysql的镜像
1.拉取tomcat镜像并基于tomcat构造自己的镜像
tomcat镜像的运行需要用到java,所以tomcat的镜像包含了JDK,我们不用单独拉取JDK。
(1)到网站 https://c.163.com/hub#/library/search?keyword=tomcat 查找tomca镜像
(2)拉取tomcat镜像
Administrator@MicroWin10-1535 MINGW64 /e/docker/dockerTest/dockertest3 $ docker pull hub.c.163.com/library/tomcat:latest
查看tomcat镜像:
Administrator@MicroWin10-1535 MINGW64 /e/docker/dockerTest/dockertest3 $ docker images|grep tomcat hub.c.163.com/library/tomcat latest 72d2be374029 2 years ago 292MB
(3)准备一个war包(JavaWeb项目):
Administrator@MicroWin10-1535 MINGW64 /e/docker/dockerTest/dockertest3 $ pwd /e/docker/dockerTest/dockertest3 Administrator@MicroWin10-1535 MINGW64 /e/docker/dockerTest/dockertest3 $ ls Dockerfile ssm.war
ssm.war是一个SSM项目。用到mysql数据库。
(4)编写Dockerfile
我们到tomcat查看镜像说明文档:文档中给了镜像中默认的一些环境变量。
编写Dockerfile,位置与ssm.war在同一目录。内容如下:
Administrator@MicroWin10-1535 MINGW64 /e/docker/dockerTest/dockertest3 $ ls Dockerfile SSM.war Administrator@MicroWin10-1535 MINGW64 /e/docker/dockerTest/dockertest3 $ cat Dockerfile FROM hub.c.163.com/library/tomcat MAINTAINER qlq COPY ssm.war /usr/local/tomcat/webapps
Dockerfile中指定镜像基于tomcat镜像,将ssm.war拷贝到tomcat/webapps/目录下,也就是部署目录。
(5)build镜像
Administrator@MicroWin10-1535 MINGW64 /e/docker/dockerTest/dockertest3 $ docker build -t ssm:latest . Sending build context to Docker daemon 57.06MB Step 1/3 : FROM hub.c.163.com/library/tomcat ---> 72d2be374029 Step 2/3 : MAINTAINER qlq ---> Running in d15ff3ff1d5b Removing intermediate container d15ff3ff1d5b ---> b4158a610aa9 Step 3/3 : COPY ssm.war /usr/local/tomcat/webapps ---> e8b3d5931a30 Successfully built e8b3d5931a30 Successfully tagged ssm:latest SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
(6)查看自己制作的镜像
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ssm latest e8b3d5931a30 11 minutes ago 350MB hello_dockerfile latest 779eab29d6dc 3 days ago 5.59MB alpine latest e7d92cdc71fe 4 weeks ago 5.59MB ubuntu latest ccc6e87d482b 4 weeks ago 64.2MB hello-world latest fce289e99eb9 13 months ago 1.84kB hub.c.163.com/library/tomcat latest 72d2be374029 2 years ago 292MB hub.c.163.com/library/nginx latest 46102226f2fd 2 years ago 109MB
2. 启动自己制作的镜像
$ docker run -d -p 8080:8080 ssm a6dc2ffbfa1d81c883a47031a39fb31ab689378c3415bcfabd75db8acec28505
浏览器访问:可以看到tomcat已经启动成功
3.拉取mysql镜像并启动
1.拉取mysql镜像
docker pull hub.c.163.com/library/mysql:latest
2.查看mysql镜像使用手册
查看官方文档支持的变量如下:
3.启动mysql
$ docker run --name mysql-ssm -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ssm -d hub.c.163.com/library/mysql 87dac70556a4466fbf452436cb0a3bf19c9915fa6201b6b9b28680f922cb9823
-e MYSQL_ROOT_PASSWORD 指定root的密码。-e MYSQL_DATABASE=ssm指定创建的数据库实例。
4.进入mysql容器查看信息(需要从虚拟linux主机进入)
Administrator@MicroWin10-1535 MINGW64 /e/docker/dockerTest/dockertest3 $ docker-machine ssh #进入虚拟linux机器 ( '>') /) TC (\ Core is distributed with ABSOLUTELY NO WARRANTY. (/-_--_-\) www.tinycorelinux.net docker@default:~$ docker ps #查看容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5a87159fb407 hub.c.163.com/library/mysql "docker-entrypoint.s…" 4 minutes ago Up 3 minutes 3306/tcp mysql-ssm 2fd7415e59c1 ssm "catalina.sh run" 16 hours ago Up 16 hours 0.0.0.0:8080->8080/tcp infallible_kowalevski docker@default:~$ docker exec -it 5a bash #进入容器 root@5a87159fb407:/# ls bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@5a87159fb407:/# mysql -u root -p #登录mysql Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.18 MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> status #查看mysql状态以及编码集 -------------- mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper Connection id: 3 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.7.18 MySQL Community Server (GPL) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 UNIX socket: /var/run/mysqld/mysqld.sock Uptime: 3 min 0 sec Threads: 1 Questions: 6 Slow queries: 0 Opens: 105 Flush tables: 1 Open tables: 98 Queries per second avg: 0.033 --------------
发现mysql的编码集用的不是UTF8,如果修改可以按照linux修改mysql编码集的方式进行修改,但是mysql镜像制作者应该考虑到这个问题。
5.查看官方文档
可以看到官方有默认启动是u8的语法,如下:(指定root的密码是123456,指定创建的数据库实例是ssm,向外部暴露端口是3306。并且指定编码集。)
docker run --name mysql-ssm -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ssm -d -p 3306:3306 hub.c.163.com/library/mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
接下来进入到容器之后查看mysql状态:
docker@default:~$ docker exec -it 4f bash #进入容器 root@4fb26410b8b8:/# mysql -uroot -p #登录mysql Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.18 MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> status #查看状态 -------------- mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper Connection id: 3 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.7.18 MySQL Community Server (GPL) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: latin1 Conn. characterset: latin1 UNIX socket: /var/run/mysqld/mysqld.sock Uptime: 14 sec Threads: 1 Questions: 6 Slow queries: 0 Opens: 105 Flush tables: 1 Open tables: 98 Queries per second avg: 0.428 -------------- mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | ssm | | sys | +--------------------+ 5 rows in set (0.00 sec) mysql>
6.重启上面ssm镜像并且浏览器访问服务
docker@default:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 517991e2ed6a hub.c.163.com/library/mysql "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp mysql-ssm docker@default:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ssm latest fbc765e38da8 16 hours ago 350MB hello_dockerfile latest 779eab29d6dc 3 days ago 5.59MB alpine latest e7d92cdc71fe 4 weeks ago 5.59MB ubuntu latest ccc6e87d482b 4 weeks ago 64.2MB hello-world latest fce289e99eb9 13 months ago 1.84kB hub.c.163.com/library/tomcat latest 72d2be374029 2 years ago 292MB hub.c.163.com/library/nginx latest 46102226f2fd 2 years ago 109MB hub.c.163.com/library/mysql latest 9e64176cd8a2 2 years ago 407MB docker@default:~$ docker run -d -p 8080:8080 ssm #启动自己的镜像 a5f8dc6e1ad26d4b4403ddaa3e80b2ff8595fd2257e055daa2d3ceddee1dd1f9 docker@default:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a5f8dc6e1ad2 ssm "catalina.sh run" 11 seconds ago Up 8 seconds 0.0.0.0:8080->8080/tcp wonderful_murdock 517991e2ed6a hub.c.163.com/library/mysql "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:3306->3306/tcp mysql-ssm docker@default:~$
浏览器访问:(可以正常登录,并且数据库也正常,可以插入中文)
2.上面的SSM镜像发布到阿里云镜像仓库
1.登录阿里云创建仓库
2.命令行操作推送到仓库
1.登录阿里云 Docker Registry
docker@default:~$ docker login --username={username} registry.cn-hangzhou.aliyuncs.com Password: WARNING! Your password will be stored unencrypted in /home/docker/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
2.将镜像推送到Registry
(1)给镜像打tag
sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/qlq_repository/ssm_tomcat:[镜像版本号]
例如:
docker tag fbc765e38da8 registry.cn-hangzhou.aliyuncs.com/qlq_repository/ssm_tomcat:latest
(2)推送到阿里云仓库
docker push registry.cn-hangzhou.aliyuncs.com/qlq_repository/ssm_tomcat:[镜像版本号]
例如:
docker@default:~$ docker push registry.cn-hangzhou.aliyuncs.com/qlq_repository/ssm_tomcat:latest The push refers to repository [registry.cn-hangzhou.aliyuncs.com/qlq_repository/ssm_tomcat] 2a0a100e3652: Pushed f79699072473: Pushed 8cb01d738d7e: Pushed 7c522249bcb2: Pushed ba1b854af66a: Pushed 3f7a86f1643e: Pushed f55bf32d0637: Pushed 8394eb34d9c2: Pushed 3c24c63114ae: Pushed 2dd32f40dedd: Pushed 6327a1518771: Pushed 995042ba10ad: Pushed fe40be59465f: Pushed cf4ecb492384: Pushed latest: digest: sha256:2f61e80d9870f63ecf0fed645fedb9dc7a4452338d967fdc4d4f13825419eb19 size: 3257
3.从阿里云镜像仓库查看版本信息:
补充: 用utf8mb4编码集建的数据库报错 Specified key was too long; max key length is 767 bytes, 解决采用数据库编码集采用utf8、数据库校对规则采用utf8_general_ci。如下:
docker run --name mysql-ssm -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=rtecm -d -p 3306:3306 hub.c.163.com/library/mysql --character-set-server=utf8 --collation-server=utf8_general_ci
补充:拉取oracle镜像
(1)在https://c.163.com/hub#/library/search?keyword=oracle上面搜索oracle相关镜像,或者直接docker search搜索镜像。我习惯在网上搜索。
(2)拉取该镜像
docker pull hub.c.163.com/springwen/oracle-xe-11g:latest
(3)运行该镜像
docker run -d -p 1521:1521 hub.c.163.com/springwen/oracle-xe-11g:latest
(4)接下来进入该容器sqlplus链接查看,账户信息系如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2019-02-17 shiro-redis实现session存储到redis