Docker06dockerfile
目录
什么是DockerfIle? #
Dockerfile 就是用来构建 Docker 镜像
的构建文件。一种命令脚本。通过这个脚本可以生成镜像,镜像是一层层的,脚本也是一个个的,每个命令都是一层。
创建Dockerfile #
创建一个 dokcerfile 文件,名字建议为 Dockerfile
。
FROM centos
VOLUME ["volume01","volume02"] #匿名挂载
CMD echo "----end---"
CMD /bin/bash
将 Dockerfile
文件导入服务器后,执行 build
指令。
# docker build -f Dockerfile文件路径 -t 自己定的镜像名:[tag] .(注意这里有个“ . ”!!!)
#注意一定要切换到 dockerfile 所在的目录再进行构建!!
[root@izwz91mv6i3x6k12jjqh60z /]# cd /home/test
#执行命令
[root@izwz91mv6i3x6k12jjqh60z test]# docker build -f /home/test/Dockerfile -t zhang_new_centos:1.0 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos
---> 300e315adb2f
Step 2/4 : VOLUME ["volume01","volume02"]
---> Running in 07ae0ca19fa0
Removing intermediate container 07ae0ca19fa0
---> 03b0163200ef
Step 3/4 : CMD echo "----end---"
---> Running in b37d23b71e98
Removing intermediate container b37d23b71e98
---> c11c71b6fbb8
Step 4/4 : CMD /bin/bash
---> Running in 55037d2fbe2e
Removing intermediate container 55037d2fbe2e
---> ffc16328649d
Successfully built ffc16328649d
Successfully tagged zhang_new_centos:1.0
#查看构建完成的镜像
[root@izwz91mv6i3x6k12jjqh60z test]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zhang_new_centos 1.0 ffc16328649d 10 seconds ago 209MB
#启动自己写的容器
[root@izwz91mv6i3x6k12jjqh60z test]# docker run -it ffc16328649d /bin/bash
[root@967d6456ecb1 /]# ls -l
total 56
.........
drwxr-xr-x 2 root root 4096 May 14 08:27 volume01 #这目录就是我们生成镜像时自动挂载的数据卷目录
drwxr-xr-x 2 root root 4096 May 14 08:27 volume02 #这目录就是我们生成镜像时自动挂载的数据卷目录
这两个卷一定和主机有同步目录
[root@izwz91mv6i3x6k12jjqh60z test]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
967d6456ecb1 ffc16328649d "/bin/bash" 4 minutes ago Up 4 minutes sharp_goldberg
264b185cbccc nginx "/docker-entrypoint.…" 49 minutes ago Up 49 minutes 0.0.0.0:49154->80/tcp, :::49154->80/tcp nginx02
0f3e16361a94 nginx "/docker-entrypoint.…" 50 minutes ago Up 50 minutes 0.0.0.0:49153->80/tcp, :::49153->80/tcp nginx01
1309cabd368d centos "/bin/bash" 4 hours ago Up 4 hours epic_neumann
39f11d68d64d tomcat "catalina.sh run" 6 hours ago Up 6 hours 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp tomcat02
[root@izwz91mv6i3x6k12jjqh60z test]# docker inspect 967d6456ecb1
镜像发布步骤 #
注意:很多官方镜像都是基础包,我们通常需要搭建自己的镜像
- 编写
Dockerfile
docker build
构建一个镜像docker run
运行一个镜像docker push
发布镜像(DockerHub ,阿里云镜像仓库)
Dockerfile编写过程 #
每一个指令都会提交一个新的镜像层,并提交。
我们以后发布项目做镜像,就需要编写 Dockerfile
文件。
Dockerfile指令 #
编写Dockerfile文件 #
- 对于官方的精简OS,对其进行扩展,添加
vim命令和net-tools
FROM centos
MAINTAINER zhang<[email protected]>
#设置工作目录
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
- 导入 Dockerfile文件到服务器之后,到其所在的目录中执行如下指令:
[root@izwz91mv6i3x6k12jjqh60z test]# docker build -t new_ceontos:1.2 . Sending build context to Docker daemon 2.048kB Step 1/10 : FROM centos ---> 300e315adb2f Step 2/10 : MAINTAINER zhang<[email protected]> ---> Running in 1eff578beeaa Removing intermediate container 1eff578beeaa ---> 8b55dbb5776a Step 3/10 : ENV MYPATH /usr/local ....... Step 10/10 : CMD /bin/bash Successfully built 30e7e21aa1ad Successfully tagged new_ceontos:1.2
- 查看效果:
[root@izwz91mv6i3x6k12jjqh60z test]# docker run -it new_ceontos:1.2 #发现工作目录是 /usr/local [root@653b95461f2b local]# pwd /usr/local #一些命令也可以执行 [root@653b95461f2b local]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.18.0.6 netmask 255.255.0.0 broadcast 172.18.255.255 ether 02:42:ac:12:00:06 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@653b95461f2b local]# vim ~ ~
- 查看镜像的构建历史:
[root@izwz91mv6i3x6k12jjqh60z test]# docker history new_ceontos:1.2 IMAGE CREATED CREATED BY SIZE COMMENT 30e7e21aa1ad 11 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B 76922605002d 11 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B a700583c8e1f 11 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B 84455e325565 11 minutes ago /bin/sh -c #(nop) EXPOSE 80 0B 549ff08ad87d 11 minutes ago /bin/sh -c yum -y install net-tools 14.3MB fc67fe1c8167 11 minutes ago /bin/sh -c yum -y install vim 58MB 4206512d4d06 11 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local 0B f49aff605737 11 minutes ago /bin/sh -c #(nop) ENV MYPATH=/usr/local 0B 8b55dbb5776a 11 minutes ago /bin/sh -c #(nop) MAINTAINER zhang<14046447… 0B 300e315adb2f 5 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 5 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B <missing> 5 months ago /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7… 209MB
制作Tomcat镜像 #
准备镜像文件
tomcat压缩包
,JDK压缩包
将两个安装和
Dockerfile
文件导入服务器编写Dockerfile文件:
FROM centos MAINTAINET zhang<[email protected]> COPY readme.txt /usr/local/readme.txt ADD jdk-8u291-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-10.0.6.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.6 ENV CATALINA_BASH /usr/local/apache-tomcat-10.0.6 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:CATALINA_HOME/bin EXPOSE 8080 CMD /usr/local/apache-tomcat-10.0.6/bin/startup.sh && tail -F /usr/local/apache-tomcat-10.0.6/bin/logs/catalina.out
构建镜像
[root@izwz91mv6i3x6k12jjqh60z test]# ls apache-tomcat-10.0.6.tar.gz dockerfile jdk-8u291-linux-aarch64.tar.gz [root@izwz91mv6i3x6k12jjqh60z test]# docker build -t diytomcat:1.0 .
启动镜像,访问测试
[root@izwz91mv6i3x6k12jjqh60z test]# docker run -d -p 8080:8080 --name test-tomcat -v /home/test/index:/usr/local/apache-tomcat-10.0.6/webapps/test -v /home/test/tomcat-logs/:/usr/local/apache-tomcat-10.0.6/logs diytomcat:1.0 599b8cced9e5026b009a25b993dce1fa51ab2a8523f6604a96202158fb84db16
发布项目(由于做了卷挂载,我们可以直接在本地编写项目就可以发布了): 在主机目录部署一个静态项目测试:
由于我们之前挂载的是
webapps/test
,所以外网访问ip:8080/test
就可以看到效果了。
发布自己的镜像 #
在DockerHub上发布 #
注册一个账号。地址:https://hub.docker.com/
在服务器上登陆 Docker
[root@izwz91mv6i3x6k12jjqh60z ~]# 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
在我们的服务器上提交自己的镜像(
此时镜像的名字要改成----用户名/镜像名
)#直接推送会导致拒绝 [root@izwz91mv6i3x6k12jjqh60z ~]# docker push diytomcat:1.0 The push refers to repository [docker.io/library/diytomcat] a060fcb7eeae: Preparing 68c5e3b0f4b8: Preparing 0593ccf15be8: Preparing 31211d2560f3: Preparing 2653d992f4ef: Preparing denied: requested access to the resource is denied #生成一个 用户名/镜像名 的镜像再把这个镜像推上去 [root@izwz91mv6i3x6k12jjqh60z ~]# docker tag bc8ce317425c zhangruwang/diytomcat [root@izwz91mv6i3x6k12jjqh60z ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE diytomcat 1.0 bc8ce317425c 44 minutes ago 643MB diytomcat latest bc8ce317425c 44 minutes ago 643MB zhangruwang/diytomcat latest bc8ce317425c 44 minutes ago 643MB centos latest 300e315adb2f 5 months ago 209MB #推送成功 [root@izwz91mv6i3x6k12jjqh60z ~]# docker push zhangruwang/diytomcat Using default tag: latest The push refers to repository [docker.io/zhangruwang/diytomcat] a060fcb7eeae: Pushed 68c5e3b0f4b8: Pushed 0593ccf15be8: Pushed 31211d2560f3: Pushed 2653d992f4ef: Pushed latest: digest: sha256:589e18e8e705f3a743ca7838301ec6b8f83c40f1e9b618315c6f4e584a4baaa7 size: 1374
测试下载镜像:
[root@izwz91mv6i3x6k12jjqh60z ~]# docker pull zhangruwang/diytomcat Using default tag: latest latest: Pulling from zhangruwang/diytomcat Digest: sha256:589e18e8e705f3a743ca7838301ec6b8f83c40f1e9b618315c6f4e584a4baaa7 Status: Image is up to date for zhangruwang/diytomcat:latest docker.io/zhangruwang/diytomcat:latest
在阿里云镜像上发布 #
登陆阿里云
找到容器镜像服务
创建命名空间
创建容器镜像
#登陆 [root@izwz91mv6i3x6k12jjqh60z ~]# sudo docker login --username=xxxx registry.cn-beijing.aliyuncs.com 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 #添加 tag [root@izwz91mv6i3x6k12jjqh60z ~]# sudo docker tag bc8ce317425c registry.cn-beijing.aliyuncs.com/sky23333/diytomcat [root@izwz91mv6i3x6k12jjqh60z ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE diytomcat 1.0 bc8ce317425c About an hour ago 643MB diytomcat latest bc8ce317425c About an hour ago 643MB zhangruwang/diytomcat latest bc8ce317425c About an hour ago 643MB registry.cn-beijing.aliyuncs.com/sky23333/diytomcat latest bc8ce317425c About an hour ago 643MB centos latest 300e315adb2f 5 months ago 209MB #推送 [root@izwz91mv6i3x6k12jjqh60z ~]# sudo docker push registry.cn-beijing.aliyuncs.com/sky23333/diytomcat Using default tag: latest The push refers to repository [registry.cn-beijing.aliyuncs.com/sky23333/diytomcat] a060fcb7eeae: Pushed 68c5e3b0f4b8: Pushed 0593ccf15be8: Pushed 31211d2560f3: Pushed 2653d992f4ef: Pushed latest: digest: sha256:589e18e8e705f3a743ca7838301ec6b8f83c40f1e9b618315c6f4e584a4baaa7 size: 1374 #拉取 [root@izwz91mv6i3x6k12jjqh60z ~]# sudo docker pull registry.cn-beijing.aliyuncs.com/sky23333/diytomcat Using default tag: latest latest: Pulling from sky23333/diytomcat Digest: sha256:589e18e8e705f3a743ca7838301ec6b8f83c40f1e9b618315c6f4e584a4baaa7 Status: Image is up to date for registry.cn-beijing.aliyuncs.com/sky23333/diytomcat:latest registry.cn-beijing.aliyuncs.com/sky23333/diytomcat:latest