千家信息网

简单的Dockerfile书写(实例!!!)

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,一、Apachemkdir apachecd apachevim Dockerfile#基于的基础镜像FROM centos#维护镜像的用户信息MAINTAINER The porject #镜像操作
千家信息网最后更新 2024年11月18日简单的Dockerfile书写(实例!!!)

一、Apache

mkdir apachecd apachevim Dockerfile#基于的基础镜像FROM centos#维护镜像的用户信息MAINTAINER The porject #镜像操作指令安装apache软件RUN yum -y updateRUN yum -y install httpd#开启80端口EXPOSE 80 #复制网站首页文件ADD index.html /var/www/html/index.html#将执行脚本复制到镜像中ADD run.sh /run.shRUN chmod 755 /run.sh#启动容器时执行脚本CMD ["/run.sh"]vim run.sh#!/bin/bashrm -rf /run/httpd/*exec /usr/sbin/apachectl -D FOREGROUNDecho "web test" > index.html#生成镜像docker build -t httpd:centos .#新镜像运行容器docker run -d -p 1216:80 httpd:centos

二、Mysql 5.7.20

mount.cifs //192.168.142.1/LNMP /mntcd /mntcp mysql-boost-5.7.20.tar.gz /optcd /optmkdir mysqlmv mysql-boost-5.7.20.tar.gz /opt/mysqlcd mysql/vim my.cnf[client]port = 3306default-character-set=utf8socket = /usr/local/mysql/mysql.sock[mysql]port = 3306default-character-set=utf8socket = /usr/local/mysql/mysql.sock[mysqld]user = mysqlbasedir = /usr/local/mysqldatadir = /usr/local/mysql/dataport = 3306character_set_server=utf8pid-file = /usr/local/mysql/mysqld.pidsocket = /usr/local/mysql/mysql.sockserver-id = 1sql_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_QUOTESvim DockerfileFROM centos:7RUN yum -y install \ncurses \ncurses-devel \bison \cmake \make \gcc \gcc-c++RUN useradd -s /sbin/nologin mysqlADD mysql-boost-5.7.20.tar.gz /usr/local/srcWORKDIR /usr/local/src/mysql-5.7.20/RUN cmake \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \-DMYSQL_UNIX_ADDR=/usr/local/mysq1/mysq1.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 installRUN chown -R mysql:mysql /usr/local/mysql/RUN rm -rf /etc/my.cnfADD my.cnf /etcRUN chown mysql:mysql /etc/my.cnfENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATHWORKDIR /usr/local/mysql/RUN bin/mysqld \--initialize-insecure \--user=mysql \--basedir=/usr/local/mysql \--datadir=/usr/local/mysql/dataRUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/ system/EXPOSE 3306RUN echo -e "#!/bin/sh \nsystemctl enable mysqld" > /run.shRUN chmod 755 /run.shRUN sh /run.shCMD ["init"]docker build -t centos:mysql .docker run --name=mysql_server -d -P --privileged centos:mysql#进容器给权限docker exec -it 1fbcbbfec033 /bin/bashgrant all privileges on *.* to 'root'@'%' identified by 'abc123';grant all privileges on *.* to 'root'@'localhost' identified by 'abc123';#宿主系统安装mairdb客户端连接mysql容器mysql -h 192.168.142.128 -u root -P 32770 -pabc23

三、Tomcat

mount.cifs //192.168.142.1/tomcat /mntcd /mntcp jdk-8u91-linux-x64.tar.gz /optcp apache-tomcat-8.5.16.tar.gz /optcd /optmkdir /tomcat#拷贝jdk-8u91-linux-x64.tar.gz#apache-tomcat-8.5.16.tar.gz到/opt/tomcat下mv apache-tomcat-8.5.16.tar.gz /opt/tomcat/mv jdk-8u91-linux-x64.tar.gz /opt/tomcat/cd /opt/tomcatvim DockerfileFROM centos:7MAINTAINER this is tomcat image ADD jdk-8u91-linux-x64.tar.gz /rootRUN mv /root/jdk1.8.0_91/ /usr/local/jdk1.8ENV JAVA_HOME=/usr/local/jdk1.8ENV CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jarENV PATH=$JAVA_HOME/bin:$PATHADD apache-tomcat-8.5.16.tar.gz /rootRUN mv /root/apache-tomcat-8.5.16/ /usr/local/tomcatRUN ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/;ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/EXPOSE 8080ENTRYPOINT /usr/local/tomcat/bin/startup.sh && /bin/bash && tail -f /usr/local/tomcat/logs/catalina.outdocker build -t tomcat:centos .docker run -d --name tomcat01 -p 1216:8080 -it tomcat:centos

四、Ngnix1.9.7

mkdir nginxcd nginxvim Dockerfile #基于基础镜像FROM centos:7#用户信息MAINTAINER The is nginx #添加环境包RUN yum install -y proc-devel gcc gcc-c++ zlib zlib-devel make openssl-devel wget#下载nginx软件包RUN wget http://nginx.org/download/nginx-1.9.7.tar.gzRUN tar zxvf nginx-1.9.7.tar.gz#指定工作目录WORKDIR nginx-1.9.7/RUN ./configure --prefix=/usr/local/nginx && make && make install#指定http和https端口EXPOSE 80EXPOSE 443#关闭守护进程RUN echo "daemon off;" >>/usr/local/nginx/conf/nginx.confWORKDIR /root/nginx#添加宿主机中run.sh到容器中ADD run.sh /run.shRUN chmod 755 /run.shCMD ["/run.sh"]vim run.sh#!/bin/bash/usr/local/nginx/sbin/nginxdocker build -t nginx:new .docker run -d -P nginx:new

五、ssh

mkdir sshdcd sshdvim DockerfileFROM centosMAINTAINER The CentOS Project RUN yum -y updateRUN yum -y install openssh* net-tools lsof telnet passwdRUN echo '123456' | passwd --stdin rootRUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_configRUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_keyRUN sed -i '/^session\s\+repuired\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshdRUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.sshEXPOSE 22CMD ["/usr/sbin/sshd","-D"]#生成镜像docker build -t sshd:new .#启动容器并修改root密码docker run -d -P sshd:newssh localhost -p 32770

六、systemctl

mkdir systemctlcd systemctlvim DockerfileFROM sshd:newENV container dockerRUN (cd /lib/ systemd/system/sysinit.target.wants/; for i in*; do [$i==\systemd-tmpfiles-setup.service ] || rm -f $i; done); \rm -f /lib/systemd/system/multi-user.target.wants/*; \rm -f /etc/systemd/system/*.wants/*; \rm -f /lib/systemd/system/local-fs.target.wants/*; \rm -f /lib/systemd/system/sockets.target.wants/*udev*; \rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \rm -f /lib/systemd/system/basic.target.wants/*; \rm -f /lib/systemd/system/anaconda.target.wants/*;VOLUME [ "/sys/fs/cgroup" ]CMD [ "/usr/sbin/init" ]#创建容器docker build -t local/c7-systemd:latest .#privateged container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。docker run --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup:ro local/c7-systemd:latest /sbin/init#进入容器docker exec -it 容器ID bashsystemctl status sshd

七、删除冗余镜像

#!/bin/bashdocker ps -a | grep "Exited" | awk '{print $1 }' | xargs docker stopdocker ps -a | grep "Exited" | awk '{print $1 }' | xargs docker rmdocker images | grep none | awk '{print $3 }' | xargs docker rmi
0