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一个出来把重要的参数改一下就行,这里贴出另一个博客可以参考配置文件的中文翻译
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指定的是镜像名