前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这就是你日日夜夜想要的docker!!!---------Dockerfile构建nginx、Tomcat、MySQL镜像

这就是你日日夜夜想要的docker!!!---------Dockerfile构建nginx、Tomcat、MySQL镜像

作者头像
不吃小白菜
发布2020-09-24 11:08:43
4620
发布2020-09-24 11:08:43
举报

文章目录

构建nginxDockerfile镜像

这里的nginx软件包使用nginx-1.12.2.tar.gz需要的私聊

代码语言:javascript
复制
[root@docker ~]# mkdir /nginx
[root@docker ~]# cd /nginx/
[root@docker nginx]# vim Dockerfile
FROM centos:7
RUN yum update -y
RUN yum -y install gcc gcc-c++ make pcre-devel expat-devel perl zlib-devel pcre
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.2.tar.gz /usr/local
WORKDIR /usr/local/nginx-1.12.2
RUN (./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module) && make &&  make install
ENV PATH /usr/local/nginx/sbin/:$PATH
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf    '关闭nginx自带的守护进程'
CMD ["/usr/local/nginx/sbin/nginx"]

这里指定的是在centos7下安装  要指定版本
[root@docker nginx]# rz -E	'//上传nginx源码包'
rz waiting to receive.
[root@docker nginx]# ls
Dockerfile  nginx-1.12.2.tar.gz

[root@docker nginx]# docker build -t nginx:test .
[root@docker nginx]# docker run -d -P nginx:test1
885cf9811be57e12690ce352fbd7c5011cefffece8b59a0d7317e12eb8955a70
[root@docker nginx]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                NAMES
e34b0521147c        nginx:test1         "/usr/local/nginx/sb…"   2 minutes ago       Up 2 minutes        0.0.0.0:32784->22/tcp, 0.0.0.0:32783->80/tcp, 0.0.0.0:32782->443/tcp   zen_hellman

创建容器,指定端口

代码语言:javascript
复制
[root@docker nginx]# docker run -d -P nginx:test1
885cf9811be57e12690ce352fbd7c5011cefffece8b59a0d7317e12eb8955a70
[root@docker nginx]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                NAMES
e34b0521147c        nginx:test1         "/usr/local/nginx/sb…"   2 minutes ago       Up 2 minutes        0.0.0.0:32784->22/tcp, 0.0.0.0:32783->80/tcp, 0.0.0.0:32782->443/tcp   zen_hellman

[root@docker nginx]# ip addr	'//自己IP地址为 192.168.233.133'
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:68:b8:a6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.233.133/24 brd 192.168.233.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::35a9:b12:5e2b:c44d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
...省略内容

构建DockerfileTomcat

代码语言:javascript
复制
[root@docker nginx]# mkdir /tomcat
[root@docker nginx]# cd /tomcat/
[root@docker tomcat]# vim Dockerfile
FROM centos
MAINTAINER this is tomcat
ADD jdk-8u201-linux-x64.rpm /usr/local/
WORKDIR /usr/local/
RUN rpm -ivh jdk-8u201-linux-x64.rpm
ENV JAVA_HOME /usr/java/jdk1.8.0_201-amd64
ENV CLASSPATH $JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
ENV PATH $JAVA_HOME/bin:$PATH
ADD apache-tomcat-9.0.16.tar.gz /usr/local
WORKDIR /usr/local
RUN mv apache-tomcat-9.0.16/ /usr/local/tomcat9
ENV PATH /usr/local/tomcat9/bin/:$PATH
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat9/bin/catalina.sh","run"]



[root@docker tomcat]# docker build -t tomcat:test .   '创建镜像'
[root@docker tomcat]# docker run -d -P tomcat:test    '启动镜像'
[root@docker tomcat]# docker ps -a |grep tomcat
f4afd19d14d3        tomcat:test1        "/usr/local/src/tomc…"   25 seconds ago      Up 23 seconds       0.0.0.0:32788->22/tcp, 0.0.0.0:32787->8080/tcp                         lucid_tesla

1、ENRYPOINT指开启容器前镜像就已经执行了括号内的命令

2、CMD是开启容器时,要执行的指令,设置容器启动后默认执行的命令及其参数,但 CMD 能够被 docker run 后面跟的命令行参数替换

3、基于Dockerfile内有CMD或者ENTRYPOINT创建镜像时,docker run 后面就不要加指令(/bin/bash)了,会覆盖掉Dockerfile中的指令或者语法报错

构建Dockerfile MySQL镜像

代码语言:javascript
复制
vim Dockerfile
#编写dockerfile文件
FROM centos:7
#指定基础镜像
RUN yum -y update
#更新yum源
RUN yum -y install \
ncurses \
ncurses-devel \
bison \
cmake \
make \
gcc \
gcc-c++ 
#安装mysql依懒环境包
RUN useradd -s /sbin/nologin mysql
#创建运行用户
ADD mysql-boost-5.7.20.tar.gz /usr/local/src
#将压缩包添加到/usr/local/src目录下面
WORKDIR /usr/local/src/mysql-5.7.20/
#指定当前的工作路径
RUN cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1 && make && make install
#cmake和编译
RUN chown -R mysql:mysql /usr/local/mysql/
#给予/usr/local/mysql的属主和属组
RUN rm -rf /etc/my.cnf
#删除原来的/etc/my.cnf文件
ADD my.cnf /etc
#将宿主机的my.cnf文件添加到/etc/目录下面
RUN chown mysql:mysql /etc/my.cnf
#设置权限
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
#设置mysql的环境
WORKDIR /usr/local/mysql/
#指定当前工作路径
RUN bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
#初始化数据库
RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
#将mysql的启动脚本复制到/usr/lib/systemd/system/目录下面,便于systemctl的管理
EXPOSE 3306
#开放容器的端口
RUN echo -e "#!/bin/bash \nsystemctl enable mysqld" > /run.sh
#写mysql的启动脚本
RUN chmod 755 /run.sh
#给予权限
RUN sh /run.sh
#执行脚本
CMD ["init"]
#容器启动时执行
代码语言:javascript
复制
vim my.cnf
[root@localhost mysql-5.7.20]#vi /etc/my.cnf
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock

[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
代码语言:javascript
复制
构建mysql:new的镜像
docker build -t centos:mysql .

1
启动容器
docker run --name=mysql_server -d -P --privileged centos:mysql 

1
提权
docker exec -it  镜像ID  /bin/bash
grant all privileges on *.* to 'root'@'%' identified by 'abc123';
grant all privileges on *.* to 'root'@'%' localhost identified by 'abc123';
privileges on *.* to 'root'@'%' identified by 'abc123';
grant all privileges on *.* to 'root'@'%' localhost identified by 'abc123';
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 构建nginxDockerfile镜像
  • 构建DockerfileTomcat
  • 构建Dockerfile MySQL镜像
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档