一、从已经创建的容器中更新镜像,并提交这个镜像
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
m:提交信息
a:作者
e218edb10161:容器id,被改造的容器id
runoob/ubuntu:v2:构建完成后容器的tag
二、通过Dockerfile指令来创建镜像
DockerFile指令
FROM #指定基础镜像,一切从这里开始构建
MAINTAINER #创建者信息,一般是名字+邮箱形式
RUN #镜像构建的时候需要运行的命令
ADD #将文件添加到容器,会自动解压
COPY #将文件拷贝到容器
WORKDIR #镜像的工作目录
VOLUME #挂载卷
EXPOSE #暴露端口
CMD #指定这个容器启动时要运行的命令,Dockerfile中只能写一条CMD指令,如果多条,只有最后一条生效,CMD能够被docker run后面跟的命令行参数替换
ENTRYPOINT #指定这个容器启动时要运行的命令,Dockerfile中只能写一条ENTRYPOINT指令,如果多条,只有最后一条生效,ENTRYPOINT不能够被docker run后面跟的命令行参数替换,但是该命令行参数可以作为追加参数
ONBULID #当构建一个被集成的DockerFile,这个时候就会运行onbulid的指令,触发指令
ENV #构建的时候设置环境变量
实践一、制作自己的centos镜像
# 1.编写dockerfile文件
[root@amumu zzl-dockerfile]# cat centos-dockerfile
FROM centos
MAINTAINER zhuzhonglang<[email protected]>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum install vim -y
RUN yum install net-tools -y
EXPOSE 8090
CMD echo $MYPATH
CMD echo '-----------end----------'
CMD /bin/bash
# 2.创建镜像
[root@amumu zzl-dockerfile]# docker build -f centos-dockerfile -t mycentos:1.0 .
[root@amumu zzl-dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos 1.0 ff0a2b5b0669 3 minutes ago 291MB
mysql 5.7 87eca374c0ed 3 weeks ago 447MB
nginx latest 62d49f9bab67 4 weeks ago 133MB
centos latest 300e315adb2f 5 months ago 209MB
# 3.启动自己创建的镜像
[root@amumu zzl-dockerfile]# docker run -it ff0a2b5b0669 /bin/bash
# 4.进入容器后工作目录为/usr/local,这个目录正是我构建镜像时设置好的WORKDIR
[root@49d1ec65f8ed local]# pwd
/usr/local
# 5.验证ifconig命令存在,因为构建镜像时我执行了如下命令:RUN yum install net-tools -y
[root@49d1ec65f8ed local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.4 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:04 txqueuelen 0 (Ethernet)
RX packets 7 bytes 578 (578.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
实践二、制作Tomcat镜像
# 1.制作镜像用到的文件:tomcat,jdk,centos,readme.txt
[root@amumu tomcat]# pwd
/data/tomcat
[root@amumu tomcat]# ls
apache-tomcat-9.0.45 apache-tomcat-9.0.45.tar.gz Dockerfile jdk1.8.0_251 jdk-8u251-linux-x64.tar.gz readme.txt
[root@amumu tomcat]#
# 2.编写Dockerfile文件,文件名用官方推荐的文件名Dockerfile,这样在执行docker build时不需要通过-f指定文件
[root@amumu tomcat]# vi Dockerfile
FROM centos
MAINTAINER zhuzhonglang<[email protected]>
COPY readme.txt /usr/local
ADD apache-tomcat-9.0.45.tar.gz /usr/local
ADD jdk-8u251-linux-x64.tar.gz /usr/local
RUN yum install vim -y
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_251
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.45
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.45
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.45/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.45/bin/logs/catalina.out
# 3.制作镜像
[root@amumu tomcat]# docker build -t zhuzhonglang/mytomcat:9.0 .
# 4.运行镜像
[root@amumu tomcat]# docker run -d -p 8001:8080 --name=mytomcat -v /data/tomcat/test:/usr/local/apache-tomcat-9.0.45/webapps/test -v /data/tomcat/tomcatlogs:/usr/local/apache-tomcat-9.0.45/logs zhuzhonglang/mytomcat:9.0
ffde51f5b923ce6dec834a8f068c0c6c360f37b5c5d1586232e2da34c8986abc
[root@amumu tomcat]#
# 5.如果启动容器后出现立刻退出,这时需要查看日志
我们可以通过如下命令来获取容器的日志地址docker inspect --format '{
{.LogPath}}' ffde51f5b92
然后通过cat命令查看上述命令找到的日志地址
或者通过如下命令也可:docker logs ffde51f5b92 # 查看容器的日志
# 6. 访问Tomcat
[root@amumu tomcat]# curl localhost:8001