mkdir nginx
cd nginx/
//拷贝nginx-1.15.9源码包到nginx/中
vim Dockerfile
#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER this is nginx <zk>#添加环境包
RUN yum -y update
RUN yum -y install gcc gcc-c++ make pcre-devel zlib-devel perl
RUN useradd -M -s /sbin/nologin nginx
#下载nginx软件包
ADD nginx-1.15.9.tar.gz /opt
WORKDIR /opt
#指定工作目录
WORKDIR nginx-1.15.9
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module &&make&&makeinstall
ENV PATH /usr/local/nginx/sbin:$PATH#指定http和https端口
EXPOSE 80
EXPOSE 443
RUN echo"daemon off;">>/usr/local/nginx/conf/nginx.conf
#添加宿主机中run.sh到容器中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
ADD:能把压缩包复制到容器当中,还可以完成解压缩
daemon off:关闭守护进程,因为由容器支撑
vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
//创建新镜像
docker build -t nginx:new .
docker run -d -P nginx:new
docker ps -a //查看端口号
http://20.0.0.20:32770/ //测试
2.4 tomcat镜像
mkdir tomcat
cd /tomcat
拷贝jdk-8u144-linux-x64.tar、apache-tomcat-8.5.23.tar 到tomcat里
vim Dockerfile
FROM centos:7
MAINTAINER this is tomcat image <zjz>
ADD jdk-8u144-linux-x64.tar.gz /usr/local
WORKDIR /usr/local/
RUN mv jdk1.8.0_144 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JAVA_BIN /usr/local/java/bin
ENV JRE_HOME /usr/local/java/jre
ENV PATH $PATH:/usr/local/java/bin:/usr/local/java/jre/bin
ENV CLASSPATH /usr/local/java/jre/bin:/usr/local/java/lib:/usr/local/java/jre/lib/charsets.jar
ADD apache-tomcat-8.5.23.tar.gz /usr/local
WORKDIR /usr/local/
RUN mv apache-tomcat-8.5.23 /usr/local/tomcat8
EXPOSE 8080
#CMD ["/usr/local/tomcat8/bin/catalina.sh","run"]
ENTRYPOINT ["/usr/local/tomcat8/bin/catalina.sh","run"]
//创建新镜像
docker build -t tomcat:new .
//创建容器,并映射端口
docker run -d --name tomcat01 -p 1216:8080 tomcat:new
测试:浏览器输入20.0.0.20:1216
2.5 mysql镜像
mkdir mysqld
cd mysqld
vim 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
vim Dockerfile
FROM centos:7
RUN yum -y install \
ncurses \
ncurses-devel \
bison \
cmake \
make \
gcc \
gcc-c++
RUN useradd -s /sbin/nologin mysql
ADD mysql-boost-5.7.20.tar.gz /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 -j4 &&makeinstall##############上面的解释###########################################RUN useradd -s /sbin/nologin mysql ##创建程序用户#ADD mysql-boost-5.7.20.tar.gz /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 \ ##PID文件目录#-DDEFAULT_CHARSET=utf8 \ ##支持字符集 #-DDEFAULT_COLLATION=utf8_general_ci \ ##支持一些特殊的中文字符#-DWITH_INNOBASE_STORAGE_ENGINE=1 \ ##包括下面三条都是 存储引擎#-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \#-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \#-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \#-DMYSQL_DATADIR=/usr/local/mysql/data \ ##数据目录#-DWITH_BOOST=boost \ ##支持c++库#-DWITH_SYSTEMD=1 && make -j3 && make install ##服务中自己的id 和编译安装#################################################################
RUN chown -R mysql:mysql /usr/local/mysql/
RUN rm -rf /etc/my.cnf
ADD my.cnf /etc
RUN chown mysql:mysql /etc/my.cnf
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
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/
EXPOSE 3306
RUN echo -e "#!/bin/sh \nsystemctl enable mysqld"> /run.sh
RUN chmod 755 /run.sh
RUN sh /run.sh
CMD ["init"]
//创建镜像
docker build -t mysql:new .
//创建容器
docker run --name=mysql_server -d -P --privileged mysql:new //--privileged 不做降权处理
//进入容器
docker exec -it dfa35d4c59a2 bash
//进入数据库
mysql -uroot -p //没有密码直接回车
//在mysql里给权限
grant all privileges on *.* to 'root'@'%'identified by 'abc123';
grant all privileges on *.* to 'root'@'localhost'identified by 'abc123';
flush privileges; //刷新
//在宿主系统中安装mairadb客户端连接mysql容器
开一台新的服务器
yum -y install mairadb * //安装mairadb
mysql -h 20.0.0.20 -u root -P 32768 -pabc123 //连接刚刚的mysql数据库
mysql> create database school; //创建一个school数据库
//回mysql容器,登录mysql查看一下有没有school数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema || mysql || performance_schema || school || sys |
+--------------------+
5 rows inset(0.00 sec)
三、报错集
报错集:如果进mysql报错
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/usr/local/mysql/mysql.sock' (2)
解决方法:
cd /usr/local/mysql/
touch mysql.sock
chmod 777 mysql.sock