docker 狂神课程 总笔记

Docker


Docker学习

  • 概述
  • 安装
  • 命令
    • 镜像
    • 容器
    • 操作
    • 。。
  • docker镜像
  • 容器数据卷
  • dockerfile
  • docker网络原理
  • idea整合docker
  • docker compose
  • docker swarm
  • CI \ CD jenkins

Docker概述

环境部署很麻烦,开发环境和应用环境不同,环境配置和应用配置不同

环境不同,版本更新,导致服务不可用,对于运维来说,考验十分大

环境配置麻烦,每个机器都要部署环境, 部署集群,费时费力

发布jar包或war包,需要redis、mysql、jdk、ES等环境,发布项目等时候能包含环境一起发过去,项目能带上环境打包

环境配置麻烦,并且软件可能不能跨平台

在windows上开发,最后发布到Linux上

**传统:**程序员开发jar包,运维这准备上线环境

**现在:**程序员直接开发打包部署上线,一套流程全程序员做

java — apk — 发布(应用商店) — 下载apk ---- 安装使用

  • 用java开发出apk发布到应用场点提供下载,下载安装就可以使用

java — jar(环境)—打包项目带上环境 (镜像) —(docker仓库)— 下载发布的镜像 — 直接运行

  • 用java开发的项目带上环境一同打包成镜像,上传到docker仓库,运维下载发布的镜像就可以运行

dockercon的思想就来源于集装箱container🐳📦

例如:在运行jar的环境上有多个应用在运行,可能会产生端口、配置、连接错误等,在原来都是交叉的

现在的是隔离的思想,将所有的东西打包装箱,每个container都是相互隔离的,为了让完全不同的东西能放在同一个环境中运行,通过镜像或称为容器

Docker通过隔离机制,能将服务器利用到极致

他话

容器化技术命名为Docker,容器出现前一般都使用虚拟机技术virtual machine,虚拟机比较笨重,虚拟机和Docker容器技术都是一种虚拟化技术

  • 要做隔离就要开启多个虚拟机

  • docker做隔离,制作镜像最小可能只有几kb,需要加什么环境再扩大,启动速度也快

Docker是基于go语言开发的

Docker作用

虚拟机技术缺点:

  • 资源占用严重
  • 步骤多
  • 启动慢

容器化技术

容器化技术并不是完整的操作系统

kernel 内核

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m2mbzZnS-1607599177537)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201202154641.png)]

  • docker模式,每个app都有自己的环境,组成容器container,通过docker进行管理,docker在主机的os上运行,os又运行在infrastructure硬件层面

  • 虚拟机模式,在本机的要制造多个环境,创建多个虚拟机VM,virtual machine,上图的虚拟机只是虚拟化出了os层面,VMwore是从硬件层面虚拟化的,所以每个VM可能还多一层,这些虚拟机又由hypervisor管理程序管理,

  • 每个容器都有自己独立的lib,容器之间相互不干涉,以此进行隔离

  • 传统虚拟机

    • 虚拟出一套硬件,运行完整的操作系统,然后在虚拟机系统上安装软件
  • docker

    • 容器内的应用直接运行在宿主机的内核kernel,容器是没有自己的内核的,也没有虚拟出硬件,进行了简化
    • 每个容器间进行隔离
    • 每个容器内有自己的文件系统,互相不影响

DevOps

Development 开发

Operations 运维

传统交付和部署
  • 传统
    • 众多帮助文档,安装程序
    • 升级迭代环境要一个个设置,应用联调测试
  • docker
    • 打包镜像发布测试,一键运行
    • 升级迭代环境,直接制作镜像
    • 更简单的系统运维

运维效率提高,保证不同机器保证一致性,开发测试环境可以保持一致

高效计算资源利用
  • docker是内核级别的虚拟化,可以在一个物理机上运行很多的容器实例,不影响性能发挥

Docker安装

Docker基本组成

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dCux1KjW-1607599177539)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201202124030.png)]
    • 镜像image
      • Docker镜像好比一个模版,通过这个镜像来创建容器服务,将镜像运行run,运行在容器中,容器就提供服务,通过镜像能创建多个容器,最终的服务运行或项目运行就是在容器中的
    • 容器container
      • docker利用容器技术,可以独立运行一个或多个应用,通过镜像来创建
      • 启动、停止、删除、基本命令
      • 可以理解为一个简易的Linux系统
    • 仓库repository
      • 存放镜像的位置,dockerhub
      • 分共有仓库和私有仓库,
      • docker Hub 、阿里云、华为云(默认是国外的)
      • 需要配置镜像仓库

Docker安装

  • 环境准备

  • 查看docker帮助文档

  • #Uninstall old versions
    $ sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
                     
                     
    #install using the repository
    #设置repository路径,可以换成国内的docker镜像
    
    $ sudo yum install -y yum-utils
    
    $ sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
        
    #阿里云镜像
    $ sudo yum-config-manager \
        --add-repo \
        https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
       
    
    #更新缓存索引
    yum makecache fast
    
    
    
    #安装docker docker-ce  是社区版本、-ee是企业版
    yum install docker-ce 
    
    
    
    systemctl start docker
    
    systemctl daemon-reload
    systemctl restart docker.service
    
    docker run hello-world
                              
    docker version
    
    #查看镜像
    docker images
    
    
    #卸载
    $ sudo yum remove docker-ce docker-ce-cli containerd.io
    $ sudo rm -rf /var/lib/docker
              
    
  • docker hello-world

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3FHC1TO3-1607599177540)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201202153109.png)]

Docker工作原理理解

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s5Nvoe8o-1607599177541)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201202155428.png)]
  • 根据hello-world程序,先在本机寻找镜像,本机没有再去远程仓库寻找,找到就下载到本地,没找到就没找到报错

底层原理

  • docker是一个C/S 架构的系统,Client——Server,docker的Damon(可以称为守护进程或后台进程)一直在主机上运行,通过socket从客户端访问
  • docker-server接受到docker-client的指令,执行
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WieRPsPQ-1607599177542)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201202160239.png)]
  • docker有比虚拟机更少的抽象层
  • 在架构上简化了层数

Docker常用命令

  • 以下使用过的命令
    
    docker version
    
    docker info
    #系统信息
    
    docker --help
    
    docker images
    
    docker pull
    
    docker rmi
    
    docker run
    
    docker ps
    
  • 命令可以在docker——docs——reference 查询

镜像命令

多看官方文档命令很多,多使用 --help 来查询帮助

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes
docker images
  • -a
  • -q 查看image id
docker search
  • 可以用docker search命令搜索,也可以在官网搜索如mysql
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rzhrlKWB-1607599177543)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201202171831.png)]
  • 通过过滤来查找镜像,可以设置stars过滤选项,使用人数多的一般是没错
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E2RuCSjZ-1607599177544)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201202172432.png)]
docker pull
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jHkZq812-1607599177545)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201202172731.png)]

  • latest 最新,默认使用最新版本

  • 可以不选择版本 tag

  • 下载时一层一层下载称为分层下载,也是docker的核心

  • Digest: sha256:4bb2e81a40e9d0d59bd8e3dc2b
    Status: Downloaded newer image for mysql:latest
    docker.io/library/mysql:latest
    
    #digest 摘要,相当于唯一身份标识
    #docker .io/library/mysql:latest  是他的真实位置
    
    docker pull mysql
    docker pull docker.io/library/mysql:latest
    #两条语句等价
    
  • 也可以指定版本,但是版本需要在docker hub中有,在docker hab中search,里面支持的版本才能从repository 下载拉取

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rLXNwVMQ-1607599177546)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201202194613.png)]

  • docker pull mysql:5.7
    
  • 之前下载的 pull complete 拉取完整的

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p3dUYYnI-1607599177547)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201202223523.png)]

  • 现在下载mysql:5.7版本的是Already exists 已经存在

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pZva5nUQ-1607599177548)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201202223658.png)]

  • 只下载不同的部分,公用了相同的部分

docker rmi
  • [root@localhost ~]# docker rmi --help
    
    Usage:	docker rmi [OPTIONS] IMAGE [IMAGE...]
    
    Remove one or more images
    
    Options:
      -f, --force      Force removal of the image
          --no-prune   Do not delete untagged parents
    
  • remove imgag

  • docker rmi -f ae0658fdbad5
    #删除指定的image,镜像id
    
    docker rmi -f $(docker images -aq)
    #嵌套写法,docker images -aq 显示全部镜像的imageId ,然后删除
    
    #写多个id可以删除多个image
    
    

容器命令

有了镜像才能创建容器,下载一个centos镜像,使用docker跑一个centos

docker pull centos
#install
docker run
  • 常用参数

    • –name=“Name”
      • 容器名字来区分容器
    • -d
      • daemon
    • -it
      • 交互方式运行,进入容器查看内容
    • -p
      • -p 8080:8080
        • 主机端口:容器端口(常用)
        • 容器端口
    • -P
      • 随机指定端口
  • [root@localhost ~]# docker run -it centos /bin/bash
    [root@54821f4f29db /]# ls
    bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    #查看容器内的centos 基础版本,一共就70m,命令或目录都不会很完善
    [root@54821f4f29db /]# exit
    exit
    [root@localhost ~]#  直接退出并关闭容器
    
    
    
    [root@localhost ~]# docker run -it centos /bin/bash 
    [root@86fe2f8cb919 /]# [root@localhost ~]# 
    [root@localhost ~]#     使用ctrl+p+q,容器不停止退出
    [root@localhost ~]# 
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    86fe2f8cb919        centos              "/bin/bash"         15 seconds ago      Up 13 seconds                           hopeful_bell
    [root@localhost ~]# 
    
    
  • centos 和/bin/bash中间是有一个空格的

  • docker ps
    -a  show all containers
    -f 	filter output based on conditions provided  根据提供条件进行过滤
    -n  show n last created container (default -1)显示最后n个创建的容器
    -l  latest  show the latest created container 显示最近的创建的容器
    -q  only display numeric IDs 只显示id
    -s	display total file sizes 
    #查看正在运行的程序
    
    
  • 后台启动

    • -d
  • 后台启动自动停止问题

  • [root@localhost ~]# docker run -d centos
    b281c18aaff5c88f45200e8ae044a1cc492b9c8ed1344ba96ac288a5df0b9193
    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    [root@localhost ~]# 
    
    #容器使用后台运行时买,必须要有一个前台进程,docker发现没有应用,就会自动停止
    #nginx 容器启动后,发现自己没有提供服务就会立即停止
    
docker rm
  • docker rm containerID
    #不能删除正在运行的程序,除非 -f  (force)
    
    docker rm -f $(docker ps -aq)  
    #强力删除正在运行的所有程序
    
    docker ps -a -q|xages docker rm
    #删除所有的容器,xages管道符,进行筛选
    
    
docker start
docker restart
docker stop
docker kill
docker logs
docker top
  • [root@localhost ~]# docker top $(docker ps -q)
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    root                25664               25648               0                   10:00               pts/0               00:00:00            /bin/bash
    [root@localhost ~]# docker top
    "docker top" requires at least 1 argument.
    See 'docker top --help'.
    
    Usage:  docker top CONTAINER [ps OPTIONS]
    
    Display the running processes of a container
    [root@localhost ~]#题型了结合ps来用,查看容器内的进程信息,processes进程
    
docker inspect
  • 查看容器中进程的信息
docker exec
  • 容器一般后台运行,进入容器命令(execute)

  • [root@localhost ~]# docker exec -it 4de745928d67 /bin/bash
    
    
    
docker attach
  • (attach 附属)

  • Options:
          --detach-keys string   Override the key sequence for detaching a container
          #重写分离容器的键序列
          --no-stdin             Do not attach STDIN
          #不标准输入
          --sig-proxy            Proxy all received signals to the process (default true)
          #将所有接收到的信号代理给进程
          
    #stdin  standard input  标准输入
    
  • exec 和attach区别

    • exec 进入容器后开启一个新的终端,可以在里面操作
    • attach 进入容器正在执行的终端,不会启动新的进程
docker cp
  • 容器与宿主机的复制文件操作

  • [root@localhost ~]# docker cp
    See 'docker cp --help'.
    
    Usage:  docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
    	docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
    #容器中的东西拷贝到宿主机,或宿主机拷贝到容器内
    Copy files/folders between a container and the local filesystem
    #容器与本地文件系统之间的文件/文件夹复制
    [root@localhost ~]# 
    #DEST  destination  目的地
    #between  在什么之间
    
    
    [root@localhost ~]# docker attach 4de745928d67
    [root@4de745928d67 /]# ls 
    bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  test  tmp  usr  var
    [root@4de745928d67 /]# docker cp 4de745928d67:/test /usr
    bash: docker: command not found
    [root@4de745928d67 /]# cd test/
    [root@4de745928d67 test]# touch lwh.java
    [root@4de745928d67 test]# ls
    lwh.java
    [root@4de745928d67 test]# docker cp 4de745928d67:/test/lwh.java /usr/local/
    bash: docker: command not found
    [root@4de745928d67 test]# read escape sequence
    [root@localhost ~]# cd
    [root@localhost ~]# ls
    3000  Desktop  Documents  Downloads  dump.rdb  Music  Pictures  Public  Templates  Videos
    [root@localhost ~]# cd ..
    [root@localhost /]# ls
    bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
    [root@localhost /]# docker cp 4de745928d67:/test/lwh.java /usr/local/
    [root@localhost /]# cd /usr/local/
    [root@localhost local]# ls
    bin  etc  games  include  lib  lib64  libexec  lwh.java  redis  redis-6.0.9  redis-6.0.9.tar.gz  sbin  share  src  tomcat
    [root@localhost local]# 要在localfilesystem进行复制
    

小结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GS9ZFFTT-1607599177549)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201203145256.png)]

Nginx Demo

  • search

  • pull

  • exec

  • stop

  • docker search nginx
    docker pull nginx
    docker images
    docker run -d --name nginx01 -p 3344:80 nginx
    #后台运行 设置名称 端口映射 启动nginx
    
    #nginx操作
    root@2c4c59694612:/# whereis nginx
    nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
    root@2c4c59694612:/# cd /etc/nginx
    root@2c4c59694612:/etc/nginx# ls
    conf.d		koi-utf  mime.types  nginx.conf   uwsgi_params
    fastcgi_params	koi-win  modules     scgi_params  win-utf
    root@2c4c59694612:/etc/nginx# cd /etc/nginx
    
    docker ps -a
    docker stop nginx01
    #关闭可以使用containerID也可以使用name
    
    #每次退出都可能会关闭nginx
    #再次进入要检查ps,如果关闭了要重新启动
    docker start nginx01
    #重新进入nginx01
    docker exec -it nginx01 /bin/bash
    
    
  • 访问3344端口测试nginx

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-35jJXIRZ-1607599177550)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201203153000.png)]

Tomcat Demo

  • 要安装什么环境就先到docker hub 上搜索,会有How to use this image教如何使用这个镜像

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ixZV7c0B-1607599177551)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201203223109.png)]

  • 官方教的中有一个 --rm (remove)删除,表示着这使用方法是用来测试的,用完就删除

  • 直接默认 docker run -it --rm tomcat:9.0 要访问 http://container-ip:8080 容器内的ip

  • 要通过使用物理机的地址就要使用 -p 8080:8080 进行地址映射

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Gnlx5qJ-1607599177552)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201203232338.png)]

  • 测试访问,但是这个是阉割过的,默认最小可运行环境,是没有webapps 所以没有找到资源

  • [root@localhost local]# docker exec -it 9df83b5a8d74 /bin/bash
    
  • [root@localhost local]# docker exec -it 9df83b5a8d74 /bin/bash
    root@9df83b5a8d74:/usr/local/tomcat# ls
    BUILDING.txt	 LICENSE  README.md	 RUNNING.txt  conf  logs	    temp     webapps.dist
    CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin	      lib   native-jni-lib  webapps  work
    root@9df83b5a8d74:/usr/local/tomcat# cp -r webapps.dist/* webapps
    root@9df83b5a8d74:/usr/local/tomcat# ls 
    BUILDING.txt	 LICENSE  README.md	 RUNNING.txt  conf  logs	    temp     webapps.dist
    CONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin	      lib   native-jni-lib  webapps  work
    #里面有一个webapps.dist 将它改为webapps 就能正常显示了
    root@9df83b5a8d74:/usr/local/tomcat# cd webapps
    root@9df83b5a8d74:/usr/local/tomcat/webapps# ls
    ROOT  docs  examples  host-manager  manager
    root@9df83b5a8d74:/usr/local/tomcat/webapps# 
    
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rhjcN0b6-1607599177553)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201203233209.png)]

  • 以后要部署项目能不用进容器就能修改设置,能在容器外部提供一个映射路径,在外部放置项目,在容器内自动同步就好了,

ElasticSearch And Kibana Demo

  • 主要问题

    • elasticSearch 暴露的端口多
    • 消耗内存
    • 数据要放在安全目录,挂载
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W0oK62Gx-1607599177554)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201204093542.png)]

  • 以开发环境运行

    • 创建用户自定义网络,用于连接此网络的其他服务,如kibana
  • docker 	network create somenetwork
    docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
    
    #tag是选择的版本,可以搜索也可以在官方文档查看
    
    #没有直接启动就start
    #进入方式还是使用exec
    docker exec -it eleticsearch /bin/bash
    
    
    
    
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
    999506b15e1d        elasticsearch       1.87%               360.8MiB / 972.3MiB   37.10%              2.94kB / 0B         26.6GB / 147MB      47
    9df83b5a8d74        elated_lumiere      0.22%               26.28MiB / 972.3MiB   2.70%               12.6kB / 128kB      8.8GB / 15.6MB      29
    2c4c59694612        nginx01             0.00%               444KiB / 972.3MiB     0.04%               2.39kB / 532B       2.97MB / 0B         2
    4de745928d67        vigilant_goodall    0.00%               192KiB / 972.3MiB     0.02%               2.51kB / 0B         21.2MB / 0B         1
    
    #一共1g不到的内存,elasticsearch占用了360,可能会造成服务器卡顿,所以要修改内存限制
    
    docker exec -it -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch /bin/bash
    #尝试使用这种方法对内存进行设置,但是没反应
    
    docker run -d --name elasticsearch01 --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx100m" elasticsearch:7.9.3
    #只能新建一个容器然后对其设置内存,就可以设置内存
    
  • [root@localhost local]# curl localhost:9200
    {
      "name" : "e7d6cbfc5034",
      "cluster_name" : "docker-cluster",
      "cluster_uuid" : "XnwGpQ5CRPKj6VpwUCxA-Q",
      "version" : {
        "number" : "7.9.3",
        "build_flavor" : "default",
        "build_type" : "docker",
        "build_hash" : "c4138e51121ef06a6404866cddc601906fe5c868",
        "build_date" : "2020-10-16T10:36:16.141335Z",
        "build_snapshot" : false,
        "lucene_version" : "8.6.2",
        "minimum_wire_compatibility_version" : "6.8.0",
        "minimum_index_compatibility_version" : "6.0.0-beta1"
      },
      "tagline" : "You Know, for Search"
    }
    [root@localhost local]# 
    #测试服务
    
  • 如何连接kibana,两个容器互相隔离,容器内部互相隔离

  • 但是两个容器都安装在同一台宿主机Linux中,就通过Linux的内网ip来连接

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8mZkBTNb-1607599177555)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201204104352.png)]

  • [root@localhost local]# docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    202617d32865        bridge              bridge              local
    1702a84e09a5        host                host                local
    0aa050a7cf5f        none                null                local
    f34074a8f60b        somenetwork         bridge              local
    [root@localhost local]#显示docker网络
    
    
    Manage networks
    Commands:
      connect     Connect a container to a network
      create      Create a network
      disconnect  Disconnect a container from a network
      inspect     Display detailed information on one or more networks
      ls          List networks
      prune       Remove all unused networks
      rm          Remove one or more networks
    
    
  • 安装kiana需要和elasticsearch在同一个内网,所以之前elacticsearch连接在somenetwork,kiana也要连接somenetwork

  • docker run -d --name kibana --net somenetwork -p 5601:5601 kibana:tag
    
    

可视化面板管理

  • 狂神推荐使用的是portainer

  • 但是我使用的是docker desktop

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hLJB9axB-1607599177555)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201204171709.png)]

  • 感觉做的也挺简洁

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RcyCBSOo-1607599177556)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201204171801.png)]

  • 可以看到下载的image,创建container时能可视化设置参数,也挺方便的

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nhDxEMLf-1607599177558)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201204172018.png)]

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1zGTEf58-1607599177558)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201204172421.png)]

  • 能可视化启动,自动弹出终端,基本操作都能直接在desktop版本实现

  • 但是portainer也是很有价值的,如linux想格式化,用浏览器打开的方便优势

  • portainer教程

  • docker volume create portainer_data
    docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
    cd /usr/libexec/docker/
    sudo ln -s docker-runc-current docker-runc
    
     
     #安装portainer,并且创建一个链接
    
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tYracYjS-1607599177559)(…/…/…/Library/Application Support/typora-user-images/image-20201204211839934.png)]

  • 不创建链接或者不用他说的-v参数启动,就会连接不上

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AS1Zf6jN-1607599177560)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201204214947.png)]

  • 连接上后,里面的操作也就是基本操作而已,没很特别

Docker镜像讲解

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基本运行环境开发的软件,他包含运行某个软件爱你所需的所有内容,包括代码,运行时,库、环境变量和配置文件

将所有的应用,直接打包docker镜像,就可以直接跑起来

如何得到镜像

  • 远程仓库下载
  • 拷贝来的
  • 自己制作镜像dockerfile

Docker镜像加载原理

UnionFS(联合文件系统)
  • dockerimage下载时看到的一层一层的就是使用的这个文件系统,查看每次下载的一层是叠加还是修改,当两个镜像中的某一层已经相同就不会下载第二次

  • 是一种分层、轻量级、高性能的文件系统,支持文件系统的修改作为一次提交来层层叠加,同时可以将不同的目录挂载在同一个虚拟文件系统下,Union文件系统是docker镜像的基础

  • 镜像通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像

  • 特性:一次同时加载多个文件系统,从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,最终的文件系统会包含所有底层的文件文件和目录

docker镜像原理
  • docker镜像是由一层层的文件系统组成,这种层级的文件系统UnionFS
  • BootFS(boot file system)
    • 主要包含boot loader、kernel,bootlocker主要是引导加载kernel
    • linux启动时会加载bootfs文件系统,在docker镜像的最底层是bootfs,这点linux和unix是一样的,boot加载器和内核,当boot加载完成之后,整个内核都在内存中,此时内存的使用权已由bootfs转交给内核,此时系统会卸载bootfs
  • rootFS,在bootfs之上,包括的就是典型的linux系统中的/dev、/proc、/bin、/etc等标准文件和目录,rootfs就是不同操作系统发行版,拨入ubuntu,centos等等
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FHV2SGys-1607599177561)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201207095408.png)]
  • 先是from来一个debian,然后run了一层emacs在原来的基础上多叠加了一层,之后的apache是跟emacs是共用底层的,不需重复下载
  • 因为是一个精简的os,rootfs很小,只保留了一些基本的命令,底层的kernel还是使用的主机的kernel,只需要提供rootfs就行,不同的linux版本呢bootfs是一致的,rootfs会有差别,因此发型版本可以公用bootfs
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m6J41IZs-1607599177562)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201207104945.png)]
  • 有些层已经下载过就不会再下载
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LH02QdwF-1607599177563)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201207105318.png)]
  • 叠加和替换,分层下载,提高了复用能力
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UqbXbeqE-1607599177564)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201207110335.png)]
  • 从docker hub远程下载来的镜像是只读的,对其进行的操作只是在原有的基础上增加一层,并不改变原来的镜像,改动再进行打包,可以发布成为一个新的镜像

docker commit

docker run -it -p 8080:8080 --name tomcat01 tomcat

docker exec -it tomcat01 /bin/bash

mv webapps.dist webapps
||
cp webapps.dist webapps


docker commit -a="haoyun" -m="add webapps app" tomcat01 tomcathaoyun:1.0
#commit自己的image

Usage:	docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:
  -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
  #提交镜像的作者
  -c, --change list      Apply Dockerfile instruction to the created image
  #使用dockerfile指令来创建镜像
  -m, --message string   Commit message
  #说明文字
  -p, --pause       
  #在commit时将容器暂停


docker images

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BkJyrYEI-1607599177565)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201207165829.png)]

现在打包出的就是自定义的一个新的镜像

容器数据卷

将应用和环境打包成一个镜像

数据都保存在容器中,如果容器被删除,数据就会丢失,需要数据持久化

数据需要存储在本地,容器之间可以有数据共享的技术

通过docker容器中产生的数据同步到本地,把容器删除,但是数据在本地,保证数据不会丢失

这就是容器数据卷技术,就是目录的挂载,将容器内的目录挂载到Linux上

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YeAUy6Kw-1607599177566)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201207173435.png)]

不仅是mysql container的文件系统能挂载在Linux的目录上,其他container也能挂载在这个目录上,容器间也就可以数据共享

使用数据卷

方法一

  • docker run -v参数

  • -v
    -volume list                    Bind mount a volume
    #绑定挂载卷
    --volume-driver string           Optional volume driver for the container
    #容器可选卷驱动程序
    --volumes-from list              Mount volumes from the specified container(s)
    #列出指定容器的挂载卷
    
    
  • 主机目录:容器目录 制作一个映射

  • The -v flag mounts the current working directory into the container. The -w lets the command being executed inside the current working directory, by changing into the directory to the value returned by pwd. So this combination executes the command using the container, but inside the current working directory.

  • ’ -v ‘标志将当前工作目录挂载到容器中。’ -w ‘通过在目录中更改为’ pwd '返回的值,让正在当前工作目录中执行的命令在当前工作目录中执行。因此,这个组合使用容器执行命令,但在当前工作目录中。

  • [root@localhost ~]# docker run -it -v /home/test:/home centos /bin/bash
    
  • docker inspect 2f48df561ff9
    #inspect (检查)
    #其中有mounts列,表示挂载,bind(捆绑)
    #destination(目的地)
    #propagation (传播)
    
    
     "Mounts": [
                {
                    "Type": "bind",
                    "Source": "/home/test",
                    "Destination": "/home",
                    "Mode": "",
                    "RW": true,
                    "Propagation": "rprivate"
                }
            ],
    
  • source是主机内到地址

  • destination是容器内的地址

  • 在绑定的目录添加了文件,会同步到绑定的容器和主机的目录

  • 就算容器停止了,也能同步过去

  • 这样就解决了每次都要进入进入container更改配置的麻烦,只要添加了容器目录映射,就能在宿主机直接修改容器配置内容

安装MySQL

  • 下载mysql

  • 根据docker hub官方给出的方法来安装,需要映射文件夹,设置密码,设置container名字,

  • docker run --restart=always -p 3310:3306 --name mysql -v /usr/data/mysql/conf:/etc/mysql  -v /usr/data/mysql/logs:/var/log/mysql -v /usr/data/mysql/data:/var/lib/mysql -v /usr/data/mysql/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
    
    
  • -d 后台运行

  • -p 端口映射

  • -v 卷挂载

  • -e 环境配置

  • –name container name

  • –restart 启动docker 时就启动mysql

  • –privileged=true 提高权限

遇到问题

  • 使用Navicat无法连接

  • Authentication plugin ‘caching_sha2_password’ cannot be loaded: dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2): image not found

  • 经过查询得出是mysql8.x版本加密规则的问题

  • https://www.cnblogs.com/zhurong/p/9898675.html

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WMgR0njZ-1607599177567)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201208103548.png)]

  • 尝试之后还是无法连接,所以决定将mysql降为5.x版本,成功

容器删除了,挂载的文件夹的内容还是存在的

具名和匿名挂载

  • -v 文件夹挂载
    docker run -d -p --name nginx01 -v /ect/nginx nginx
    #匿名挂载
    #这里挂载的路径是container内的路径
    
    docker volume ls
    #查看所有volume的状况
    #这个volume的路径在/var/lib/docker/volumes
    #里面有着匿名的volume 有具名的volume
    
    
    docker run -d -P --name nginx02 -v haoyun-nginx:/etc/nginx nginx
    #具名挂载
    #再查看volume情况里面会有使用具名设置的文件夹
    local               haoyun-nginx
    
    
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jfaASa4l-1607599177568)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201208225001.png)]

  • 目录内容,分匿名volume和具名volume

  • #区分具名、匿名、指定挂载路径
    -v 容器内路径
    #匿名挂载
    -v 卷名:容器内路径
    #具名挂载,开头没有斜杠
    -v /宿主机路径:容器内路径
    #指定挂载,完整路径
    
    #后面还能接:ro:rw
    #readOnly 只读
    #readWrite 读写
    docker run -d -P --name nginx02 -v haoyun-nginx:/etc/nginx:ro nginx
    #只读  ro,只能通过宿主机来操作,容器内部无法操作
    

DockerFile

docker就是挂载卷的第二种方法

通过build构建dockerfile的方式来创建image

通过在创建一个镜像的时候就实现volume 挂载mount

主要流程:

  • 创建dockerfile文件
  • 使用docker build 命令
  • 启动build 出的image
  • 查看mound挂载文件夹的位置

实现

  • 创建dockerfile 文件,选择一个路径,vim 直接新建编辑一个dockerfile文件

  • FROM centos
    
    VOLUME ["volume01","volume02"]
    
    CMD echo "---end---"
    CMD /bin/bash
    
  • 每个命令都是镜像的一层,具体如何制作dockerfile文件参考官方文档

  • docker build -f /home/docker-test-volume/dockerfile1 -t haoyun-centos:1.0 .
    #使用docker build 构建dockerfile 
    -f file string ,需要写入完整路径
    --tag list Name and optionally a tag in the 'name:tag' format
    
    #最后需要加加一个句号 .
    
  • 构建时返回的参数如下

  • [root@localhost docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile1 -t haoyun-centos:1.0 .
    Sending build context to Docker daemon  2.048kB
    Step 1/4 : FROM centos
     ---> 0d120b6ccaa8
    Step 2/4 : VOLUME ["volume01","volume02"]
     ---> Running in 3e51013e5f64
    Removing intermediate container 3e51013e5f64
     ---> 5e7d53b18c4f
    Step 3/4 : CMD echo "---end---"
     ---> Running in a9a989920af9
    Removing intermediate container a9a989920af9
     ---> ebd8b08be2f8
    Step 4/4 : CMD /bin/bash
     ---> Running in 9b5648b024c7
    Removing intermediate container 9b5648b024c7
     ---> aef2ceb5e4eb
    Successfully built aef2ceb5e4eb
    Successfully tagged haoyun-centos:1.0
    
  • build是一句一句读取执行的

  • 查看image

  • [root@localhost docker-test-volume]# docker images
    REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
    haoyun-centos         1.0                 aef2ceb5e4eb        21 seconds ago      215MB
    
    
  • 启动 这个镜像

  • docker-test-volume]# docker run -it aef2ceb5e4eb /bin/bash
    
    [root@e01d1b211d7b /]# ls
    bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  volume01	volume02
    [root@e01d1b211d7b /]# 
    
    #在dockerfile中挂载的两个mount volume已经在里面
    #但是这个是     匿名挂载     要找到他的在宿主机的目录可以使用inspect查看
    
  • docker inspect

  • docker inspect e01d1b211d7b
      "Mounts": [
                {
                    "Type": "volume",
                    "Name": "a7e3910d540c76c74f2d6755b44d5a8f9dcd4b0a6dc478d934a6a9143bcabd3a",
                    "Source": "/var/lib/docker/volumes/a7e3910d540c76c74f2d6755b44d5a8f9dcd4b0a6dc478d934a6a9143bcabd3a/_data",
                    "Destination": "volume01",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                },
                {
                    "Type": "volume",
                    "Name": "35cab9f1fa5973072bf4861e692c6b6ef5e169a00c312af9618ad2aaaa7bf88d",
                    "Source": "/var/lib/docker/volumes/35cab9f1fa5973072bf4861e692c6b6ef5e169a00c312af9618ad2aaaa7bf88d/_data",
                    "Destination": "volume02",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ],
    
  • source选项就是挂载宿主机的目录,在container的volume1文件夹里创建一个测试文件,看看能不能在标记的路径找到

  • [root@localhost _data]# ls
    voloume01.txt
    [root@localhost _data]# pwd
    /var/lib/docker/volumes/a7e3910d540c76c74f2d6755b44d5a8f9dcd4b0a6dc478d934a6a9143bcabd3a/_data
    [root@localhost _data]#
    
  • 这样写mount volume 是匿名挂载

  • 
    

容器数据卷间挂载共享

通过上面创建的haoyun-centos的image,只要是运行到容器就会有两个匿名的数据卷挂载,volume01和volume02

这次实验的目的是使用haoyun-centos这个image创建多个容器,相互挂载数据卷容器,实现容器间数据的同步

实现:
  • 使用image创建名为docker01的容器

  • docker run -it --name doaker01 haoyun-centos:1.0
    
  • 创建docker02时将数据卷挂载到docker01

  • #--volumes-from list              Mount volumes from the specified container(s)
    #挂载卷到指定的容器
    
    
    docker run -it --name docker02 --volumes-from docker01 haoyun-centos:1.0
    #实现容器间的数据共享
    
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-icADHt5T-1607599177569)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201209154352.png)]

  • 双向拷贝的规则,删除一个容器,其他容器还是能继续同步,实现mysql容器的数据同步使用的也是这个方法

  • mysql容器之间数据要同步方法也类似

  • 删除volume01之后数据还是没有丢失,同步到其他的容器上,最好就直接挂载到本地,不推荐匿名数据卷挂载

结论
  • 容器之间配置信息的传递,如果创建集群,需要将配置文件拷贝到多个容器中,就可以使用容器挂载
  • 数据卷的生命周期一直持续到没有容器使用位置,只要有容器进行挂载,就会自动进行数据同步
  • 一旦持久化到了本地,删除了容器也不会丢失数据
  • 几种挂载方式
    • 挂载到本地
    • 匿名、具名挂载
    • 挂载卷到指定容器
    • dockerfile构建镜像时直接挂载

DockerFile

dockerfile 时用来构建docker 镜像的文件,命令参数脚本

构建步骤:

  • 编写dockerfile文件
  • docker build构建成镜像
  • docker run
  • docker push 发布镜像
    • docker hub
    • 阿里云仓库

官方发布镜像也是以dockerfile的形式发布

点入 dockerhub官方发布的任意一个版本链接,会到github上

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x1B60d7R-1607599177570)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201209161406.png)]

可以看到发布是以dockerfile的形式在github发布的

dockerfile构建过程

  • 每个保留关键字(指令)都必须是大写字母
  • 指令从上到下顺序执行
  • “#”表示注释
  • 每个指定都会创建提交一个新的镜像层,并提交

以后要发布项目,就需要编写dockerfile文件爱你,已经逐渐成为企业交付的一个标准

dockerfile好比一个构建步骤

dockerimage 通过dockerfile构建生成的镜像,最终发布和运行的产品

dockerfile指令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7KVk6Wu8-1607599177571)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201209173130.png)]

from				#基础镜像
maintainer	#作者
run					#构建时运行的命令
add					#需要的文件,添加到镜像,想层级关系一样,在基础上叠加层
workdir			#如/bin/bash,进入到工作目录
volume 			#挂载卷
export			#暴露端口
cmd					#指定这个容器启动时要运行的命令,只有最后一个会生效,可被替代
entrypoint	#指定这个容器启动时要运行的命令,可以追加命令
onbuild			#构建一个被继承的dockerfile,这个指令就会运行,作为一个触发指令
copy				#类似add,将文件拷贝到镜像中
env					#构建时设置环境变量

实践centos build

分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h00VjKcN-1607599177572)(https://gitee.com/haoyunlwh/Typoraimage/raw/master/img/20201210093616.png)]

dockerhub中99%镜像是从这个基础镜像过来的 FROM scratch,然后配置需要的软件和配置进行的构建

比如ADD添加一个压缩包

官方的centos连vim和ifconfig都没有,自行添加这些功能

  • 编写dockerfile

  • #编写dockerfile 文件,在创建镜像时去下载vim和net-tools
    [root@localhost dockerfile]# cat mydockerfile 
    FROM centos
    
    MAINTAINER haoyun<740933114@qq.com>
    
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    #设置工作目录
    
    RUN yum -y install vim
    RUN yum -y install net-tools
    #安装vim和net-tools
    
    EXPOSE 80
    #开放端口
    
    CMD echo $MYPATH
    #输出工作目录
    CMD echo "---end---"
    CMD /bin/bash 
    #进入/bin/bash目录
    
  • #构建镜像
    [root@localhost dockerfile]# docker build -f mydockerfile -t mycentos:1.0 .
    #构建image ,不要漏掉结尾有个点
    Successfully built b814a074fd27
    Successfully tagged mycentos:1.0
    #提示成功
    
  • [root@localhost dockerfile]# docker run -it mycentos:1.0 /bin/bash
    [root@72e699904ab5 local]# pwd 
    /usr/local
    [root@72e699904ab5 local]# 
    #启动执行时直接到了/usr/local目录
    #这是通过dockerfile设置的,ENV MYPATH
    #vim和ifconfig也可以使用了
    
    

docker history

  • [root@localhost dockerfile]# docker history b814a074fd27
    IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
    b814a074fd27        11 minutes ago      /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B                  
    cfa4dab22678        11 minutes ago      /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B                  
    410420935d75        11 minutes ago      /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B                  
    ac2238a9737e        11 minutes ago      /bin/sh -c #(nop)  EXPOSE 80                    0B                  
    fbb407fde458        11 minutes ago      /bin/sh -c yum -y install net-tools             23.1MB              
    f9e7124626fb        11 minutes ago      /bin/sh -c yum -y install vim                   57.7MB              
    05ed0d25e30e        11 minutes ago      /bin/sh -c #(nop) WORKDIR /usr/local            0B                  
    57ac936ac849        11 minutes ago      /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B                  
    d017ef3d8d9e        11 minutes ago      /bin/sh -c #(nop)  MAINTAINER haoyun<7409331…   0B                  
    0d120b6ccaa8        4 months ago        /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
    <missing>           4 months ago        /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
    <missing>           4 months ago        /bin/sh -c #(nop) ADD file:538afc0c5c964ce0d…   215MB               
    [root@localhost dockerfile]# 
    
  • history(历史)

  • 可以得知镜像是如何制作出来的,从低向上

  • 使用这个命令就可以揣摩其他镜像是如何制作的

  • 可以做一个dockerfile来模仿官方的镜像

实践Tomcat image

  • 准备tomcat压缩包

  • 编写dockerfile文件,官方命名Dockerfile,build会自动寻找这个文件,不需要-f指定

  • ADD命令会自动解压

  • FROM centos
    MAINTAINER haoyun<740933114@qq.com>
    
    
    ADD jdk-8u271-linux-x64.tar /usr/local
    ADD apache-tomcat-7.0.107.tar /usr/local
    
    RUN yum -y install vim
    
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    
    ENV JAVA_HOME /usr/local/jdk1.8.0.0_11
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.107
    ENV CATALINA_BASH /usr/local/apache-tomcat-7.0.107
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    
    EXPOSE 8080
    
    CMD /usr/local/apache-tomcat-7.0.107/bin/startup.sh && tail -F /usr/local/apache-tomcat-7.0.107/logs/catalina.out
    
  • docker build -t haoyuncentos:1.0 .
    
    Successfully built 449e85c62b91
    Successfully tagged haoyuncentos:1.0
    
  • docker run -d -p 9090:8080 --name haoyuncentos01 -v /home/dockerfile/tomcat/test:/usl/local/apache-tomcat-7.0.107/webapps/test -v /home/dockerfile/tomcat/tomcatlogs:/usr/local/apache-tomcat-7.0.107/logs haoyuncentos:1.0
    
  • [root@localhost tomcat]# docker exec -it d7c23048c6c7 /bin/bash
    [root@d7c23048c6c7 local]# ls
    apache-tomcat-7.0.107  bin  etc  games	include  jdk1.8.0_271  lib  lib64  libexec  sbin  share  src
    [root@d7c23048c6c7 local]#   
    
    

小结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-foHBKRLN-1607599177573)(…/…/…/Library/Application Support/typora-user-images/image-20201210191453773.png)]

Push 镜像

docker hub

  • 发布到docker hub

  • 先去docker hub创建账号,然后使用docker push发布

  • [root@localhost tomcat]# docker login --help
    
    Usage:	docker login [OPTIONS] [SERVER]
    
    Log in to a Docker registry.
    If no server is specified, the default is defined by the daemon.
    
    Options:
      -p, --password string   Password
          --password-stdin    Take the password from stdin
      -u, --username string   Username
    [root@localhost tomcat]# 
    
  • [root@localhost dockerfile]# docker push haoyun-centos:1.0
    The push refers to repository [docker.io/library/haoyun-centos]
    291f6e44771a: Preparing 
    ^C
    [root@localhost dockerfile]# 自己制作的镜像才能发布,加上版本
    

Docker 网络

docker network

改主意准备去考专插本了,后面就暂时不写了,谢谢观看

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值