docker进阶
1.DockerFile解析
1.是用来构建docker镜像的文本文件, 是由一条条构建镜像所需的指令和参数构成的脚本。 2.概述
3.官网 https://docs.docker.com/engine/reference/builder/ 4.构建步骤
5.Dockerfile构建过程解析
1 Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服 务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等; 2 Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时会真正开始提供服务; 3 Docker容器,容器是直接提供服务的。 6.docker常用保留字指令
RUN yum -y install vim
ENV MY_PATH /usr/mytest 这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样; 也可以在其它指令中直接使用这些环境变量, 比如:WORKDIR $MY_PATH
|
7.DockerFile案例
- Centos7镜像具备vim+ifconfig+jdk8
- JDK的下载镜像地址 https://www.oracle.com/java/technologies/downloads/#java8
- 编写Dockerfile文件 执行 docker build -t centosjava8:1.5 . (后边要加 点)
-
FROM centos
MAINTAINER zzyy<zzyybs@126.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u341-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u341-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_341
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运行成功
8.虚悬镜像 仓库名、标签都是<none>的镜像,俗称dangling image
- docker image ls -f dangling=true
docker虚悬镜像没用 删除掉 docker image prune
9.docker网络
1.docker不启动默认网络情况
ens33:本地网络地址 lo:本地回环地址 docker启动后会产生一个docker0的虚拟网桥 2.查看docker网络模式命令 docker network ls
3.查看网络源数据docker network inspect xxx网络名字 4.删除网络 docker network rm xxx网络名字 5.创建自定义网络 docker network create aaa_network 6.docker网络:荣期间的互联和通信以及映射,容器ip变动时候可以通过服务器名直接网络通信而不受到影响。 7.网络模式 --容器内部的ip是有可能变化的 bridge :为每个容器分配,设置ip等,并将容器连接到一个docker0虚拟网桥,默认为该模式 使用 --network bridge指定 默认为docker0 host:容器将不会虚拟出自己的网卡,配置自己的ip等,而是使用宿主机的ip和端口 使用 --network host指定 none:容器有独立的network namsepace ,但是并没有对其进行任何网络设置 使用 --network none指定 container:新创建的容器不会创建自己的网卡和配置自己的ip,端口范围等 使用 --network container:name 或者容器ID指定,新建的容器和已经存在的一个容器网络ip,端口配置相同而不是宿主机 共享,两个容器除了网络共享外,其他都还是隔离的 自定义网络:默认使用的bridge桥接网络 : 例如:docker run -d -p 8081:8080 --network zzyy_network --name tomcat81 billygoo/tomcat8-jdk8 docker run -d -p 8082:8080 --network zzyy_network --name tomcat82 billygoo/tomcat8-jdk8 自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通) |
10.docker compose
1.Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器,解决并负责实现对Docker容器集群的快速编排。 2.官网 https://docs.docker.com/compose/compose-file/compose-file-v3/ 官网下载 https://docs.docker.com/compose/install/ 3.安装 curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose --version 4.卸载 rm /user/local/bin/docker-compose 5. Compose核心概念
6.Compose使用的三个步骤
7.Compose常用命令 docker-compose -h # 查看帮助 docker-compose up # 启动所有docker-compose服务 docker-compose up -d # 启动所有docker-compose服务并后台运行 docker-compose down # 停止并删除容器、网络、卷、镜像。 docker-compose exec yml里面的服务id # 进入容器实例内部 docker-compose exec docker-compose.yml文件中写的服务id /bin/bash docker-compose ps # 展示当前docker-compose编排过的运行的所有容器 docker-compose top # 展示当前docker-compose编排过的容器进程 docker-compose logs yml里面的服务id # 查看容器输出日志 docker-compose config # 检查配置 docker-compose config -q # 检查配置,有问题才有输出 docker-compose restart # 重启服务 docker-compose start # 启动服务 docker-compose stop # 停止服务 |
11.docker compose使用实例
1.需要三个容器 jar微服务,mysql ,redis
2.编写Dockerfile闯进微服务镜像
# 基础镜像使用java |
3.构建镜像docker build -t zzyy_docker:1.6 .
4.编写docker-compose.yml文件
version: "3"
services: microService: image: zzyy_docker:1.6 container_name: ms01 ports: - "6001:6001" volumes: - /app/microService:/data networks: - atguigu_net depends_on: - redis - mysql
redis: image: redis:6.0.8 ports: - "6379:6379" volumes: - /app/redis/redis.conf:/etc/redis/redis.conf - /app/redis/data:/data networks: - atguigu_net command: redis-server /etc/redis/redis.conf
mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: '123456' MYSQL_ALLOW_EMPTY_PASSWORD: 'no' MYSQL_DATABASE: 'db2021' MYSQL_USER: 'zzyy' MYSQL_PASSWORD: 'zzyy123' ports: - "3306:3306" volumes: - /app/mysql/db:/var/lib/mysql - /app/mysql/conf/my.cnf:/etc/my.cnf - /app/mysql/init:/docker-entrypoint-initdb.d networks: - atguigu_net command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
networks: atguigu_net: |
5. 执行 docker-compose up 或者 执行 docker-compose up -d 启动
12.docker轻量级可视化工具Portainer
1.Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境 2.官网
3.安装 docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer 4.页面访问 http://192.168.92.128:9000 5.创建用户 |
13.docker监控之 CAdvisor+InfluxDB+Granfana
1.通过docker stats命令可以很方便的看到当前宿主机上所有容器的CPU,内存以及网络流量等数据,一般小公司够用了。。。。但是,docker stats统计结果只能是当前宿主机的全部容器,数据资料是实时 的,没有地方存储、没有健康指标过线预警等功能 2.CAdvisor监控收集+InfluxDB存储数据+Granfana展示图表 3.部署 使用compose容器编排 mkdir cfg
version: '3.1' 4.查看是否编排没有问题 docker config -q 5.
|