不求甚解

此博客为个人学习之用,如与其他作品雷同,纯属巧合。

导航

docker学习笔记三

Posted on 2021-03-04 13:50  三年三班王小朋  阅读(62)  评论(0编辑  收藏  举报

DockerFile  是用来构建Docker镜像的构建文件,是由一些列命令和参数构成的脚本。

构建步骤: 1、编写Dockerfile文件  2、docker build  3、docker run

Dockerfile内容基础知识

1:每条保留字指令都必须为答谢字母且后面要跟随至少一个参数

2:指令按照从上到下,顺序执行

3:#表示注释

4:每条指令都会创建一个新的镜像层,并对镜像进行提交

github docker centos构建文件

FROM scratch
ADD centos-7-x86_64-docker.tar.xz /

LABEL \
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20201113" \
    org.opencontainers.image.title="CentOS Base Image" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-11-13 00:00:00+00:00"

CMD ["/bin/bash"]

 Docker执行Dockerfile大大概流程

1:docker从基础镜像运行一个容器

2:执行一条执行并对容器作出修改

3:执行类似docker commit的操作提交一个新的镜像层

4:docker再基于于刚提交的镜像运行一个新容器

5:执行dockerfile中的下一条执行知道所有指令都执行完成

Dockfile保留字指令

Dockerfile(保留字指令):

FROM  基础镜像,当前新镜像是基于哪个镜像的

MAINTAINER  镜像维护者的姓名和 邮箱地址   zzyy<chinaidc@cc.com>

RUN  容器构建是需要运行的命令

EXPOSE   当前容器对外暴露的端口号

WORKDIR  指定在创建容器后,终端默认登录进来的工作目录,一个落脚点

ENV  用来在构建镜像过程中设置环境变量

ADD  宿主机目录下文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包 

COPY  类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录复制到新的一层镜像内的<目标路径>位置

VOLUME  容器数据卷,用于保存数据和持久化工作

CMD  指定一个容器启动是要运行的命令。Dockerfile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run 之后的参替换

ENTRYPOINT  同上,但ENTRYPOINT会被docker run 之后的参数追加

ONBUILD  当构建一个被继承的dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

实例

1、编写 Dockerfile1   

FROM centos
MAINTAINER wxp<chinaidc@cc.com>
ENV MYPATH /tmp    
WORKDIR     $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD /bin/bash

 

2、构建镜像wxp/centos:1.3          镜像名:TAG

docker build -f /mydocker/Dockerfile1 -t wxp/centos:1.3 .

 

 3、运行镜像     

docker run -it wxp/centos:1.3

CMD和ENTRYPOINT区别

docker 本地镜像导入和保存的方法

 docker save -o rocketmq.tar rocketmq ##-o:指定保存的镜像的名字;rocketmq.tar:保存到本地的镜像名称;rocketmq:镜像名字
docker save -o hello-world.tar hello-world

 

docker load --input rocketmq.tar 或 docker load < rocketmq.tar

docker rmi -f bf756fb1ae65 
docker load < hello-w.tar
docker rmi -f bf756fb1ae65
docker load --input hello-w.tar

 

 

centos7 docker搭建tomcat 问题解决方法

 1、创建linux宿主机文件夹用于存储tomcat容器中复制出来的配置文件。

mkdir -pv /www/tomcat
cd /www/tomcat

复制tomcat容器配置文件

docker exec -it 容器名字(或容器container id) bash

docker cp 98ef9a0b5e52:/usr/local/tomcat/conf/tomcat-users.xml tomcat-users.xml
docker cp 98ef9a0b5e52:/usr/local/tomcat/webapps.dist webapps
tree -if -L 2 /www/tomcat #目录结构如下

/www/tomcat

  ├── tomcat-users.xml

  └── webapps

   ├── docs

   ├── examples

   ├── host-manager

   ├── manager

   └── ROOT

 2、修改复制出来的文件 tomcat-users.xml配置权限,webapps/manager/META-INF/context.xml 配置访问地址和端口等。

编辑tomcat-usrs.xml,底部</tomcat-users>以内添加如下内容,其中授权访问账号为:tomcat,密码为:tomcat.2019

  <role rolename="manager-gui" />
  <role rolename="manager-script" />
  <role rolename="manager-status" />
  <role rolename="manager-jmx" />
  <user username="tomcat" password="tomcat.2019" roles="manager-gui,manager-script,manager-status,manager-jmx" />

 切进/webapps/manager/META-INF文件夹,编辑里面的context.xml文件,将以下内容注释掉。

<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->

 

3、重新运行一个tomcat容器,并挂载本地的配置文件到容器对应文件。

docker run -dit --name my_tomcat -p 7777:8080 --restart=always -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime:ro -v /www/tomcat/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml -v /www/tomcat/webapps:/usr/local/tomcat/webapps tomcat

 

参数解析:
-d 后台运行容器,并返回容器ID;
--name 为容器起一个容易区分且容易书写的名字
-p 映射宿主机端口到容器端口,宿主机端口:容器端口
--restart=always 机器重启时自动启动容器
-e       设定一些必须的环境变量。本例子中 -e TZ="Asia/Shanghai" 设定时区为上海,强烈建议国内设定,否则容器内打印的所有日志时间都会差8小时。
-v       挂载宿主机文件到容器。本例三个分别为:
          -v /etc/localtime:/etc/localtime:ro 挂载宿主机时间,保持容器时间正确。
          -v /www/tomcat/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml 挂载宿主机配置文件到容器。
          -v /www/tomcat/webapps:/usr/local/tomcat/webapps 挂载宿主机/webapps到容器。

4、重新访问ip:7777,便可以访问页面


 

 小总结