docker -dockerFile总结

Posted hequnwang10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker -dockerFile总结相关的知识,希望对你有一定的参考价值。

DockerFile介绍

dockerfile是用来构建docker镜像的文件!命令参数脚本!

构建步骤:

  • 编写一个dockerfile文件
  • docker build 构建称为一个镜像
  • docker run运行镜像
  • docker push发布镜像(DockerHub 、阿里云仓库)

DockerFile构建过程

基础知识:

  • 每个保留关键字(指令)都必须是大写字母
  • 执行从上到下顺序执行
  • /# 表示注释
  • 每一个指令都会创建提交一个新的镜像层,并提交!

步骤:开发,部署,运维

  • DockerFile : 构建文件,定义了一切的步骤,源代码

  • DockerImages : 通过DokerFile构建生成的镜像,是最终发布和运行的产品

  • Docker容器:容器就是镜像运行起来提供服务器

1、DockerFile的指令

FROM				# 基础镜像,一切从这里开始构建
MAINTAINER	# 镜像是谁写的, 姓名+邮箱
RUN					# 镜像构建的时候需要运行的命令
ADD					# 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
WORKDIR			# 镜像的工作目录
VOLUME			# 挂载的目录
EXPOSE			# 保留端口配置
CMD					# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT	# 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD			# 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。
COPY				# 类似ADD,将我们文件拷贝到镜像中
ENV					# 构建的时候设置环境变量!

2、案例

创建自己的镜像实例

# 1.编写Dockerfile的文件
FROM centos
MAINTAINER dainel<dlgnjupt@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "-----end----"
CMD /bin/bash

# 2.通过这个文件构建镜像
# 命令 docker build -f 文件路径 -t 镜像名:[tag] .
docker build -f mydockerfile-centos -t mycentos:0.1 .

Successfully built 4af56313b71a
Successfully tagged mycentos:0.1

# 3.测试运行

CMD 和 ENTRYPOINT区别

测试cmd

# 编写dockerfile文件
 vim dockerfile-test-cmd
 FROM centos
CMD ["ls","-a"]
# 构建镜像
docker build -f dockerfile-cmd-test -t cmdtest .
# 运行镜像
docker run f6a946a8a24e
# 想追加一个命令  -l 成为ls -al
docker run f6a946a8a24e -l  #报错,不能追加命令
# cmd的情况下 -l 替换了CMD["ls","-l"]。 -l  不是命令所有报错

测试ENTRYPOINT

# 编写dockerfile文件
vim dockerfile-test-entrypoint
FROM centos
ENTRYPOINT ["ls","-a"]

# 构建镜像
docker build -f dockerfile-cmd-entrypoint -t entrypoint .
# 运行镜像
docker run a8dedd41d3d0
# 想追加一个命令  -l 成为ls -al
 docker run a8dedd41d3d0 -l
 #追加成功,是直接拼接在我们得ENTRYPOINT命令后面的

3、案例tomcat镜像

准备镜像文件 tomcat压缩包,jdk压缩包

root@vm:/home/whq/build/tomcat# ls
apache-tomcat-10.0.4.tar.gz  jdk-8u291-linux-x64.tar.gz  readme.txt

编写dockerfile文件,官方命名Dockerfile,build会自动寻找这个文件,就不需要-f指定了!

vim Dockerfile


##内容
FROM centos
MAINTAINER whq<ahuwhq@163.com> 

COPY readme.txt /usr/local/readme.txt #复制文件

ADD jdk-8u291-linux-x64.tar.gz /usr/local#复制解压
ADD apache-tomcat-10.0.4.tar.gz /usr/local#复制解压

RUN yum -y install vim

ENV MYPATH /usr/local #设置环境变量
WORKDIR $MYPATH#设置工作目录

ENV JAVA_HOME /usr/local/jdk1.8.0_11#设置环境变量
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar#设置环境变量
ENV CATALINA_HOME /usr/local/apache-tomcat-10.0.4
ENV CATALINA_BASH /usr/local/apache-tomcat-10.0.4
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin#设置环境变量 分隔符是:

EXPOSE 8080 #设置暴露的端口

CMD /usr/local/apache-tomcat-10.0.4/bin/startup.sh && tail -F /usr/local/apache-tomcat-10.0.4/bin/logs/catalina.out# 设置默认命令

FROM centos
MAINTAINER whq<ahuwhq@163.com>

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u291-linux-x64.tar.gz /usr/local
ADD apache-tomcat-10.0.4.tar.gz /usr/local

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_291
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-10.0.4
ENV CATALINA_BASH /usr/local/apache-tomcat-10.0.4
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-10.0.4/bin/startup.sh && tail -F /usr/local/apache-tomcat-10.0.4/bin/logs/catalina.out

#构建镜像
# 因为dockerfile命名使用默认命名 因此不用使用-f 指定文件
docker build -t diytomcat .
#启动镜像
docker run -d -p 9099:8080 --name ahuwhq01tomcat -v /home/whq/build/tomcat/test:/usr/local/apache-tomcat-10.0.4/webapps/test -v /home/whq/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-10.0.4/logs diytomcat

访问测试

一些出错的点

  • curl: (7) Failed to connect to localhost port 8080: Connection refused

这里发现使用curl localhost:9099 和容器外部使用curl localhost:8080访问不了

解决方法:
1、查看java -version  如果是openjdk请卸载干净
sudo apt-get remove openjdk*
source /etc/profile
2、对应查看安装java8
java -version
3、查看Dockerfile文件的环境变量
首先进入容器ls查看jdk1.8.0_291,则将ENV JAVA_HOME /usr/local/jdk1.8.0_291
修改文件。
4、卸载容器镜像,然后在重新安装一遍就可以解决了。
此时在外网就可以访问apache了。

发布项目

# 进入test文件夹创建WEB-INF
cd test/
mkdir WEB-INF
cd WEB-INF/
#创建web.xml文件
vim web.xml
#web.xml内容
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

</web-app>

#回到test目录
cd ..
#创建index.jsp文件
vim index.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hello !</title>
</head>
<body>
Hello World!<br/>
<%
out.println("你的项目部署成功 ");
%>
</body>
</html>

在这里插入图片描述
ip:9099/test
在这里插入图片描述
产看日志:

cd ../tomcatlogs/
ls
 cat catalina.out

在这里插入图片描述
发现:项目部署成功,可以直接访问!

发布自己的镜像Dockerhub

1、地址 https://hub.docker.com/

2、确定这个账号可以登录

3、登录

$ docker login --help
Usage:  docker login [OPTIONS] [SERVER]

Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.

Options:
  -p, --password string   Password
      --password-stdin    Take the password from stdin
  -u, --username string   Username

4、提交 push镜像

# 会发现push不上去,因为如果没有前缀的话默认是push到 官方的library
# 解决方法
# 第一种 build的时候添加你的dockerhub用户名,然后在push就可以放到自己的仓库了
$ docker build -t chengcoder/mytomcat:0.1 .
# 第二种 使用docker tag #然后再次push
$ docker tag 容器id chengcoder/mytomcat:1.0 #然后再次push

以上是关于docker -dockerFile总结的主要内容,如果未能解决你的问题,请参考以下文章

Docker教程-1-学习及安装Docker

Docker教程-1-学习及安装Docker

Docker03 Docker基础知识Docker实战

Docker学习__docker命令[docker version 和 docker info]

[转帖]Docker里运行Docker docker in docker(dind)

docker 定时清理docker容器日志