zoukankan      html  css  js  c++  java
  • 记录一个用于Demo演示的Docker镜像的实现步骤

    因工作需要,构造一个用于演示的多应用的Docker镜像,记录下其中的步骤和坑。

    需要依次安装Jdk、mysql、redis、nginx、6个java应用、3个react应用

    1. 安装基础镜像

    sudo docker pull docker.io/ubuntu
    sudo docker run -it containerId /bin/bash

    2. 进入容器安装必要依赖

    apt update
    apt install net-tools 
    apt install vim

    3. 安装Jdk

    apt install -y openjdk-8-jdk

    4. 安装Redis

    apt install -y  redis
    
    #设置redis相关配置
    vi /etc/redis/redis.conf 
    daemonize yes
    requirepass 123456

    #启动redis
    redis-server /etc/redis/redis.conf

    #访问redis
    redis-cli

    5. 安装Mysql

    apt install -y  mysql-server
    apt install -y  mysql-client

    6. 启动Mysql

    #检查mysql服务状态
    service mysql status 
    
    #启动mysql
    /etc/init.d/mysql start
    
    #停止mysql
    /etc/init.d/mysql stop

    7. 配置Mysql

    #初始化设置密码,按提示要求选择yes or no
    mysql_secure_installation 
    
    #进入mysql实例
    mysql -h localhost -u root -p123456
    #设置root账户,跟5.7之前不太一样 CREATE
    USER 'root'@'%' IDENTIFIED BY '123456'; grant all privileges on *.* to 'root'@'%'; flush privileges; #设置普通账户,root账户不允许远程访问,只好通过普通账户访问 CREATE USER 'user'@'%' IDENTIFIED BY '123456'; grant all privileges on *.* to 'user'@'%'; flush privileges;

    8. 安装Nginx

    apt install -y nginx
    
    #nginx配置项位置
    ll /etc/nginx/nginx.conf

    #启动nginx
    nginx

    9. 构造第一层基础镜像

    # 杀死所有进程
    kill nginxpid
    kill redispid
    /etc/init.d/mysql stop

    # 在容器外,对该运行的容器提交commit,创建了新镜像
    sudo docker commit -a "your name" -m "image name" containerId portal:v1

    10. 基于基础镜像加入应用程序

    # 运行基础镜像容器
    sudo docker run -it imageId /bin/bash
    
    # 在宿主机上,将应用程序从宿主机拷贝至容器内,其他的如sql脚本也类似导入进来
    sudo docker cp /home/portal.zip containerId:/home/resources
    
    # 在容器内建立相应java程序目录,解压java程序
    unzip portal.zip
    
    # 授权脚本执行能力
    chmod +x startup.sh

    11. 构建Dockerfile 最后执行的运行脚本,以启动多个程序,该startup.sh脚本放在/opt/下:

    #!/bin/sh 
    # 需要设置字符集,否则ubuntu默认的字符集是不支持中文的,会造成显示乱码 
    export LANG=C.UTF-8
    # 依次启动各个程序
    nginx
    redis-server /etc/redis/redis.conf
    /etc/init.d/mysql start
    
    sleep 15s
    
    cd /opt/datachannel/1/
    nohup java -server -Xmx256m -Xms256m -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -cp .:data-channel-1.0-SNAPSHOT.jar:./lib/* com.quality.dataChannel.Application >/dev/null 2>log &
    
    cd /opt/datachannel/2/
    nohup java -server -Xmx256m -Xms256m -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -cp .:data-channel-1.0-SNAPSHOT.jar:./lib/* com.quality.dataChannel.Application >/dev/null 2>log &
    
    cd /opt/datachannel/3/
    nohup java -server -Xmx256m -Xms256m -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -cp .:data-channel-1.0-SNAPSHOT.jar:./lib/* com.quality.dataChannel.Application >/dev/null 2>log &
    
    cd /mnt/portal-1
    nohup java -jar -Dname=portal-admin.jar  -Duser.timezone=Asia/Shanghai -Xms256M -Xmx256M -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection  portal-admin.jar >/dev/null 2>log &
    
    cd /mnt/portal-2
    nohup java -jar -Dname=portal-admin.jar  -Duser.timezone=Asia/Shanghai -Xms256M -Xmx256M -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection  portal-admin.jar >/dev/null 2>log &
    
    cd /mnt/portal-3
    nohup java -jar -Dname=portal-admin.jar  -Duser.timezone=Asia/Shanghai -Xms256M -Xmx256M -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection  portal-admin.jar >/dev/null 2>log &
    
    #加入一个循环,保持前台程序,防止docker挂掉 while [ true ]; do sleep 1 done

    12. 初始化数据库

    #在容器内设置字符集的环境变量
    export LANG=C.UTF-8
    
    #启动mysql
    /etc/init.d/mysql start
    
    #进入mysql
    mysql -h localhost -u root -p123456
    
    #创建数据库
    create database portal;
    
    #导入sql脚本
    source /home/resources/portal.sql

    13. 构建第二层镜像

    # 在各种初始化完成、应用程序安装好后,杀掉所有进程
    sudo docker commit -a "your name" -m "image name" containerId portal:v2

    14. 在宿主机目录下构造一个Dockerfile

    from portal:v2
    
    #开放端口
    expose 12000 12500 12502
    
    #执行启动程序
    cmd ["/opt/startup.sh"]

    15. 在Dockerfile目录下执行命令,创建最终镜像

    sudo docker build -t portal:v2.1 .

    16. 运行最终容器

    sudo docker run -it -d --name portal -p 12000:12000 -p 12500:12500 -p 12502:12502 portal:v2.1

    17. 其他常用容器执行命令

    #容器恢复运行
    sudo docker start containerId
    #重新进入容器
    sudo docker exec -it containerId /bin/bash
    #重启容器
    sudo docker restart containerId
    #监控容器资源消耗情况
    sudo docker stats
    #停止容器
    sudo docker stop
    containerId
    #删除容器
    sudo docker rm -f containerId
    #删除镜像
    sudo docker rmi imageId
    #查看全部容器
    sudo docker ps -a
    #查看活的容器
    sudo docker ps
    #镜像列表
    sudo docker images
    #查看容器内完整信息,如网络等
    sudo docker inspect containerId
    #查看容器日志
    sudo docker logs containerId



  • 相关阅读:
    时间选择器和日期选择器
    paip.c++ qt 项目工程互相引用的方法
    leetcode_question_85 Largest Rectangle in Histogram
    在VirtualBox虚拟机上采集Fedora15系统
    Oracle
    VC6.0调试大全
    oracle中的exists 和not exists 用法详解
    vi常用命令
    【虚拟化实战】容灾设计之四VPLEX
    CentOS6.3 安装配置 ant
  • 原文地址:https://www.cnblogs.com/hutao722/p/15742900.html
Copyright © 2011-2022 走看看