Dokerfile扩展案例

一、构建SSH镜像

1.1 创建工作目录

1.2 Dockerfile文件内容

1.3 生成镜像

1.4 启动容器并修改root密码

二、构建Systemctl镜像

1.1 创建工作目录

1.2 Dockerfile文件内容

1.3 生成镜像

1.4 启动容器,并挂载宿主机目录挂载到容器中,和进行初始化

1.5 进入容器并测试

三、构建nginx镜像

1.1 创建工作目录

1.2 Dockerfile文件内容

1.3 准备执行脚本

1.4 生成镜像

1.5 新镜像运行容器并查看网页

四、构建tomcat镜像

1.1 创建工作目录

1.2 Dockerfile文件内容

1.3 生成镜像

1.4 新镜像运行容器并查看网页

五、构建mysql镜像

1.1 创建工作目录

1.2 Dockerfile文件内容

1.3 准备my.cnf文件

 1.4 准备执行脚本

1.5 生成镜像

1.6 启动容器,并进行初始化

1.7 进入容器,授权远程连接 mysql

1.8 在客户端连接mysql容器


一、构建SSH镜像

1.1 创建工作目录

mkdir /opt/sshd
cd /opt/sshd
vim Dockerfile

1.2 Dockerfile文件内容

FROM centos:7    #第一行必须指明基于的基础镜像
MAINTAINER this is ssh image <shibin>    #作者信息
RUN yum -y install openssh* net-tools lsof telnet passwd
RUN echo 'abc1234' | passwd --stdin root
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config						#不使用PAM认证
RUN sed -ri '/^session\s+required\s+pam_loginuid.so/ s/^/#/' /etc/pam.d/sshd	#取消pam限制
RUN ssh-keygen -t rsa -A														#生成密钥认证文件
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
EXPOSE 22
CMD ["/usr/sbin/sshd" , "-D"]			#/usr/sbin/sshd -D 用于前台启动sshd服务

1.3 生成镜像

docker build -t sshd:centos .

1.4 启动容器并修改root密码

docker run -d --name sshd -P sshd:centos
docker ps -a
ssh localhost -p 49161

二、构建Systemctl镜像

1.1 创建工作目录

mkdir /opt/systemctl
cd /opt/systemctl
vim Dockerfile

1.2 Dockerfile文件内容

FROM sshd:centos
MAINTAINER this is systemctl image <shibin>
ENV container docker
RUN (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/*;	#除了systemd-tmpfiles-setup.service,删除其它所有文件
VOLUME [ "/sys/fs/cgroup" ]
#CMD ["/usr/sbin/init"]

1.3 生成镜像

docker build -t systemd:centos .

1.4 启动容器,并挂载宿主机目录挂载到容器中,和进行初始化

docker run --privileged -d -P -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemd:centos /sbin/init

--privileged:使container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。

1.5 进入容器并测试

docker ps -a

docker exec -it fed8ef161819 bash

systemctl status sshd

systemctl start sshd

systemctl status sshd

三、构建nginx镜像

1.1 创建工作目录

mkdir /opt/nginx
cd /opt/nginx/
cp /opt/nginx-1.22.0.tar.gz /opt/nginx

1.2 Dockerfile文件内容

FROM centos:7    #基于基础镜像
MAINTAINER this is nginx image <shibin>    #用户信息
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make     #添加环境包
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.22.0.tar.gz /opt/    #上传nginx软件压缩包,并解压
WORKDIR /opt/nginx-1.22.0    #指定工作目录
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    #指定http端口
EXPOSE 443   #指定https端口
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf			#关闭 nginx 在后台运行
ADD run.sh /run.sh    #添加宿主机中run.sh到容器中
RUN chmod 755 /run.sh
CMD ["/run.sh"]

1.3 准备执行脚本

vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx

 

1.4 生成镜像

docker build -t nginx:centos .

1.5 新镜像运行容器并查看网页

docker run -d -P nginx:centos

四、构建tomcat镜像

1.1 创建工作目录

mkdir /opt/tomcat
cd /opt/tomcat
cp /opt/jdk-8u291-linux-x64.tar.gz /opt/tomcat
cp /opt/apache-tomcat-8.5.16.tar.gz /opt/tomcat
vim Dockerfile

1.2 Dockerfile文件内容

FROM centos:7
MAINTAINER this is tomcat image <shibin>
ADD jdk-8u291-linux-x64.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv jdk1.8.0_291 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH $JAVA_HOME/bin:$PATH
ADD apache-tomcat-8.5.16.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv apache-tomcat-8.5.16 /usr/local/tomcat
EXPOSE 8080
CMD ["/usr/local/tomcat/bin/catalina.sh","run"]

1.3 生成镜像

docker build -t tomcat:centos .

1.4 新镜像运行容器并查看网页

docker run -d --name tomcat01 -p 64321:8080 tomcat:centos 

五、构建mysql镜像

1.1 创建工作目录

mkdir /opt/mysqld
cd /opt/mysqld
vim Dockerfile

1.2 Dockerfile文件内容

FROM centos:7
MAINTAINER this is mysql image <shibin>
RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make;useradd -M -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_EXTRA_CHARSETS=all \
-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;make install
ADD my.cnf /etc/my.cnf
EXPOSE 3306
RUN chown -R mysql:mysql /usr/local/mysql/;chown mysql:mysql /etc/my.cnf
WORKDIR /usr/local/mysql/bin/
RUN ./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data;cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/;systemctl enable mysqld
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
VOLUME [ "/usr/local/mysql" ]
CMD ["/usr/sbin/init"]

1.3 准备my.cnf文件

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

 1.4 准备执行脚本

vim run.sh
#!/bin/bash
/usr/local/mysql/bin/mysqld	
systemctl enable mysqld

1.5 生成镜像

docker build -t mysql:centos .

1.6 启动容器,并进行初始化

docker run --name=mysql_server -d -P --privileged mysql:centos /usr/sbin/init

1.7 进入容器,授权远程连接 mysql

docker exec -it 072176307c56 /bin/bash
mysql -u root -p
grant all privileges on *.* to 'root'@'%' identified by 'abc123';
grant all privileges on *.* to 'root'@'localhost' identified by 'abc123';
flush privileges;

1.8 在客户端连接mysql容器

mysql -h 192.168.80.10 -u root -P 49153 -pabc123

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值