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

  • 相关阅读:
    Linux中/etc目录下passwd和shadow文件
    Linux基本命令
    Linux目录结构说明与基本操作
    如何用虚拟机VMware Workstation安装CentOs-7
    VPP源码分析及流程图
    VPP环境搭建及配置
    【转】智能指针的交叉引用问题及解决方法
    二叉树的前 中 后 层序遍历
    排序算法
    C和C++的一些区别
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/12322861.html
Copyright © 2020-2023  润新知