五、制作 dockerfile

#五、 dockerfile
##1. dockerfile 命令

指令描述
FROM构建的镜像是基于哪个镜像 例如,from centos:7
MAINTAINER镜像维护者姓名or email
RUN构建镜像时运行的shell命令例如:RUN yum install httpd
CMD运行容器时执行的命令,例如:
CMD[“-c”,”/start.sh”]
CMD[“/usr/sbin/sshd”,”-D”]
CMD/usr/sbin/sshd -D
EXPOSE声明容器运行的服务端口
expose80 443
ENV设置容器内环境变量,例如:ENV MYSQL_ROOT_PASSWORD 123456
ADD拷贝文件或目录到镜像,如果是URL或压缩包会自动下载或自动解压(URL,不会自动解压!!!)
例1:ADD……
例2:ADD https://xxx.com/html.tar.gz /var/www/html
例3:ADD html.tar.gz /var/www/html
COPY拷贝文件或目录到镜像,用法同上
ENTRYPOINT运行容器时执行的shell命令
例1:ENTRYPOINT ["/bin/bash","-c","/start.sh"]
例2:ENTRYPOINT /bin/bash -c ‘/start.sh’
VOLUME指定容器挂载点 到宿主机 自动生成的目录 ,或其他容器
例1:VOLUME [“/var/lib/mysql”]
USER为RUN、CMD、ENTRYPOINT 执行命令指定运行用户
例1:USER : or USER : ,USER songyt
WORDIR为RUN、CMD、ENTRYPOINT、COPY、ADD设置工作目录
例1:WORKDIR /data
HEALTHCHECK健康检查
例1:HEALTHCHECK --interval=5m --timeout=3s\
例2:CMD curl -f http://localhost/
ARG在构建镜像时指定一些参数
FROM centos:7
ARG user
USER $user
docker build --build-arg user=listening Dockfile

run、cmd、entrypoint 区别
run 在build镜像时运行,可以写多条
cmd,entrypint,在运行容器时运行,只能写一条,如果写多条,最后一条生效
cmd,在run时,可以被command覆盖,entrypint不会被command覆盖,但可以指定–entrypint覆盖
##2 build dockerfile 镜像命令
docker build [options] PATH | URL | -
options
-t tag list #指定镜像名称
-f --file string #指定dockerfile 文件位置
例子:

docker build  .                 #默认找当前目录 以Dockerfile为命名的文件
docker build  -t  shykes/myapp  .   #指定镜像名字、位置
docker build  -t  shykes/myapp  -f  /path/Dockerfile 上下文环境/path

docker build  -t  shykes/myapp  http://www.example.com/Dockerfile
docker build  -t  shykes/myapp  http://www.example.com/context.tar.gz

docker build  -t  shykes/myapp  -  <  Dockerfile
docker build  -t  shykes/myapp  -  <  contaxt.tar.gz

###2.1 构建PHP 镜像

cat Dockerfile

FROM  centos:7
MAINTAINER  songyt
RUN  yum install -y httpd php php-gd php-mysql  mysql mysql-server
ENV  MYSQL_ROOT_PASSWORD 123456
RUN  echo "<?php phpinfo() ?>"  >  /var/www/html/index.php
ADD  start.sh /start.sh
RUN  chmod  +x  /start.sh
ADD  https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz  /var/www/html
COPY  wp-config.php  /var/www/html/wordpress
VOLUME  [“/var/lib/mysql”]
CMD  /start.sh
EXPOSE  80 3306

cat start.sh

service  httpd start
service  mysqld start
mysqladmin -uroot  password $MYSQL_ROOT_PASSWORD
tail  -f   #为了防止容器退出,得有一个可持续运行的进程,容器就不退出了。

例1:
先注释掉那一行,copy config
vim Dockerfile

docker build -t wordpress:v1 .
docker run -itd --name wordpress -p 88:80 wordpress:v1

生成容器后,要看日志docker logs wordpress
用浏览器访问
虚拟机IP+端口(192.168.247.128:88),没有结果。
查看此容器日志:
这里写图片描述

重新修改(mysql -> mariadb)构建

构建镜像的时候会遇到,docker 网络问题,如下:
[WARNING]IPv4 forwarding is disabled.Networking will not work.
解决办法:

 vi /etc/sysctl.conf  或者  # vi /usr/lib/sysctl.d/00-system.conf
添加如下代码:
    net.ipv4.ip_forward=1
重启network服务 # systemctl restart network
查看是否修改成功  # sysctl net.ipv4.ip_forward
如果返回为“net.ipv4.ip_forward = 1”则表示成功了

###2.2 构建tomcat 镜像
臃肿版
开发可以自己ssh连接容器,然后直接运行restart命令,来重启tomcat(dockerfile里有ssh端口+密码,用户名root)。
cat Dockerfile-java

FROM docker.io/centos
ADD jdk-8u171-linux-x64.tar.gz /usr/local
ENV JAVA_HOME "/usr/local/jdk1.8.0_171"
RUN yum -y install openssh-server && \
    ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key && \
    ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key && \
    ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key && \
    echo "/usr/local/tomcat/bin/catalina.sh start && /usr/sbin/sshd -D" >/start.sh && \
    chmod +x /start.sh && \

    sed -i "/^#Port 22/cPort 1034" /etc/ssh/sshd_config && \
    echo "root:3c05b98c6202e10ab65cfdcb" | chpasswd && \
yum clean all
CMD ["/bin/sh","/start.sh"]

build构建镜像
生成容器

docker build -t tomcat:v1 -f Dockerfile-java  .        #构建镜像
docker run -itd -e TZ=Asia/Shanghai --net host  -v /data/project/02_tdt-xz/tomcat/:/usr/local/tomcat/ -v /var/log/:/var/log --name tdt-xz_20181025 tdt-xz:20181025
(dockerfile里已经有jdk了,-v /data/softWithDocker/jdk1.8.0_171/:/usr/local/jdk1.8.0_171/)
restart命令,放在/bin/下的restart文件
chmod +x /bin/restart

#!/bin/bash
#声明环境变量,可以写到/root/.bash_profile里,也可以写到restart脚本里
export JAVA_HOME=/usr/local/jdk1.8.0_171
ps -ef |grep tomcat |grep -v grep |awk  '{print $2}' |xargs kill -9
/usr/local/tomcat/bin/catalina.sh start

用浏览器访问:虚拟机IP是192.168.247.128
192.168.247.128:89
这里写图片描述

Success!


缩减版:
1、vim Dockerfile-jian

FROM  centos:7
MAINTAINER  songyt
ENV  JAVA_HOME  /usr/java/jdk1.8.0_171
CMD ["/usr/local/tomcat/bin/catalina.sh","run"]

2、构建镜像

docker build -t tomcat -f Dockerfile-jian .
docker images    #查看镜像 只有200MB

3、生成容器:

  • 使用本地网络
  • 映射本地jdk -> 到容器
  • 映射本地tomcat + 代码 -> 到容器
docker run -itd --name tdt-xz --net=host -v /data/softWithDocker/jdk1.8.0_171:/usr/java/jdk1.8.0_171  -v /data/project/02_tdt-xz/tomcat:/usr/local/tomcat  tomcat:tdt-xz

###3. 构建支持SSH服务的镜像
cat Dockerfile-ssh

FROM  centos:7
MAINTAINER  songyt
ENV  ROOT_PASSWORD 123456
RUN  yum install -y openssh-server
RUN  echo $ROOT_PASSWORD  |  passwd --stdin  root
RUN  ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN  ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
CMD  [“/usr/sbin/sshd”,”-D”]
EXPOSE  22

build构建镜像

docker  build -t  ssh:v1 -f ./Dockerfile-ssh .
docker  run -itd  --name ssh ssh:v1

测试是否成功,连接参数:
IP:虚拟机IP(192.168.247.128)
Port:2222
username/passwd:root/123456

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值