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
One comment