docker进阶

一、Dockerfile

1.1 构建过程解析

基础知识

  1. 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  2. 指令按照从上到下,顺序执行
  3. #表示注释
  4. 每条指令都会创建一个新的镜像层并对镜像进行提交

Docker执行Dockerfile的大致流程

  1. docker从基础镜像运行一个容器
  2. 执行一条指令并对容器作出修改
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. docker再基于刚提交的镜像运行一个新容器
  5. 执行dockerfile中的下一条指令直到所有指令都执行完成

1.2 Dockerfile的保留字介绍

  •  FROM:基础镜像,当前镜像是基于哪个镜像的,指定一个已经存在的镜像作为模版,第一条必须是from
  • MAINTAINER:镜像维护者的姓名和邮箱地址
  • RUN:容器构建需要运行的命令
    • shell格式:RUN <命令行命令>:等同于终端操作的shell命令
    • exec格式:RUN ["可执行文件",“参数1”,“参数2”]
  • EXPOSE:当前容器对外暴露端口
  • WORKDIR:指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
  • USER:指定该镜像以什么样的用户去执行,如果都不指定,默认是root
  • ENV:用来在构建镜像过程中设置环境变量,这个环境变量在后续任何的RUN指令中可以使用,ENV MY_PATH /usr/mytest,WORKDIR $MY_PATH
  • VOLUME:容器卷,用于数据保存和持久化工作
  • ADD:将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
  • COPY:将宿主机目录下的文件和目录拷贝到镜像,COPY SRC DEST
  • CMD:指定容器启动后干的事情
    • shell格式:CMD <命令行命令>:等同于终端操作的shell命令
    • exec格式:CMD ["可执行文件",“参数1”,“参数2”]
    • dockerfile可以有多个cmd参数,但只有最后一个指令生效,cmd会被docker run之后的参数替换
    • 和run的区别:cmd是在docker run时运行,run是在docker build时运行
  • ENTRYPOINT:一个容器启动时要运行的命令,类似cmd,但该指令不会被docker run之后的指令覆盖
    • ENTRYPOINT ["执行的命令",“参数1”,“参数2”],可以和CMD一起使用,一般是变参才会使用CMD,这里CMD等同于在给ENTRYPOINT传参数。当指定了ENTRYPOINT后,CMD的含义就发生了变化,不再是直接运行其命令而是将CMD的内容作为参数传递给ENTRYPOINT指令,他两个组合会变成 <ENTRYPOINT> "CMD"

1.3 Dockerfile构建centos

(1)构建Dockerfile

FROM centos:7
MAINTAINER yyds

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

RUN yum -y install glibc.i686
RUN mkdir /usr/local/java

ADD jdk-8u201-linux-x64.tar.gz /usr/local/java/

ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH


EXPOSE 80

CMD echo $MYPATH
CMD echo "success-------ok"
CMD /bin/bash

(2)执行构建命令 

docker build -t 镜像名:版本号 .

docker build -t mycentos:1.0 .

(3)运行镜像

docker run -it 新镜像名字:TAG

二、docker network

docker默认创建三大网络模式

bridge模式:--network bridge指定,默认使用docker0

host模式:--network host指定

none模式:--network none指定

container模式:--network container:NAME或容器ID指定

docker网络的作用:

  • 容器间的互联和通信以及端口映射
  • 容器IP变动时候可以通过服务名直接网络通信而不受到影响

2.1 docker network之host模式

docker run -d  --network host --name tomcat83 tomcat

注意:在host模式通过-p设置端口映射不会起到任何作用,端口号以主机端口号为主

2.2 docker network之bridge

        Docker服务默认会创建一个docker0网桥(其上有一个docker0内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这将所有容器和本地主机都放到同一个物理网络。Docker默认指定了docker0接口的IP地址和子网掩码,让主机和容器之间可以通过网桥互相通信。

2.3 docker network之none

        在none模式下,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息,只有一个lo需要我们自己为Docker容器添加网卡、配置IP等。

2.4  docker network之container

2.5  docker network之自定义网络

  • docker network ls 列出当前的网络
  • docker network create name:创建一个自定义网络
  • 自定义网络本身维护了主机名和IP的对应关系

三、docker compose 容器编排

3.1 docker compose的作用

        docker compose负责容器集群的快速编排,定义一个YAML格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动或关闭这些容器。

3.2 docker compose的安装

sudo yum update
sudo yum install docker-compose-plugin
docker compose version

chmod +x /usr/local/bin/docker-compose

3.3 docker compose的使用

  • 编写Dockerfile定义各个微服务应用并构建出对应的镜像文件
  • 使用docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务
  • 最后,使用 docker-compose up命令来启动并运行整个应用程序,完成一键部署上线

注意:插件形式的安装 命令不带- 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值