Dockerfile构建lnmr

Dockerfile详细使用请参考我上一篇博客

Dockerfile

升级docker至最新版本(升级之前请先将当前docker卸载)

curl -fsSL https://get.docker.com/ | sh

构建之前请先保证宿主机本地源和epel源以及网络正常

先看代码

FROM centos:centos7

MAINTAINER THL

# 准备工作创建文件夹
        RUN \
        mkdir -p /usr/local \
        && mkdir -p /etc/redis \
        && mkdir -p /opt/logs \
        && mkdir -p /data/nginx/conf \
        && mkdir -p /data/nginx/html \
        && mkdir -p /var/log/redis \
        && touch /var/log/redis/redis.log \
        && useradd -r -M -s /sbin/nologin mysql \
        && useradd -r -M -s /sbin/nologin redis \
        && useradd -r -M -s /sbin/nologin nginx
# 复制文件
COPY jdk-8u301-linux-x64.tar.gz /usr/local
COPY redis-6.2.6.tar.gz /usr/local
COPY redis.conf /usr/local/


# 复制数据库文件
COPY mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz /usr/local
COPY my.cnf /etc/
# 复制nginx安装文件

COPY nginx-1.19.7.tar.gz /usr/local
COPY nginx.conf /usr/local/

# 安装vim编辑器
RUN yum -y install vim

# 安装sshd修改密码
RUN \
    yum install passwd openssl openssh-server -y \
    && ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N '' \
    && ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' \
    && sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config \
    && echo 123456 | passwd --stdin root \
    && echo root:123456|chpasswd \
    && rm -rf /var/cache/yum/*

# 安装redis
RUN \
    yum -y install centos-release-scl scl-utils-build gcc \
    && yum install -y devtoolset-8-toolchain \
    && scl enable devtoolset-8 bash \
    && echo "source /opt/rh/devtoolset-8/enable" >>/etc/profile \
    && cd /usr/local \
    && tar xzf redis-6.2.6.tar.gz \
    && cd redis-6.2.6 \
    && make \
    && make install PREFIX=/usr/local/redis  \
    && mv /usr/local/redis.conf /etc
# 安装mysql
RUN \
    yum -y install ncurses-devel openssl-devel openssl cmake mariadb-devel ncurses-compat-libs libaio libaio-devel.x86_64  numactl\
    && cd /usr/local \
    && tar -xf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz -C /usr/local \
    && ln -sv /usr/local/mysql-5.7.31-linux-glibc2.12-x86_64/  /usr/local/mysql \
    && cd /usr/local/ \
    && chown -R mysql.mysql mysql* \
    && echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/myslq.sh \
    && source /etc/profile.d/myslq.sh \
    && mkdir  /mydata \
    && chown  -R mysql.mysql  /mydata/ \
    && mysqld  --initialize-insecure  --user=mysql   --datadir=/mydata \
    && cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld \
    && sed -i 's#basedir=#basedir=/usr/local/mysql#g' /etc/init.d/mysqld \
    && rm -rf /var/cache/yum/*

# 安装 nginx
RUN \
    yum -y install  pcre-devel openssl openssl-devel gd-devel  gcc-c++ make  \
    && cd /usr/local \
    && tar -zxvf nginx-1.19.7.tar.gz \
    && rm -rf nginx-1.19.7.tar.gz \
    && cd nginx-1.19.7 \
    && ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-pcre && make && make install \
    && ln -s /usr/local/nginx/sbin/* /usr/local/sbin/ \
    && nginx \
    && rm -rf /usr/local/nginx/conf/nginx.conf \
    && mv /usr/local/nginx.conf /usr/local/nginx/conf/ \
    && nginx -s reload
# 配置java环境变量
RUN \
    cd /usr/local \
    && tar -zxvf jdk-8u301-linux-x64.tar.gz \
    && rm -rf jdk-8u301-linux-x64.tar.gz \
    && echo 'export JAVA_HOME=/opt/tools/jdk1.8.0_301' >> /etc/profile \
    && echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile \
    && echo 'export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> /etc/profile \
    && source /etc/profile

ENV JAVA_HOME /usr/local/jdk1.8.0_301
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
EXPOSE 22 80 3306 63799
CMD /sbin/init

# 运行docker命令 docker  run -it --name XXX -p 222:22 -p 880:80 -p 33306:3306 -p 63799:63799  -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged=true centos:v1.0 /bin/bash
# 启动mysql命令 /usr/local/mysql/support-files/mysql.server start
# 启动redis命令 /usr/local/redis/bin/redis-server /etc/redis.conf
# 启动nginx命令 nginx
  • 主要分为四大快。
  • 1.提前创建需要的目录或者文件用户等。
  • 2.复制文件到docker中
  • 3.编译安装软件包
  • 4.配置环境变量等

看层级

# tree ./
./
├── Dockerfile
├── jdk-8u301-linux-x64.tar.gz
├── libaio-0.3.109-13.el7.x86_64.rpm
├── my.cnf
├── mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
├── nginx-1.19.7.tar.gz
├── nginx.conf
├── redis-6.2.6.tar.gz
└── redis.conf

##绝对不是因为懒所以才把东西全丢在一起

看文件,配置文件按照自己需求提前配置好放在目录下,直接通过Dockerfile拷贝进去

my.cnf

# vim my.cnf 

[mysqld]
basedir = /usr/local/mysql
datadir = /mydata
socket = /tmp/mysql.sock
port = 3306
pid-file = /mydata/mysql.pid
user = mysql
skip-name-resolve

redis.conf

redis的配置文件内容太长了,就不放出来了,直接从redis的压缩包中Copy一个出来把重要的参数改一下就行,这里贴出另一个博客可以参考配置文件的中文翻译

redis配置文件详解

nginx就不贴了。

 

上方软件包下载链接

jdk

链接:https://pan.baidu.com/s/1gOsZJMgt_4QCS8CS4GNdLg

提取码:qwer

redis

https://redis.io/download/

libaio

https://centos.pkgs.org/7/centos-x86_64/libaio-0.3.109-13.el7.x86_64.rpm.html

nginx

http://nginx.org/en/download.html

mysql

https://dev.mysql.com/downloads/mysql/

 

 

 使用命令构建docker镜像

# docker build -t lnmr:v2.0 . 1>& file.conf
-t指定标签名
.表示运行当前目录下的Dockerfile 
1>& 构建过程输出到file.conf

启动命令

# 运行docker命令 docker  run -it --name XXX -p 222:22 -p 880:80 -p 33306:3306 -p 63799:63799  -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged=true centos:v1.0 /bin/bash
# 启动mysql命令 ./usr/local/mysql/support-files/mysql.server start
# 启动redis命令 /usr/local/redis/bin/redis-server /etc/redis.conf
# 启动nginx命令 nginx

docker run启动之后退出容器会停止工作

退出之后输入 docker start (你docker run 命令中指定的name名称),重新启动下容器即可。

运行命令详解

docker  run -it --name XXX -p 222:22 -p 880:80 -p 33306:3306 -p 63799:63799  -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged=true centos:v1.0 /bin/bash

--name 指定创建出来的容器名

-p 指定要映射出来的端口,左边为宿主,右边为容器

-v 指定映射的目录

--privileged=true 使用该参数,container内的root拥有真正的root权限。
否则,container内的root只是外部的一个普通用户权限。
privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。
甚至允许你在docker容器中启动docker容器。

后面centos:v1.0指定的是镜像名 
posted @ 2022-03-25 10:58  离愁落雨  阅读(195)  评论(1编辑  收藏  举报