Dockerfile参数

指令

含义

FROM镜像

指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令

MAINTAINER名字

说明新镜像的维护人信息

RUN命令

在所基于的镜像上执行命令,并提交到新的镜像中

CMD[“要运行的程序”,“参数”,“参数2”]

指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能最后一条被执行

EXPOSE端口号

指定新镜像加载到Docker时要开启的端口

ENV环境变量变量值

设置一个环境变量的值,会被后面的RUN使用

ADD源文件/目录目标文件/目录

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

COPY源文件/目录目标文件/目录

将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中

VOLUME[“目录”]

在容器中创建一个挂载点

USER用户名/UID

指定运行容器时的用户

WORKDIR路径

为后续的RUN、CMD、ENTRYPOINT指定工作目录

ONBULD命令

指定所生成的镜像作为一个基础镜像时所要运行的命令

构建Nginx容器

1.下载基础镜像

[root@localhost media]# docker pull   centos //从互联网上下载镜像的命令

此处使用已有镜像(从光盘上下载)

[root@localhost media]# docker load  <centos
f972d139738d: Loading layer [==================================================>] 208.8 MB/208.8 MB

2.建立工作目录

[root@localhost ~]# mkdir nginx
[root@localhost ~]# cd nginx/

3.创建并编写Dockerfile文件

[root@localhost nginx]# vim Dockerfile
FROM centos  //设置基础镜像
MAINTAINER the centos  project <--大哥专属-->   //维护该镜像的用户信息
RUN yum -y install wget proc-devel net-tools gcc zlib zlib-devel make openssl-devel //安装相关依赖包
RUN wget http://nginx.org/download/nginx-1.9.7.tar.gz  // 下载并解压Nginx源码包
RUN tar zxf nginx-1.9.7.tar.gz
WORKDIR nginx-1.9.7  //编译安装Nginx
RUN ./configure --prefix=/usr/local/nginx && make && make install
EXPOSE 80    //开启80和443端口
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf // 修改Nginx配置文件,以非daemon方式启动
WORKDIR /root/nginx  //复制服务启动脚本并设置权限
ADD  run.sh /run.sh
RUN chmod 775 /run.sh
CMD ["/run.sh"]   // 启动容器是执行脚本

4.编写执行脚本内容

[root@localhost nginx]# vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx

5.生成镜像

[root@localhost nginx]# docker build  -t nginx:wyjx .
.....
Step 8/14 : EXPOSE 80
 ---> Running in 1d39f81e94e9
 ---> c28d2172c94e
Removing intermediate container 1d39f81e94e9
Step 9/14 : EXPOSE 443
 ---> Running in 3413206d2ae5
 ---> f5f60eaa040d
Removing intermediate container 3413206d2ae5
Step 10/14 : RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
 ---> Running in 5a786a4b3139

 ---> 7fb5edc00aed
Removing intermediate container 5a786a4b3139
Step 11/14 : WORKDIR /root/nginx
 ---> 3ef5a508d284
Removing intermediate container 2e7b0b14e8a0
Step 12/14 : ADD run.sh /run.sh
 ---> 04db47301cc3
Removing intermediate container 6b2514c50c42
Step 13/14 : RUN chmod 775 /run.sh
 ---> Running in b68b82d15b22

 ---> c43132e05aa0
Removing intermediate container b68b82d15b22
Step 14/14 : CMD /run.sh
 ---> Running in 3f4bc601d9bc
 ---> 3242254ee52a
Removing intermediate container 3f4bc601d9bc
Successfully built 3242254ee52a

6.启动容器进行测试

[root@localhost ~]# docker run  -d -P nginx:wyjx 
fc3b52be7871e42c48d2a22c67b4db1d85017fec0ee3fd2db79b6ac6a1481847

查看容器运行状态

[root@localhost ~]# docker  ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                           NAMES
fc3b52be7871        nginx:wyjx          "/run.sh"           23 seconds ago      Up 22 seconds       0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp   dreamy_rosalind

7.浏览器访问

http://本地IP:32769

容器内启动脚本_linux

构建Tomcat容器

Tomcat是一个免费开源的轻量级Web服务器,时开发和调试JSP程序的首选

1.创建工作目录

[root@localhost ~]# mkdir Tomcat
[root@localhost ~]# cd Tomcat/

需要把jdk软件包下载解压到工作目录

[root@localhost Tomcat]# tar zxf jdk-8u91-linux-x64.tar.gz 
[root@localhost Tomcat]# ls
jdk1.8.0_91  jdk-8u91-linux-x64.tar.gz

2.创建Dockerfile文件

[root@localhost Tomcat]# vim Dockerfile
FROM centos  // 设置基础镜像
MAINTAINER the centos project <--大哥专属--> // 维护该镜像的用户信息
ADD jdk1.8.0_91 /usr/local/jdk-8u91   // 设置JDK环境变量
ENV JAVA_HOME  /usr/local/jdk-8u91
ENV JAVA_BIN    /usr/local/jdk-8u91/bin
ENV JRE_HOME    /usr/local/jdk-8u91/jre
ENV PATH $PATH:/usr/local/jdk-8u91/bin:/usr/local/jdk-8u91/jre/bin
ENV CLASSPATH /usr/local/jdk-8u91/jre/bin:/usr/local/jdk-8u91/lib:/usr/local/jdk-8u91/jre/lib/charsets.jar
RUN yum install -y wget  // 安装wget工具
RUN wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.53/bin/apache-tomcat-8.5.53.tar.gz  //下载tomcat软件包,注意此软件的版本号
RUN tar zxf apache-tomcat-8.5.53.tar.gz  // 加压tomcat并移动到相应位置
RUN mv apache-tomcat-8.5.53 /usr/local/tomcat
EXPOSE 8080   // 开启8080 端口
ADD run.sh /run.sh  // 启动容器时添加执行脚本
RUN chmod 775 /run.sh
CMD ["/run.sh"]

3.编写执行脚本内容

[root@localhost Tomcat]# vim run.sh
#!/bin/bash
/usr/local/tomcat/bin/startup.sh
tailf /tun

4.用Dockerfile生成镜像

[root@localhost Tomcat]# docker build  -t tomcat:wyjx .

5.运行容器并验证

[root@localhost tomcat]# docker run -d --name zsTOMCAT -p 80:8080 tomcat:zhangsan     //映射本地的80端口到容器的8080端口
9e1fdc4d3eb8420224f5481535c5ff1387a14a8a1abd700153c6ae48a3ad1303
[root@localhost tomcat]# firefox http://192.168.1.10:80

构建MySQL容器

1.下载基础镜像并创建工作目录

[root@localhost media]# docker pull   centos //从互联网上下载镜像的命令

此处用本地的(光盘上)

[root@localhost media]# docker load   <centos6
5d574ede99e4: Loading layer [==================================================>]   202 MB/202 MB
b077477046f8: Loading layer [==================================================>] 35.54 MB/35.54 MB
b244861945e8: Loading layer [==================================================>] 2.048 kB/2.048 kB
Loaded image: docker.io/guyton/centos6:latest
[root@localhost ~]# mkdir mysql
[root@localhost ~]# cd mysql/

2.创建Dockerfile文件

[root@localhost mysql]# vim Dockerfile
FROM guyton/centos6   //设置基础镜像
MAINTAINER the centos  //维护该镜像的用户信息
RUN yum install -y mysql mysql-server // 安装mysql数据库软件包
RUN /etc/init.d/mysqld start &&\   // 开启mysql服务,并进行授权
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   // 开启3306端口
CMD ["mysqld_safe"]  // 运行初始化脚本mysqld_safe

3.用Dockerfile生成镜像

[root@localhost mysql]# docker  build  -t  mysqlwyjx  .
如果有报错请使用这条命令
[root@localhost mysql]# docker  build --network=host -t  mysqlwyjx  .

4.运行容器验证

[root@localhost mysql]# docker run -d -P mysql:wyjx 
b0cd33a6cfe9ba5ca8789f6a38e49d7bcc3455423cf7382471cc4166f743551b

运行中出现错误:请执行

[root@localhost ~]#systemctl start docker  //启动  
[root@localhost ~]# sudo systemctl daemon-reload//守护进程重启   
[root@localhost ~]#systemctl restart  docker  //重启docker服务
[root@localhost ~]#sudo service docker restart  //重启docker服务
[root@localhost ~]#  service docker stop     //关闭docker   
[root@localhost ~]#systemctl stop docker  //关闭docker 
[root@localhost ~]#systemctl  start docker   // 启动docker
然后在重新运行容器就可以正常要运行了

查看容器运行状态

[root@localhost ~]# docker ps  -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                     NAMES
b0cd33a6cfe9        mysql:wyjx          "mysqld_safe"            18 minutes ago      Up 18 minutes               0.0.0.0:32768->3306/tcp   dreamy_poincare

5.从本地主机登录MySQL数据库进行验证

在此使用MySQL时需要 yum install mysql 安装mariaDB客户端

YUM路径保持原先状态文件在进行yum  mysql
[root@localhost yum.repos.d]# ls
CentOS-Base.repo  CentOS-CR.repo  CentOS-Debuginfo.repo  CentOS-fasttrack.repo  CentOS-Media.repo  CentOS-Sources.repo  CentOS-Vault.repo

安装mysql

[root@localhost ~]# yum -y install mysql

登录验证

[root@localhost ~]# mysql -h 192.168.1.131 -u root -P 32768 -p123456
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+
3 rows in set (0.00 sec)

MySQL [(none)]> exit
Bye