docker进阶知识笔记

目录

一、Dockerfile解析

1.1.什么是Dockerfile

1.2.Dockerfile构建过程解析

1.2.1.Dockerfile内容基础知识

1.2.2.Docker执行Dockerfile的大致流程

1.3.Dockerfile常用保留字指令

1.3.1.FROM

1.3.2.MAINTAINER

1.3.3.RUN

1.3.4.EXPOSE

1.3.5.WORKDIR

1.3.6.USER

1.3.7.ENV

1.3.8.ADD

1.3.9.COPY

1.3.10.VOLUME

1.3.11.CMD

​​​​​​​1.3.12.ENTRYPOINT

1.3.13.各命令运行时期

1.4.Dockerfile实践

1.4.1.生成微服务jar包

1.4.2.编写Dockerfile

1.4.3.将微服务jar包和Dockerfile文件上传到同一个目录下/mydocker

1.4.4.在/mydocker路径下构建镜像,打包成镜像文件

1.4.5.运行容器

二、Docker网络

2.1.常用命令

2.2.作用

2.3.网络模式

三、Docker-compose容器编排

3.1.Docker-compose使用的三个步骤

3.2.Docker-compose常用命令

3.3.Docker-compose实践

3.3.1.编写docker-compose.yml文件

3.3.2. 执行docker-compose up或者执行docker-compose up -d

四、Docker轻量级可视化工具Portainer

五、Docker容器监控之CAdivisor+InfluxDB+Granfana

5.1.编写docker-compose.yml

5.2.启动docker-compose文件


一、Dockerfile解析

1.1.什么是Dockerfile

        Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

        构建三部曲:

        1)编写Dockerfile文件;

        2)docker build 命令构建镜像

        3)docker run 以镜像运行容器实例

1.2.Dockerfile构建过程解析

1.2.1.Dockerfile内容基础知识

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

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

        3)#表示注释

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

1.2.2.Docker执行Dockerfile的大致流程

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

        2)执行一条指令并对容器作出修改

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

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

        5)执行dockerfile中的下一条指令直到所有指令都执行完成

1.3.Dockerfile常用保留字指令

1.3.1.FROM

        基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from

1.3.2.MAINTAINER

        镜像维护者的姓名和邮箱地址

1.3.3.RUN

        容器构建时需要运行的命令,在 docker build时运行

有两种格式:

        shell格式:RUN yum -y install vim

        exce格式:RUN ["./test.php", "dev", "offline"]   等价于   RUN ./test.php dev offline

1.3.4.EXPOSE

        当前容器对外暴露出的端口

1.3.5.WORKDIR

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

1.3.6.USER

        指定该镜像以什么样的用户去执行,如果都不指定,默认是root

1.3.7.ENV

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

1.3.8.ADD

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

1.3.9.COPY

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

        COPY src dest

1.3.10.VOLUME

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

1.3.11.CMD​​​​​​​

        指定容器启动后的要干的事情,在docker run 时运行

        Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换

​​​​​​​1.3.12.ENTRYPOINT

        也是用来指定一个容器启动时要运行的命令

        类似于 CMD 指令,但是ENTRYPOINT不会被docker run后面的命令覆盖, 而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序 

1.3.13.各命令运行时期

BUILD Both RUN
FROM WORKDIR CMD
MAINTAINER USER ENV
COPY EXPOSE
ADD VOLUME
RUN ENTRYPOINT
ONBULID
.dockerignore

1.4.Dockerfile实践

1.4.1.生成微服务jar包

1.4.2.编写Dockerfile

# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER yjw
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为zzyy_docker.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar zzyy_docker.jar
# 运行jar包
RUN bash -c 'touch /zzyy_docker.jar'
ENTRYPOINT ["java","-jar","/zzyy_docker.jar"]
#暴露6001端口作为微服务
EXPOSE 6001

1.4.3.将微服务jar包和Dockerfile文件上传到同一个目录下/mydocker

1.4.4.在/mydocker路径下构建镜像,打包成镜像文件

docker build -t zzyy_docker:1.6 .
#注意后面的空格和.

1.4.5.运行容器

 docker run -d -p 6001:6001 zzyy_docker:1.6

二、Docker网络

         docker启动后,主机网络会产生一个名为docker0的虚拟网桥      

2.1.常用命令

        docker network create xxx网络名字:添加网络

        docker network ls:查看网络

        docker network inspect xxx网络名字:查看网络源数据

        docker network rm xxx网络名字:删除网络

2.2.作用

        1)容器间的互联和通信以及端口映射

        2)容器IP变动时候可以通过服务名直接网络通信而不受到影响

2.3.网络模式

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

        2)host模式:使用--network host指定

        3)none模式:使用--network none指定

        4)container模式:使用--network container:NAME或者容器ID指定

三、Docker-compose容器编排

3.1.Docker-compose使用的三个步骤

        1)​​​​​​​编写Dockerfile定义各个微服务应用并构建出对应的镜像文件

        2)使用 docker-compose.yml 定义一个完整业务单元,安排好整体应用中的各个容器服务

        3)最后,执行docker-compose up命令 来启动并运行整个应用程序,完成一键部署上线

3.2.Docker-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 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:停止服务

3.3.Docker-compose实践

3.3.1.编写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:

3.3.2. 执行docker-compose up或者执行docker-compose up -d

四、Docker轻量级可视化工具Portainer

        安装命令如下

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

五、Docker容器监控之CAdivisor+InfluxDB+Granfana

5.1.编写docker-compose.yml

version: '3.1'
 
volumes:
  grafana_data: {}
 
services:
 influxdb:
  image: tutum/influxdb:0.9
  restart: always
  environment:
    - PRE_CREATE_DB=cadvisor
  ports:
    - "8083:8083"
    - "8086:8086"
  volumes:
    - ./data/influxdb:/data
 
 cadvisor:
  image: google/cadvisor
  links:
    - influxdb:influxsrv
  command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086
  restart: always
  ports:
    - "8080:8080"
  volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:rw
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
 
 grafana:
  user: "104"
  image: grafana/grafana
  user: "104"
  restart: always
  links:
    - influxdb:influxsrv
  ports:
    - "3000:3000"
  volumes:
    - grafana_data:/var/lib/grafana
  environment:
    - HTTP_USER=admin
    - HTTP_PASS=admin
    - INFLUXDB_HOST=influxsrv
    - INFLUXDB_PORT=8086
    - INFLUXDB_NAME=cadvisor
    - INFLUXDB_USER=root
    - INFLUXDB_PASS=root

5.2.启动docker-compose文件

docker-compose up

你可能感兴趣的:(docker,容器,linux)