制作自己的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链接查看,账户信息系如下:

 

posted @ 2020-02-17 18:01  QiaoZhi  阅读(1832)  评论(0编辑  收藏  举报