Docker学习笔记 (14)

image-20210208122258308

2. 创建一个自己的centos # 1./home下新建dockerfile目录 $ mkdir dockerfile # 2. dockerfile目录下新建mydockerfile-centos文件 $ vim mydockerfile-centos # 3.编写Dockerfile配置文件 FROM centos # 基础镜像是官方原生的centos MAINTAINER cao<1165680007@qq.com> # 作者 ENV MYPATH /usr/local # 配置环境变量的目录 WORKDIR $MYPATH # 将工作目录设置为 MYPATH RUN yum -y install vim # 给官方原生的centos 增加 vim指令 RUN yum -y install net-tools # 给官方原生的centos 增加 ifconfig命令 EXPOSE 80 # 暴露端口号为80 CMD echo $MYPATH # 输出下 MYPATH 路径 CMD echo "-----end----" CMD /bin/bash # 启动后进入 /bin/bash # 4.通过这个文件构建镜像 # 命令: docker build -f 文件路径 -t 镜像名:[tag] . $ docker build -f mydockerfile-centos -t mycentos:0.1 . # 5.出现下图后则构建成

image-20210208122919124

$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mycentos 0.1 cbf5110a646d 2 minutes ago 311MB # 6.测试运行 $ docker run -it mycentos:0.1 # 注意带上版本号,否则每次都回去找最新版latest $ pwd /usr/local # 与Dockerfile文件中 WORKDIR 设置的 MYPATH 一致 $ vim # vim 指令可以使用 $ ifconfig # ifconfig 指令可以使用 # docker history 镜像id 查看镜像构建历史步骤 $ docker history 镜像id

image-20210208123119152

image-20210208123129808

我们平时拿到一个镜像,可以用 “docker history 镜像id” 研究一下是什么做的

3. CMD 和 ENTRYPOINT区别 CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。 ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令

测试cmd

# 编写dockerfile文件 $ vim dockerfile-test-cmd FROM centos CMD ["ls","-a"] # 启动后执行 ls -a 命令 # 构建镜像 $ docker build -f dockerfile-test-cmd -t cmd-test:0.1 . # 运行镜像 $ docker run cmd-test:0.1 # 由结果可得,运行后就执行了 ls -a 命令 . .. .dockerenv bin dev etc home # 想追加一个命令 -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 build -f dockerfile-test-entrypoint -t cmd-test:0.1 . # 运行镜像 $ 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中很多命令都十分的相似,我们需要了解它们的区别,我们最好的学习就是对比他们然后测试效果!

11. 实战:Tomcat镜像 1、准备镜像文件 # 准备tomcat 和 jdk 到当前目录,编写好README 2、编写dokerfile $ vim dockerfile FROM centos # 基础镜像centos MAINTAINER ANTI<1036858967@qq.com> # 作者 COPY README /usr/local/README # 复制README文件 ADD jdk-8u231-linux-x64.tar.gz /usr/local/ # 添加jdk,ADD 命令会自动解压 ADD apache-tomcat-9.0.35.tar.gz /usr/local/ # 添加tomcat,ADD 命令会自动解压 RUN yum -y install vim # 安装 vim 命令 ENV MYPATH /usr/local # 环境变量设置 工作目录 WORKDIR $MYPATH ENV JAVA_HOME /usr/local/jdk1.8.0_231 # 环境变量: JAVA_HOME环境变量 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.35 # 环境变量: tomcat环境变量 ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.35 # 设置环境变量 分隔符是: ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 # 设置暴露的端口 CMD /usr/local/apache-tomcat-9.0.35/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.35/logs/catalina.out # 设置默认命令 3、构建镜像 # 因为dockerfile命名使用默认命名 因此不用使用-f 指定文件 $ docker build -t mytomcat:0.1 . 4、run镜像 # -d:后台运行 -p:暴露端口 --name:别名 -v:绑定路径 $ docker run -d -p 8080:8080 --name tomcat01 -v /home/kuangshen/build/tomcat/test:/usr/local/apache-tomcat-9.0.35/webapps/test -v /home/kuangshen/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.35/logs mytomcat:0.1 5、访问测试 $ docker exec -it 自定义容器的id /bin/bash $ cul localhost:8080 6、发布项目

(由于做了卷挂载,我们直接在本地编写项目就可以发布了!)

发现:项目部署成功,可以直接访问!

我们以后开发的步骤:需要掌握Dockerfile的编写!我们之后的一切都是使用docker镜像来发布运行!

12. 发布自己的镜像 12.1 发布到 Docker Hub

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

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxyyx.html