Docker-Dockerfile

用于构建自定义镜像,描述镜像的生成规则。

Dockerfile 把构建镜像的步骤一步步写出来,然后按照顺序执行实现自动构建镜像。

Dockerfile中的每一条命令,都在Docker镜像中以一个独立镜像层的形式存在

一、Dockerfile 相关指令

官方文档:https://docs.docker.com/engine/reference/builder/

  • FROM

用于指定构建新镜像所使用的基础镜像

需要放在最开始位置

指定的镜像可以是官方远程仓库中的,也可以是本地仓库中的,有限本地仓库

FROM centos:latest
  • RUN

指定执行的命令

当有多条命令时,建议使用&&\ 将多条命令连接起来

RUN echo "test" > /tmp/1.txt
  • CMD

用于指定启动容器时所要指定的命令

CMD ...
  • ENTRYPOINT

CMD类似,不同点在于,如果启动时用户指定了运行的命令,ENTRYPOINT不会被运行的命令所覆盖,而CMD会被覆盖

ENTRYPOINT ...
  • ADD

用于把宿主机上的文件拷贝到镜像中

源文件可以是本地文件或者本地压缩文件(会自动解压),还可以是一个url

ADD <src> <dest>
  • COPY

类似ADD,但是源文件只能是本地文件

COPY <src> <dest>
  • ENV

用于指定一个环境变量

ENV <key> <value>
ENV <key>=<value>
  • EXPOSE

指定容器运行时监听的端口

EXPOSE <port> <port> ...
  • VOLUME

做目录映射,只需要指定挂载点,宿主机映射的目录为自动生成

VOLUME [""]
  • USER

指定启动容器的用户,可以是用户名或者UID

USER username/uid
  • WORKDIR

用于指定工作目录

WORKDIR /

二、Dockerfile 案例

(1)httpd

创建Dockerfile

# vim dockerfile_httpd 
FROM centos:latest
MAINTAINER Tiger

RUN yum install httpd httpd-devel -y \
    && echo "Tiger" > /var/www/html/index.html \
    && yum clean all

EXPOSE 80
CMD /usr/sbin/httpd -D FOREGROUND

构建及启动

#构建
docker build -f dockerfile_httpd -t my_httpd:v1 .
#启动
docker run -d -p 80:80 --name=my_httpd my_httpd:v1

(2)tomcat

创建Dockerfile

# vim dockerfile_tomcat 
FROM centos
MAINTAINER Tiger

ENV JAVA_HOME=/usr/local/jdk1.8.0_191
ADD jdk-8u191-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.14.tar.gz /usr/local/

EXPOSE  8080
CMD /usr/local/apache-tomcat-9.0.14/bin/catalina.sh run

构建及启动

#构建
docker build -f dockerfile_tomcat -t my_tomcat:v1 .
#启动
docker run -d -p 8080:8080 --name=my_tomcat my_tomcat:v1

(3)mariadb

创建脚本文件

#vim mariadb.sh
#!/bin/bash
mysql_install_db --datadir=/var/lib/mysql/ --user=mysql
sleep 3
mysqld_safe --defaults-file=/etc/my.cnf &
sleep 3
mysql -e "grant all privileges on *.* to 'root'@'%' identified by '123';"
mysql -e "flush privileges;"

创建dockerfile

# vim dokerfile_mariadb
FROM centos:latest

MAINTAINER Tiger

RUN yum install mariadb-server mariadb -y

COPY mariadb.sh /root
RUN sh /root/mariadb.sh 

EXPOSE 3306
CMD mysqld_safe --defaults-file=/etc/my.cnf

启动及构建

#构建
docker build -f dockerfile_mariadb -t my_mariadb:v1 .
#启动
docker run -d -p 3306:3306 --name my_mariadb my_mariadb:v1
#使用
mysql -h 10.1.1.11 -uroot -p
Last modification:December 25th, 2019 at 10:22 pm