千家信息网

制做docker镜像

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,1、制做JAVA运行环境镜像我的基础镜像是基于官网centos 7.2版本制作,没有可以提前下载好#docker pull docker.io/centos[root@R210 ~]# mkdir -
千家信息网最后更新 2025年02月02日制做docker镜像

1、制做JAVA运行环境镜像

我的基础镜像是基于官网centos 7.2版本制作,没有可以提前下载好

#docker pull docker.io/centos

[root@R210 ~]# mkdir -p /opt/Dockerfile/JRE1.7

[root@R210 ~]# cd /opt/Dockerfile/JRE1.7

[root@R210 jre1.7]# ls

Dockerfile server-jre-7u80-linux-x64.tar.gz


[root@R210 jre1.7]# cat Dockerfile

FROM centos:latest

MAINTAINER yy ENV JAVA_VERSION "7u80"ENV JDK_VERSION "1.7.0_80"RUN rpm --rebuilddb \    && yum --setopt=tsflags=nodocs -y install \    net-tools \    && rm -rf /var/cache/yum/* && yum clean all#RUN rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7 \#    && yum update && yum install net-tools -y \RUN mkdir -p /usr/lib/jvm COPY server-jre-${JAVA_VERSION}-linux-x64.tar.gz /usr/lib/jvm/server-jre-${JAVA_VERSION}-linux-x64.tar.gz RUN cd /usr/lib/jvm \    && tar -zxvf server-jre-${JAVA_VERSION}-linux-x64.tar.gz \    && rm -rf /usr/lib/jvm/server-jre-${JAVA_VERSION}-linux-x64.tar.gz \    && ln -s /usr/lib/jvm/jdk${JDK_VERSION}/bin/java /bin/ \    && cd /usr/lib/jvm/jdk${JDK_VERSION} \    && find . -type f -name '*.html' -delete \    && find . -type f -name 'COPYRIGHT' -delete \    && find . -type f -name 'LICENSE' -delete \    && find . -type f -name 'NOTICE' -delete \    && find . -type f -name '3RDPARTY' -delete \    && find . -type f -name '*.txt' -delete \    && find . -type f -name '*.bat' -delete \    #jre包可以再做精简




2.制作生产环境Tomcat镜像

[root@R210 ~]# mkdir -p /opt/Dockerfile/tomcat7

[root@R210 ~]# cd /opt/Dockerfile/tomcat7

[root@R210 tomcat7]# ls

apache-tomcat-7.0.70.tar.gz Dockerfile

[root@R210 tomcat7]# cat Dockerfile

FROM java7:7u80MAINTAINER yyENV TOMCAT_VERSION 7.0.70ENV CATALINA_HOME /tomcatENV APP_DIR ${CATALINA_HOME}/webapps/RUN rpm --rebuilddb \    && yum --setopt=tsflags=nodocs -y install \    apr tomcat-native \    && rm -rf /var/cache/yum/* && yum clean all#RUN wget -q https://archive.apache.org/dist/tomcat/tomcat-${TOMCAT_MAJOR_VERSION}/v${TOMCAT_MINOR_VERSION}/bin/apache-tomcat-${TOMCAT_MINOR_VERSION}.tar.gz#https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.70/bin/apache-tomcat-7.0.70.tar.gzCOPY apache-tomcat-${TOMCAT_VERSION}.tar.gz apache-tomcat-{TOMCAT_VERSION}.tar.gzRUN tar zxf apache-tomcat-*.tar.gz && \    rm apache-tomcat-*.tar.gz && \    mv apache-tomcat* tomcat && \    rm -rf tomcat/webapps/* && \    sed -i '/protocol="AJP\/1.3"/d' /tomcat/conf/server.xml    EXPOSE 8080 ENTRYPOINT ["/tomcat/bin/catalina.sh","run"]ONBUILD ADD . ${APP_DIR}

制作镜像

[root@R210 tomcat7]#docker build -t tomcat7:7.0.70 .


从镜像启动一个tomcat容器,把测试程序部署到/www/app1/webapps下从浏览器访问

[root@R210 ]# docker run -d -p 8002:8080 --name mytomcat7 -v /www/app1/webapps/:/tomcat/webapps tomcat7:7.0.70


3.制作数据库mariadb镜像


[root@XSMM mk_mariadb]# ls

Dockerfile  mariadb-func.sh  mariadb.repo  run.sh


[root@XSMM-WEB mk_mariadb]# cat Dockerfile

FROM centos:latestMAINTAINER yyENV TZ "Asia/Shanghai"ENV TERM xtermCOPY mariadb.repo /etc/yum.repos.d/ RUN \    yum update -y && \    yum install -y epel-release && \    yum install -y MariaDB-server hostname net-tools pwgen && \    yum clean all && \    rm -rf /var/lib/mysql/* && \    rm -rf /var/cache/yum/*COPY mariadb-func.sh   /COPY run.sh /RUN chmod 755 *.shVOLUME ["/var/lib/mysql"]EXPOSE 3306CMD ["/run.sh"]



[root@XSMM-WEB mk_mariadb]# cat mariadb-func.sh

#!/bin/sh########################################################## 循环检测数据库进程是否正常启动、服务是否可用          ##########################################################function wait_for_db() {  set +e    echo "等待数据库启动..."  while true; do    if grep "ready for connections" $ERROR_LOG; then      break;    else      echo "继续等待数据库启动完成..." && sleep 1    fi  done    set -e}########################################################## 关闭数据库进程#########################################################function terminate_db() {  local pid=$(cat $VOLUME_HOME/mysql.pid)  echo "捕获进程信号&关闭数据库进程..."  kill -TERM $pid    while true; do    if tail $ERROR_LOG | grep -s -E "mysqld .+? ended" $ERROR_LOG; then         break;    else sleep 0.5;    fi  done}


##########################################################如果数据目录为空,调用 mysql_install_db 脚本生成默认库# 全局变量:#   $VOLUME_HOME#   $ERROR_LOG#########################################################function install_db() {  if [ ! -d $VOLUME_HOME/mysql ]; then    echo "=> 数据目录 $VOLUME_HOME为空,数据库未初始化..."    echo "=> 正在安装 MariaDB..."    mysql_install_db --user=mysql > /dev/null 2>&1    echo "=> MariaDB 安装完成!"  else    echo "=> 使用已经存在数据目录文件."  fi  ########################################################## 移除之前容器运行留下的日志文件,保留当前容器生成的日志#########################################################    if [ -f $ERROR_LOG ]; then    echo "----------------- Previous error log -----------------"    tail -n 20 $ERROR_LOG    echo "----------------- Previous error log ends -----------------" && echo    mv -f $ERROR_LOG "${ERROR_LOG}.old";  fi  touch $ERROR_LOG && chown mysql $ERROR_LOG}
########################################################## 创建用户# 变量:#   $MARIADB_USER#   $MARIADB_PASS#########################################################function create_mysql_user() {  echo "Creating DB admin user..." && echo  local users=$(mysql -s -e "SELECT count(User) FROM mysql.user WHERE User='$MARIADB_USER'")  if [[ $users == 0 ]]; then    echo "=> Creating MariaDB user '$MARIADB_USER' with '$MARIADB_PASS' password."    mysql -uroot -e "CREATE USER '$MARIADB_USER'@'%' IDENTIFIED BY '$MARIADB_PASS'"  else    echo "=> User '$MARIADB_USER' exists, updating its password to '$MARIADB_PASS'"    mysql -uroot -e "SET PASSWORD FOR '$MARIADB_USER'@'%' = PASSWORD('$MARIADB_PASS')"  fi;    mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO '$MARIADB_USER'@'%' WITH GRANT OPTION"  echo "========================================================================"  echo "    可以使用以下命令连接 MariaDB Server:                                "  echo "    mysql -u$MARIADB_USER -p$MARIADB_PASS -h                      "  echo "                                                                        "  echo "    出于安全考虑,应该修改上述密码,root可以在本地无密码登陆建议设置密码  "  echo "========================================================================"}
########################################################## 显示数据库状态#########################################################function show_db_status() {  echo "Showing DB status..." && echo  mysql -uroot -e "status"}########################################################## 清理数据库,删除test库和无密码用户#########################################################function secure_and_tidy_db() {  echo "删除test库和无密码用户..."  mysql -uroot -e "DROP DATABASE IF EXISTS test"  mysql -uroot -e "DELETE FROM mysql.user where User = ''"  ########################################################## 设置root用户只能从本地登陆#########################################################  mysql -uroot -e "DELETE FROM mysql.user where User = 'root' AND Host NOT IN ('127.0.0.1','::1')"  mysql -uroot -e "DELETE FROM mysql.proxies_priv where User = 'root' AND Host NOT IN ('127.0.0.1','::1')"  echo "设置root用户只能从本地登陆完成!"}


[root@XSMM-WEB mk_mariadb]# cat run.sh

#!/bin/bashset -eset -usource ./mariadb-func.sh# 用户指定数据库用户名,不提供默认为mysql,并随机生成密码MARIADB_USER=${MARIADB_USER:="mysql"}MARIADB_PASS=${MARIADB_PASS:-$(pwgen -s 12 1)}# 指定其它必要环境变量 VOLUME_HOME="/var/lib/mysql"ERROR_LOG="$VOLUME_HOME/$HOSTNAME.err"MYSQLD_PID_FILE="$VOLUME_HOME/$HOSTNAME.pid"# Trap INT and TERM signals to do clean DB shutdowntrap terminate_db SIGINT SIGTERM#调用install_db函数install_db# 输出所有信息到终端tail -F $ERROR_LOG &  #将数据库启动到后台运行并记录PID/usr/bin/mysqld_safe & MYSQLD_SAFE_PID=$!wait_for_dbsecure_and_tidy_dbshow_db_statuscreate_mysql_user#不在终止这个脚本直到数据库进程mysqld_safe正常退出wait $MYSQLD_SAFE_PID


[root@XSMM-WEB mk_mariadb]# cat mariadb.repo

# MariaDB 10.1 CentOS repository list - created 2016-01-06 02:19 UTC# http://mariadb.org/mariadb/repositories/[mariadb]name = MariaDBbaseurl = http://yum.mariadb.org/10.1/centos7-amd64gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDBgpgcheck=1

#创建镜像

[root@XSMM mk_mariadb]# docker build -t mariadb10 .

#docker run --name mydb -d -p 3306:3306 -v /mydata/mysql/:/var/lib/mysql mariadb10

... ---> Running in 35b0398fbeb8 ---> d353c6e1e33bRemoving intermediate container 35b0398fbeb8Step 12 : CMD /run.sh ---> Running in 7248c5e14559 ---> 538b64e6987dRemoving intermediate container 7248c5e14559Successfully built 538b64e6987d

[root@XSMM]# docker p_w_picpaths

REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZEmariadb10                     latest              538b64e6987d        4 minutes ago       1.111 GBcentos7-ssh                   latest              104c3f5a710c        7 days ago          504.1 MBcentos6                       latest              ba7961b610e2        7 days ago          194.6 MBdocker.io/tomcat              latest              3c90608ca58a        8 days ago          357.4 MBdocker.io/centos/redis        latest              a4b79297fc55        2 weeks ago         405.6 MBdocker.io/centos              latest              970633036444        5 weeks ago         196.7 MB

#从镜像生成一个mariadb容器

[root@XSMM]# docker run --name mydb -d -p 3306:3306 -v /mydata/mysql/:/var/lib/mysql mariadb10

7eb4b284406bfb497ee0addf8cda153ab91013f3f9fc3357d856c68ea8a6e658

#查看容器日志

[root@XSMM]# docker logs mydb

=> 使用已经存在数据目录文件.等待数据库启动...继续等待数据库启动完成...160910 01:07:05 mysqld_safe Logging to '/var/lib/mysql/7eb4b284406b.err'.160910 01:07:05 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql...2016-09-10  1:07:06 139756268353664 [Note] /usr/sbin/mysqld: ready for connections.Version: '10.1.17-MariaDB'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MariaDB Server2016-09-10  1:07:06 139756268353664 [Note] /usr/sbin/mysqld: ready for connections.删除test库和无密码用户...设置root用户只能从本地登陆完成!Showing DB status...Creating DB admin user...=> Creating MariaDB user 'mysql' with 'tMEpSbAy0lIK' password.========================================================================    可以使用以下命令连接 MariaDB Server:                                    mysql -umysql -ptMEpSbAy0lIK -h                                                                                                  出于安全考虑,应该修改上述密码,root可以在本地无密码登陆建议设置密码  ========================================================================

[root@XSMM]# mysql -umysql -ptMEpSbAy0lIK

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

#连接数据测试

[root@XSMM]# mysql --protocol=tcp -umysql -ptMEpSbAy0lIK

Welcome to the MariaDB monitor.  Commands end with ; or \g.Your MariaDB connection id is 10Server version: 10.1.17-MariaDB MariaDB ServerCopyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> show databases;+--------------------+| Database        |+--------------------+| information_schema || mysql          || performance_schema |+--------------------+3 rows in set (0.01 sec)MariaDB [(none)]>


数据 数据库 密码 用户 镜像 容器 进程 登陆 目录 制作 生成 变量 文件 日志 环境 运行 安全 可以使 命令 建议 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发课程海报配色 曙光服务器管理器添加用户 服务器版pe系统 了解网络安全的基本知识手抄报 华硕固件vpn服务器 电脑软件开发主流环境 路由器提示dns服务器未响应 《大话数据库》.pdf 笔记本远程访问服务器在哪儿 数据库技术项目实践报告 咸阳市软件开发培训学校 服务器的status灯不亮了 上海基站软件开发部华为 天谕oppo渠道服服务器 软件开发程序员先学习哪种语音 多用户数据库优缺点 电脑本地服务器 路畅科技服务器关闭 嘉兴视频分布式存储数据库 互联网和电子科技是好还是坏 广东网络安全工程费用 北京仕达高科网络技术有限公司 戴尔服务器 标签 零洋网络技术有限公司怎么样 交大网络安全学院官网 广州编程软件开发哪家好 广州黄埔网络安全设备 山西放心软件开发服务品质保障 软件开发的规模风险有哪些 2021年党建网络安全
0