Dockerfile 撰写案例--哇,很香

Dockerfile 撰写案例

一: SSHD之Dockerfile

#1、创建目录,编写Dockerfile文件
mkdir sshd && cd sshd
cat > Dockerfile<<EOF
FROM centos:7	'//指定基础镜像'
MAINTAINER this is centos7-sshd project	'//描述信息'
RUN yum -y update	'//更新容器yum源'
RUN yum -y install openssh* net-tools losf telnet passwd	'//部署环境工具'
RUN echo "123456"|passwd --stdin root	'//设置root登录密码'
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config	'//禁用ssh中的pam验证'
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key	'//创建非对称密钥,并指定文件路径'
RUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd	'//禁用pam的ssh的pam会话模块'
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh	'//创建ssh工作目录和权限设置'
EXPOSE 22	'//开放22端口'
CMD ["/usr/sbin/sshd","-D"]	'//容器加载时启动sshd服务' 
EOF
#2.生成镜像
docker build -t sshd:test .
#3.启动容器,并指定端口号为111
docker run -d -p 111:22 sshd:test
#4. 测试登陆
ssh 127.0.0.1 -p 111

二: Systemctl之Dockerfile

  • 基于SSHD镜像继续构建
#基于SSHD镜像继续构建
#1、创建目录,编写Dockerfile文件
mkdir systemctl && cd systemctl
cat > Dockerfile<<EOF
FROM sshd:new
MAINTAINER built image systemctl <tang>
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/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
EOF
#2、生成镜像
docker build -t systemctl:test .
#3、创建容器
docker run --privileged -it --name systemctl -v /sys/fs/cgroup:/sys/fs/cgroup:ro systemctl:test sbin/init 
'//–privateged 使container内的root拥有真正的root权限,不进行降权处理。否则,container内的用户只是外部的一个普通用户'
#4. 打开终端测试
docker exec -it systemctl /bin/bash
systemctl status sshd_config	"检查docker内systemctl能否使用"

三: Tomcat之Dockerfile

1、创建目录并编写Dockerfile文件,上传相关文件
mkdir tomcat && cd tomcat
cat > Dockerfile<<EOF
FROM centos:7
MAINTAINER this is tomcat <li>
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/tomcat
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
EOF

#注释
CMD ["/usr/local/src/tomcat.run.sh"]
#ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
'//此处除了使用CMD,还可以使用ENTRYPOINT'
'//CMD与ENTRYPOINT的区别'
//ENRYPOINT指开启容器前镜像就已经执行了括号内的命令
//CMD是开启容器时,要执行的指令,设置容器启动后默认执行的命令及其参数,但 CMD 能够被 docker run 后面跟的命令行参数替换
//基于Dockerfile内有CMD或者ENTRYPOINT创建镜像时,docker run 后面就不要加指令(/bin/bash)了,会覆盖掉Dockerfile中的指令或者语法报错

####另外一个版本的,不同的jdk包,不用安装jdk,解压就能用
cat > Dockerfile<<EOF
FROM centos:7
MAINTAINER this is tomcat
#解压java到目录/usr/local下,搭建tomcat的环境
ADD jdk-8u91-linux-x64.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv jdk1.8.0_91 java
#设置环境变量
ENV JAVA_HOME /usr/local/java
ENV JRE_HOME /usr/local/java/jre
ENV CLASSPATH /usr/local/java/lib:/usr/local/java/jre/lib
ENV PATH /usr/local/java/bin:$PATH
#解压安装tomcat包
ADD apache-tomcat-9.0.16.tar.gz /usr/local/
#进入目录/usr/local/
WORKDIR /usr/local/
#重命名方便管理
RUN mv apache-tomcat-9.0.16 /usr/local/tomcat9
#放通tomcat服务的8080端口
EXPOSE 8080
#在这里我用的是catalina.sh文件启动,startup.sh文件也可以。
ENTRYPOINT ["/usr/local/tomcat9/bin/catalina.sh","run"]
EOF

ls
apache-tomcat-9.0.16.tar.gz  Dockerfile  jdk-8u201-linux-x64.rpm

2、生成镜像
docker build -t tomcat:test .

3、创建容器
docker run -d -P tomcat:test
4、页面测试

mark

四: Nginx之Dockerfile

#1、创建目录并编写Dockerfile文件
mkdir nginx && cd nginx
cat > Dockerfile<<EOF
RUN yum install pcre pcre-devel zlib-devel gcc gcc-c++ make -y
RUN useradd -s /sbin/nologin nginx -M
ADD nginx-1.12.0.tar.gz /usr/local/src
WORKDIR /usr/local/src/nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
RUN ln -s /usr/local/nginx-1.12.0/sbin/ /usr/local/bin/
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
EOF
cat > run.sh <<EOF
#!/bin/bash
/usr/local/nginx/sbin/nginx
EOF
ls
//Dockerfile  nginx-1.12.0.tar.gz  run.sh

#2、生成镜像
docker build -t nginx:test .
#3、创建容器,指定端口
docker run -d -P nginx:test1
docker ps -a "查看端口号"
#4.浏览器测试

mark

五: Mysql5.7之Dockerfile

1、创建目录并编写Dockerfile文件
cat > Dockerfile<<EOF
FROM centos:7
MAINTAINER this is kgc-li
RUN yum -y update
RUN yum -y install gcc \
gcc-c++ \
make \
ncurses \
ncurses-devel \
bison \
cmake
RUN useradd -s /sbin/nologin mysql
ADD mysql-boost-5.7.20.tar.gz /usr/local/
WORKDIR /usr/local/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
RUN make && make install
RUN chown -R mysql.mysql /usr/local/mysql
RUN rm -rf /etc/my.cnf
ADD my.cnf /etc/my.cnf
RUN chown mysql:mysql /etc/my.cnf
ENV PATH /usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
RUN echo 'export PATH' >> /etc/profile
RUN source /etc/profile
RUN /usr/local/mysql/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 /lib/systemd/system/
EXPOSE 3306
ADD run.sh /run.sh
RUN chmod 755 /run.sh
RUN chmod +x /run.sh
RUN sh /run.sh
CMD ["init"]
EOF

cat > vim run.sh<<EOF
#!/bin/bash
systemctl enable mysqld
EOF
ls
Dockerfile  mysql-boost-5.7.20.tar.gz  run.sh

3、生成镜像
 docker build -t mysql:test	.
4. 创建容器
docker run -d -P --privileged mysql:test
docker exec -it id /bin/bash
systemctl stop mysqld 
systemctl start mysqld &
yum install -y net-tools
netstat -ntap |grep 3306

mysql -uroot -p
mysql> grant all privileges on *.* to 'root'@'%' identified by '123123';
mysql> grant all privileges on *.* to 'root'@'localhost' identified by '123123';
5.  测试
mysql -h 192.168.233.133 -uroot -p123123 -P 32776
"这个要有安装mysql环境下才能用mysql命令远程登陆"
### 回答1: dockerfile-maven-plugin 是一个 Maven 插件,用于自动生成 Docker 镜像的 Dockerfile 文件。它可以根据 Maven 项目的 pom.xml 文件和一些配置参数,自动生成 Dockerfile 文件,并将其用于构建 Docker 镜像。这个插件可以大大简化 Docker 镜像构建的过程,提高开发效率。 ### 回答2: dockerfile-maven-plugin 是一个用于帮助在 Maven 项目中使用 Dockerfile 构建和管理 Docker 镜像的插件。 在传统的开发中,我们需要手动构建 Docker 镜像,并在 Dockerfile 中定义构建步骤和依赖关系。而使用 dockerfile-maven-plugin 可以将这一过程集成到 Maven 构建中,进一步简化了开发过程。 使用 dockerfile-maven-plugin,我们可以在 Maven 的 pom.xml 文件中配置一系列的构建参数和指令。这些参数包括 Dockerfile 文件路径、镜像名称、版本、标签等。通过这些配置,插件可以自动地根据 Dockerfile 构建 Docker 镜像,并将其推送到远程镜像仓库。 该插件还提供了一些额外的特性,例如多阶段构建、构建缓存、构建参数传递等。其中,多阶段构建允许我们按照不同的阶段构建镜像,以便优化镜像大小和构建速度;构建缓存则可以在多次构建中重复使用相同的构建步骤,避免重复构建;构建参数传递则可以在构建过程中传递环境变量或者其他参数,灵活控制镜像构建的过程。 总而言之,dockerfile-maven-plugin 提供了一种便捷的方式,将 Docker 镜像构建过程整合到 Maven 构建中。使用该插件,我们可以在 Maven 构建过程中自动构建和管理 Docker 镜像,提高了开发效率和部署一致性。 ### 回答3: Dockerfile-maven-plugin是一个maven插件,用于帮助开发人员在构建过程中生成Docker镜像。Docker镜像是一个轻量级、可移植、自包含的容器,使应用程序的部署更加简单和可靠。 使用Dockerfile-maven-plugin,我们可以为项目配置一个Dockerfile文件,该文件指定了如何构建和运行应用程序的容器。该插件提供了一系列的目标和参数,用于自动化构建、镜像打包和标记、上传到Docker Hub等操作。 在配置中,我们可以指定应用程序的依赖项、环境变量、端口映射等信息,以及Docker镜像的基础映像和其他镜像相关的配置。此外,我们还可以使用插件的额外功能,如构建多阶段、使用多个Dockerfile等。 使用Dockerfile-maven-plugin,我们可以在maven构建过程中集成Docker镜像的构建和发布,减少了手动操作的复杂性和错误的可能性。此外,该插件还可以与其他maven插件和工具集成,实现更复杂的自动化构建流程。 总而言之,Dockerfile-maven-plugin是一个方便的maven插件,用于在项目构建过程中生成Docker镜像。它帮助简化了Docker容器的构建和部署过程,提高了开发人员的效率,并且可以与其他工具集成,实现更复杂的构建流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值