广告
返回顶部
首页 > 资讯 > 数据库 >制做docker镜像
  • 850
分享到

制做docker镜像

dockerdockerfiledock 2022-10-18 00:10:39 850人浏览 八月长安
摘要

1、制做JAVA运行环境镜像我的基础镜像是基于官网Centos 7.2版本制作,没有可以提前下载好#Docker pull docker.io/centos[root@R210 ~]# mkdir -p /

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:7u80
MAINTAINER yy
ENV TOMCAT_VERSION 7.0.70
ENV CATALINA_HOME /tomcat
ENV 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.gz
COPY apache-tomcat-${TOMCAT_VERSION}.tar.gz apache-tomcat-{TOMCAT_VERSION}.tar.gz
RUN 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:latest
MAINTAINER yy
ENV TZ "Asia/Shanghai"
ENV TERM xterm
COPY 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 *.sh
VOLUME ["/var/lib/mysql"]
EXPOSE 3306
CMD ["/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<host>                      "
  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/bash
set -e
set -u
source ./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 shutdown
trap terminate_db SIGINT SIGTERM
#调用install_db函数
install_db
# 输出所有信息到终端
tail -F $ERROR_LOG &  
#将数据库启动到后台运行并记录PID
/usr/bin/mysqld_safe & 
MYSQLD_SAFE_PID=$!
wait_for_db
secure_and_tidy_db
show_db_status
create_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 = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpGCheck=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
 ---> d353c6e1e33b
Removing intermediate container 35b0398fbeb8
Step 12 : CMD /run.sh
 ---> Running in 7248c5e14559
 ---> 538b64e6987d
Removing intermediate container 7248c5e14559
Successfully built 538b64e6987d

[root@XSMM]# docker p_w_picpaths

REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
mariadb10                     latest              538b64e6987d        4 minutes aGo       1.111 GB
centos7-ssh                   latest              104c3f5a710c        7 days ago          504.1 MB
centos6                       latest              ba7961b610e2        7 days ago          194.6 MB
docker.io/tomcat              latest              3c90608ca58a        8 days ago          357.4 MB
docker.io/centos/Redis        latest              a4b79297fc55        2 weeks ago         405.6 MB
docker.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 Server
2016-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<host>                      
                                                                        
    出于安全考虑,应该修改上述密码,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 10
Server version: 10.1.17-MariaDB MariaDB Server
Copyright (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)]>


您可能感兴趣的文档:

--结束END--

本文标题: 制做docker镜像

本文链接: https://www.lsjlt.com/news/34874.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 制做docker镜像
    1、制做JAVA运行环境镜像我的基础镜像是基于官网centos 7.2版本制作,没有可以提前下载好#docker pull docker.io/centos[root@R210 ~]# mkdir -p /...
    99+
    2022-10-18
    docker dockerfile dock
  • docker制作镜像
    从 rootfs 压缩包导入格式:docker import [选项] <文件>|<URL>|- [<仓库名>[:<标签>]]压缩包可以是本地文件、远程 Web 文件,甚至是从标准输入中得到。...
    99+
    2023-01-30
    镜像 docker
  • Docker二所镜像制作
    1、dockerfile 里不能有交互式命令。      FROM centos:6.9  加载镜像     &...
    99+
    2022-10-18
    docker 二所 制作
  • Docker中怎么样制作镜像
    小编给大家分享一下Docker中怎么样制作镜像,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言以制作CentOS镜像为例,讲述对镜像自定义,打包以及推送的远程仓...
    99+
    2023-06-25
  • CentOS7下怎么制作Docker镜像
    本篇内容介绍了“CentOS7下怎么制作Docker镜像”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Docker Image 的制作两种方...
    99+
    2023-06-28
  • 如何在shell制作Docker镜像
    小编给大家分享一下如何在shell制作Docker镜像,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!尝试在shell制作Docker镜像 $ ...
    99+
    2023-06-02
  • Docker制作镜像的完整过程
    目录前言创建步骤创建CentOS基础镜像创建容器并自定义以自定义容器创建新镜像保存、加载镜像tar包将镜像推送到远程仓库参考链接前言 以制作CentOS镜像为例,讲述对镜像自定义,打...
    99+
    2022-11-12
    Docker制作镜像 Docker 镜像制作
  • 怎么快速制作Redis Docker镜像
    这篇文章主要讲解了“怎么快速制作Redis Docker镜像”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么快速制作Redis Docker镜像”吧!镜像制作镜像越小,部署起来越方便。在这...
    99+
    2023-06-15
  • docker中怎么用build制作镜像
    在Docker中,可以使用`docker build`命令来制作镜像。 首先,在项目的根目录下创建一个名为`Dockerfile`的...
    99+
    2023-10-26
    docker
  • Docker镜像制作方法是什么
    Docker镜像制作方法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Docker Image 的制作两种方法方法 1:docker commit&n...
    99+
    2023-06-28
  • 使用docker制作分布式lnmp 镜像
    目录一、docker 分布式 lnmp 镜像制作1、运行Nginx、MySQL、PHP容器2、修改Nginx配置文件和PHP文件4、进行测试LNMP 是代表 Linux 系统下的 N...
    99+
    2022-11-12
    docker分布式lnmp 镜像 docker lnmp 镜像
  • android图像绘制(一)多种方法做图像镜像
    在android中做图像镜像有很多方法,今天算是学习了! 两种方法如下: 代码如下: //方法一 Matrix matrix = new Matrix(); matrix.p...
    99+
    2022-06-06
    方法 镜像 Android
  • docker封装镜像(PHP)
    一、环境介绍 操作系统:centos 7.9 cpu:4核心 内存:8GB docker版本:20.10.17 二、docker commit命令封装镜像 1、拉取centos 7.9镜像 注:需求不...
    99+
    2023-09-13
    docker 运维 linux
  • Docker 封装java镜像
    目前java采用的框架是Spring,服务器直接通过java -jar xxx.jar就可以启动服务了。 在docker中跑java应用,需要有jdk环境支持才行。获取jdk镜像,有2种方式。1. 自己制作jd...
    99+
    2023-01-31
    镜像 Docker java
  • docker封装redis镜像
    线上使用的redis版本为 3.2.13,但是dockerhub没有此版本的镜像。只有3.2.12但是默认的镜像启动时,是没有redis.conf的,如果需要加配置,需要自己定义配置文件。 创建目录# dock...
    99+
    2023-01-31
    镜像 docker redis
  • docker封装mysql镜像
    直接使用官方的镜像docker pull mysql:5.7但是mysqld.cnf并没有优化,还是默认的。 创建目录# dockerfile目录 mkdir -p /opt/do...
    99+
    2023-01-31
    镜像 docker mysql
  • Docker本地导入镜像/保存镜像/载入镜像/删除镜像的方法
    本篇内容介绍了“Docker本地导入镜像/保存镜像/载入镜像/删除镜像的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读...
    99+
    2022-10-19
    docker
  • Docker中Dockerfile制作镜像的方法步骤
    目录1.基于容器制作2. 基于Dockerfile制作镜像2.1 Dockerfile命令2.2 简单示例docker 镜像的制作,可以基于容器创建镜像,也可基于 dockerfil...
    99+
    2022-11-13
    Dockerfile制作镜像
  • docker怎么创建镜像
    创建Docker镜像的步骤如下:1. 编写Dockerfile:创建一个文本文件,命名为Dockerfile,并在其中描述镜像的构建...
    99+
    2023-09-16
    docker
  • Docker Hub 镜像加速器
    国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务。 二、配置加速地址Ubuntu 16.04+、Debian 8+、Cen...
    99+
    2023-01-31
    镜像 加速器 Docker
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作