Docker---Dockerfile镜像制作应用

目录

一.Dockerfile简述

二.构建Nginx镜像

三.构建Tomcat镜像

四.构建MySQL镜像


一.Dockerfile简述

  • Docker在运行之前,需要以镜像作为基础环境,可以说镜像是整个Docker容器创建的关键,而创建镜像的三种方法中基于Dockerfile创建的方法使用最为灵活。
  • Dockerfile可以看作是被Docker程序所解释翻译的脚本,是由一组命令集合而成,每条命令对应一条操作指令,由docker翻译为Linux下的具体命令。用户可以通过自定义其内容来快速创建镜像。
  • Dockerfile指令
指令 含义
FROM 镜像 指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令
MAINTAINER 名字 说明新镜像的维护人信息
RUN 命令 在所基于的镜像上执行命令,并且提交到新的镜像中
CMD [“要运行的程序”,"参数1","参数2"] 指定启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只有最后一条执行
EXPOSE 端口号 指定新镜像加载到Docker时要开启的端口
ENV 环境变量 变量值 设置一个环境变量的值,会被后面的RUN使用
ADD 源文件 /目录 目标文件 /目录

将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL

COPY 源文件 /目录 目标文件 /目录 将本地主机上的源文件 / 目录复制到目标地点,源文件 / 目录要与Dockerfile在相同的目录中
VOLUME ["目录"] 在容器中创建一个挂载点
USER 用户名 /UID 指定运行容器时的用户
WORKDIR 路径 为后续的RUN、CMD、ENTRYPOINT 指定工作目录
ONBUILD 命令 指定所生成的镜像作为一个基础镜像时所要运行的命令

二.构建Nginx镜像

  • 下载基础镜像
[root@cloud ~]# docker pull guyton/centos6
Using default tag: latest
latest: Pulling from guyton/centos6
9bfcefca2b8d: Pull complete 
2f8ef7dd23e9: Pull complete 
07f137504b02: Pull complete 
Digest: sha256:4d85869d301e1e04f9c71084726c1a6c4a5cb149d56c0ca130a27515094c7390
Status: Downloaded newer image for guyton/centos6:latest
docker.io/guyton/centos6:latest
[root@cloud ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
guyton/centos6      latest              5f3e1df89d22        15 months ago       228MB
[root@cloud ~]# 
  • 建立工作目录
[root@cloud ~]# mkdir nginx
[root@cloud ~]# ls
nginx
[root@cloud ~]# 
  • 创建并且编写Dockerfile文件
[root@cloud ~]# cd nginx/
[root@cloud nginx]# vi Dockerfile
[root@cloud nginx]# cat Dockerfile 
FROM guyton/centos6    
MAINTAINER The Centos Project <cloud>
RUN yum install -y wget net-tools gcc gcc-c++ make openssl-devel
RUN yum install -y pcre-devel
RUN wget http://nginx.org/download/nginx-1.12.2.tar.gz
RUN tar xzvf nginx-1.12.2.tar.gz
RUN useradd -M -s /sbin/nologin nginx
WORKDIR nginx-1.12.2
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
EXPOSE 80
EXPOSE 443
##修改Nginx的配置文件,以非daemon的方式启动
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
WORKDIR /root/nginx
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]

[root@cloud nginx]# 
  • 编辑执行脚本内容
[root@cloud nginx]# ls
Dockerfile
[root@cloud nginx]# vi run.sh
[root@cloud nginx]# cat run.sh 
#!/bin/bash
/usr/local/nginx/sbin/nginx    ##开启nginx服务
[root@cloud nginx]# 
  • 生成镜像
[root@cloud nginx]# docker build -t nginx:new .
Successfully built 1107f39d3712
Successfully tagged nginx:new
[root@cloud nginx]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               new                 1107f39d3712        14 seconds ago      628MB
guyton/centos6      latest              5f3e1df89d22        15 months ago       228MB

  • 启动容器并且测试
[root@cloud nginx]# docker run -d -P --name nginx1 nginx:new 
32358fa7e5935581b13de80d68b7387a2130b8a1a334f544add37ea9896bb0dc
[root@cloud nginx]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                           NAMES
32358fa7e593        nginx:new           "/run.sh"           4 seconds ago       Up 4 seconds        0.0.0.0:32779->80/tcp, 0.0.0.0:32778->443/tcp   nginx1
[root@cloud nginx]# 

三.构建Tomcat镜像

  • 建立工作目录
[root@cloud ~]# mkdir tomcat
[root@cloud ~]# ls
nginx  tomcat
  • 编辑Dockerfile文件
[root@cloud tomcat]# ls
apache-tomcat-9.0.30.tar.gz  Dockerfile  jdk-8u231-linux-x64.tar.gz
[root@cloud tomcat]# cat Dockerfile 
FROM debian
ADD jdk-8u231-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.30.tar.gz /usr/local/
ENV JAVA_HOME /usr/local/jdk1.8.0_231
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.30
ENV PATH $JAVA_HOME/bin:$CATALINA_HOME/bin:$PATH
EXPOSE 8080
CMD ["catalina.sh", "run"]
[root@cloud tomcat]# 
  • 生成镜像
[root@cloud tomcat]# docker build -t tomcat:centos .
...
Successfully built 60a22a233fba
Successfully tagged tomcat:centos
[root@cloud tomcat]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              centos              6a2b79a7122b        11 seconds ago      646MB
nginx               new                 af8413c98e31        2 hours ago         628MB
guyton/centos6      latest              5f3e1df89d22        15 months ago       228MB
[root@cloud tomcat]# 
  • 启动容器并且测试
[root@cloud tomcat]# docker run -d --name tomcat1 -P tomcat:centos &
[1] 25389
[root@cloud tomcat]# 753ea1c796746a4c2713a451861b323378ea0b8bd9701718f35b1de9f26163f4

[1]+  Done                    docker run -d --name tomcat1 -P tomcat:centos
[root@cloud tomcat]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                           NAMES
753ea1c79674        tomcat:centos       "catalina.sh run"   9 seconds ago       Up 8 seconds        0.0.0.0:32785->8080/tcp                         tomcat1
32358fa7e593        nginx:new           "/run.sh"           2 hours ago         Up 2 hours          0.0.0.0:32779->80/tcp, 0.0.0.0:32778->443/tcp   nginx1
[root@cloud tomcat]# 

四.构建MySQL镜像

  • 建立工作目录
[root@cloud ~]# ls
nginx  tomcat
[root@cloud ~]# mkdir mysql
[root@cloud ~]# cd mysql/
[root@cloud mysql]# 
  • 编辑Dockerfile文件
[root@cloud mysql]# cat Dockerfile 
FROM guyton/centos6
MAINTAINER this is mysql images
RUN yum install mysql mysql-server -y
RUN /etc/init.d/mysqld start && \
mysql -e "grant all privileges on *.* to 'root'@'%' identified by '123456';" && \
mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by '123456';"
EXPOSE 3306
CMD ["/usr/bin/mysql_safe","run"]

[root@cloud mysql]# 
  • 生成镜像
[root@cloud mysql]# docker build -t mysql:centos .
...
Successfully built f7ee0a485313
Successfully tagged mysql:centos
[root@cloud mysql]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               centos              f7ee0a485313        18 seconds ago      453MB
tomcat              centos              6a2b79a7122b        36 minutes ago      646MB
nginx               new                 af8413c98e31        3 hours ago         628MB
guyton/centos6      latest              5f3e1df89d22        15 months ago       228MB
[root@cloud mysql]# 
  • 启动容器
[root@cloud mysql]# docker run -d --name mysql1 -P mysql:centos
9c0610eafa6b31f4c67abd3918dde18b28128b044b71dd61e8a80c4a675fa714
[root@cloud mysql]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                           NAMES
9c0610eafa6b        mysql:centos        "/usr/bin/mysqld_saf…"   5 seconds ago       Up 5 seconds        0.0.0.0:32789->3306/tcp                         mysql1
753ea1c79674        tomcat:centos       "catalina.sh run"        48 minutes ago      Up 48 minutes       0.0.0.0:32785->8080/tcp                         tomcat1
32358fa7e593        nginx:new           "/run.sh"                3 hours ago         Up 3 hours          0.0.0.0:32779->80/tcp, 0.0.0.0:32778->443/tcp   nginx1
[root@cloud mysql]# 

注:一般MySQL不会自定义镜像,会直接pull公有仓库的镜像,但是会自定义my.cnf的配置文件

发布了144 篇原创文章 · 获赞 175 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_42761527/article/details/105126009