dockerFile

DockerFile 介绍

Dockerfile是一个文本文档,其中包含用户可以在命令行上调用以组合图像的所有命令。使用docker build 用户可以创建一个自动执行的构建,该构建可以连续执行多个命令行指令。

构建步骤:

1、 编写一个dockerfile文件

2、 docker build 构建称为一个镜像

3、 docker run运行镜像

4、 docker push发布镜像(DockerHub 、阿里云仓库)

DockerFile构建过程

基础知识:

1、每个保留关键字(指令)都是必须是大写字母

2、执行从上到下顺序

3、# 表示注释

4、每一个指令都会创建提交一个新的镜像曾,并提交!

image-20200912124537891

Dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!

Docker镜像逐渐成企业交付的标准,必须要掌握!

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

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

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

DockerFile指令说明

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

					# CMD 和 ENTRYPOINT 的区别说明:(后面也会介绍)
					# 若CMD 和 ENTRYPOINT 后跟的都是 ls -a 这个命令,当docker run 一个容器时,添加了 -l 选项,则CMD里的ls -a 命					令就会被替换成-l;而ENTRYPOINT中的 ls -a会追加-l变成 ls -a -l 

image-20200912124613766

实战: 构建自己的Centos

实战测试

Docker Hub中99%镜像都是从这个基础镜像过来的( FROM scratch ),然后配置需要的软件和配置来构建。

#1.创建一个dockerfile
FROM  centos
MAINTAINER   martin<1634848844@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo"-------build seccessulf!"
CMD /bin/bash

#2.将dokcerfile bulid 成一个镜像
docker build [-f dockerfile路径] -t 镜像名:[tag] .        #若DockerFile文件名字是dockerfile 则可以省略不写
[root@localhost mycentos]# docker build -t mycentos .
Sending build context to Docker daemon  2.048kB
Step 1/9 : FROM  centos
 ---> 0d120b6ccaa8
Step 2/9 : MAINTAINER   martin<1634848844@qq.com>
 ---> Running in 7eb7c03f7c4e
Removing intermediate container 7eb7c03f7c4e
 ---> 6d10910a8d15
Step 3/9 : ENV MYPATH /usr/local
 ---> Running in 9969a7e12c2e
Removing intermediate container 9969a7e12c2e
 ---> 285afe1fd48b
Step 4/9 : WORKDIR $MYPATH
 ---> Running in 97f22270fcec
Removing intermediate container 97f22270fcec
 ---> e32304af7dc4
Step 5/9 : RUN yum -y install vim
Step 6/9 : RUN yum -y install net-tools
Step 7/9 : EXPOSE 80
 ---> Running in f9df5f568fd4
Removing intermediate container f9df5f568fd4
 ---> 7d3a9cf3114b
Step 8/9 : CMD echo"-------build seccessulf!"
 ---> Running in 1edaa05c360d
Removing intermediate container 1edaa05c360d
 ---> d9515e3eae93
Step 9/9 : CMD /bin/bash
 ---> Running in 59641c982f81
Removing intermediate container 59641c982f81
 ---> ed74c68370bd
Successfully built ed74c68370bd
Successfully tagged mycentos:latest

#3测试运行

image-20200912151333903

image-20200912151600304

CMD和ENTRYPOINT的区别

测试CMD

# 编写dockerfile文件
$ vim dockerfile-test-cmd
FROM centos
CMD ["ls","-a"]
# 构建镜像
$ docker build  -f dockerfile-test-cmd -t cmd-test:0.1 .
# 运行镜像
$ docker run cmd-test:0.1
.
..
.dockerenv
bin
dev

# 想追加一个命令  -l 成为ls -al
$ docker run cmd-test:0.1 -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: "-l":
 executable file not found in $PATH": unknown.
ERRO[0000] error waiting for container: context canceled 
# cmd的情况下 -l 替换了CMD["ls","-l"]。 -l  不是命令,所以报错

测试ENTRYPOINT

# 编写dockerfile文件
$ vim dockerfile-test-entrypoint
FROM centos
ENTRYPOINT ["ls","-a"]
$ docker run entrypoint-test:0.1
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found ...
# 我们的命令,是直接拼接在我们的ENTRYPOINT命令后面的
$ docker run entrypoint-test:0.1 -l
total 56
drwxr-xr-x   1 root root 4096 May 16 06:32 .
drwxr-xr-x   1 root root 4096 May 16 06:32 ..
-rwxr-xr-x   1 root root    0 May 16 06:32 .dockerenv
lrwxrwxrwx   1 root root    7 May 11  2019 bin -> usr/bin
drwxr-xr-x   5 root root  340 May 16 06:32 dev
drwxr-xr-x   1 root root 4096 May 16 06:32 etc
drwxr-xr-x   2 root root 4096 May 11  2019 home
lrwxrwxrwx   1 root root    7 May 11  2019 lib -> usr/lib
lrwxrwxrwx   1 root root    9 May 11  2019 lib64 -> usr/lib64 ....

DockerFile制作tomcat 镜像

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

img

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

FROM centos
MAINTAINER kuangshen<123456@qq.com>

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

ADD jdk-8u161-linux-x64.tar.gz    /usr/local/
ADD apache-tomcat-8.0.53.tar.gz   /usr/local

RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH


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

EXPOSE 8080

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

3、构建镜像

# docker build -t diytomcat .     diytomcat是定义的镜像名

4、启动镜像,创建容器

# docker run -d -p 9090:8080 --name kuangshentomcat02 -v /home/kuangshen/build/tomcat/test:/usr/local/apache-tomcat-8.0.53/webapps/test -v /home/kuangshen/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-8.0.53/logs diytomcat

5、访问测试

发布镜像到DockerHub

Docker Hub

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

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

3、在我们服务器上提交自己的镜像

#1.登录dockerhub
[root@localhost mycentos]# docker login -u 1634848844
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

2.上传镜像
[root@localhost ~]# docker push mycentos
The push refers to repository [docker.io/library/mycentos]
f7e6bad32f2f: Preparing 
b372a66da4c4: Preparing 
291f6e44771a: Preparing 
denied: requested access to the resource is denied   #出现了问题

解决:增加一个tag         docker tag  指定镜像的id   dockerhub的用户名/镜像重命名:[tag]

[root@localhost ~]# docker tag ed74c68370bd 1634848844/mycentos:1.0
[root@localhost ~]# docker push 1634848844/mycentos:1.0
The push refers to repository [docker.io/1634848844/mycentos]
f7e6bad32f2f: Pushed 
b372a66da4c4: Pushed 
291f6e44771a: Mounted from library/centos 

1.0: digest: sha256:a7d31f4cf05ec7b5eeb824c00589f7c83ef3c966fc0247157345b9a4fea0ba89 size: 953


注意:镜像的重命名前一定要加当前的dockerhub的用户名,否则将会push失败!!!!

发布镜像到阿里云容器服务

docker所有流程小结

image-20200912155438051

*************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
原文地址:https://www.cnblogs.com/martin-huang/p/13683585.html