docker了解

Docker

什么是docker

  • docker是基于go语言实现的开源容器项目,开源代码:https://github.com/docker
  • Build, Ship and Run any app ,Anywhere . 通过对应用的封装、分发、部署、运行生命周期管理,达到应用组件级别的"一次封装,到处运行"
  • docker容器,可简单理解为一种轻量级的沙盒。每个容器内运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络相互通信。

核心概念

  • 镜像 类似虚拟机镜像(一个只读的模版),比如 一个镜像可以包含一个基本的操作系统环境,里边安装了Apache应用程序,可以把它称之为一个Apache镜像
  • 容器 Docker利用容器来运行和隔离应用。容器是从镜像穿件的应用运行实例。可以把容器看作为一个简易版的linux系统环境以及运行在其中的应用程序打包成的盒子
  • 仓库 类似与代码仓库,是docker集中存放镜像文件的场所

安装docker

  • mac中安装docker比较简单

      brew cask install docker
    

    查看版本:docker --version

  • 启动一个nginx容器,检查能正确获取镜像并运行

      docker run -d -p 80:80 --name webserver nginx
    

    docker ps 可以查看状态
    浏览器 localhost:80 看一看到访问nginx成功的界面

使用docker镜像

docker运行容器前需要本地存在对应的镜像,如果镜像不存在,docker会尝试先从默认镜像库下载,用户也可以配置自定义的镜像库,和maven方式很相似

  • 获取镜像 docker[image] pull 命令直接获取 通常一个镜像描述为 “名称+标签(版本)”,例如docker pull ubuntu:18.04 如果不显示制定TAG会默认选择最新标签

  • 查看镜像 docker images 或docker image ls 命令可以列出本地主机上已经有镜像的基本信息

  • 使用tag命令添加镜像标签

      docker tag ubuntu:lastest myubuntu:latest 
    
  • 查看镜像的详细信息 docker [image] inspect

      docker inspect ubuntu:18.04
    
  • 查看镜像历史 docker history 镜像描述

  • 搜索镜像 docker search [option] keyword

  • 删除和清理镜像

    • 使用标签删除镜像 docker rmi 或者 docker image rm

      docker rmi IMAGE[IMAGE…] IMAGE可以为标签或id

      同一个镜像有多个标签的时候,docker rmi 只是删除了该镜像多个标签中指定标签而已,不会影响镜像文件

    • 使用镜像id删除

      例如强行删除, docker rmi -f ${imageId}
      通常不推荐强行删除,一般为先删除依赖镜像的所有容器,再删除镜像

  • 清理镜像 docker image prune

    • -a ,-all,删除所有无用镜像
    • -filter filter 只清除符合给定过滤器的镜像
    • -f 强制删除
  • 创建镜像

    • 基于已有的容器创建
    • 基于本地模版倒入创建
    • 基于Dockerfile创建
  • 上传、存出和载入镜像

    • 上传镜像 docker push
    • 存出镜像 docker save 支持-o、-output string 导出镜像到指定文件夹中
    • 载入镜像 docker load 支持-i、-input string 从指定文件中读入镜像内容

Docker容器

创建容器

  • 新建容器 docker create 这条命令创建的容器处于停止状态,可用docker start命令来启动

  • 启动容器 docker start 启动,docker restart 重新启动

  • 创建并启动容器 docker run

    使用 docker run 创建容器,后台操作:

    • 检查本地是否存在指定镜像,不存在从仓库中下载
    • 利用镜像创建一个容器,并启动容器
    • 分配一个文件系统给容器,并在只读的镜像层外边挂载一层可读可写层
    • 从宿主机配置的网桥借口中桥接一个虚拟借口到容器中
    • 从网桥的地址池配置一个IP地址给容器
    • 执行用户指定的应用程序
    • 执行完毕后容器被自动终止
  • 守护运行 docker run -d 使用-d参数

  • 查看容器输出 docker logs

    • -details 打印详细信息
    • -f 持续保持输出 follow
    • -since string 输出从某个时间开始的日志
    • -tail string 输出最近的若干日志
    • -until string 输出某个时间之前的日志
  • 停止容器

    • 暂停容器 docker pause
    • 终止容器 docker stop
  • 进入容器 使用-d 容器启动后进入后台,这时候要进入容器操作,attach或exec命令

  • 删除容器 docker rm

    • -f 强制删除
    • -l 删除容器的连接,但保留容器 link=false
    • -v 删除容器挂载的数据卷 volumes=false
  • 导入导出容器

    • 导入 docker import
    • 导出 docker export
  • 查看容器

    • 查看容器详情 docker container inspect
    • 查看容器内进程 docker top
    • 查看统计信息 docker stats 会显示CPU、内存、存储、网络等使用的统计信息
  • 复制文件

  • 查看变更 docker diff

  • 查看端口映射 docker port

  • 更新配置 docker update

docker 仓库

  • docker 公共镜像市场 docker hub

    • 登陆 docker login 注册和登陆
  • 第三方镜像

    • 下载镜像 docker pull
  • 搭建本地私有仓库

    • 使用registry镜像创建私有仓库

        docker run -d -p 5000:5000 registry:2
      

      这将自动下载并启动一个registry容器,创建本地的私有仓库服务。
      默认仓库会被创建在容器的/var/lib/registry目录下,-v 参数将镜像文件存储在本地指定路径

    • 管理私有仓库

Docker数据管理

生产环境中使用docker,需要对数据进行持久化,或者需要在多个容器之间进行数据共享,需要容器的数据管理操作

两种方式:

  • 数据卷(Data Volumes) 容器内数据直接映射到本地机器环境
  • 数据卷容器(Data Volume Containers) 使用特定容器维护数据卷

数据卷容器可迁移数据(备份、恢复)

数据卷

数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似与Linux中的mount行为

  • 特性

    • 数据卷可以在容器之间共享和重用,容器之间传递数据高效方便
    • 数据卷内的数据修改会马上生效,无论是容器内部操作还是本地操作
    • 对数据卷的更新不会影响镜像,解耦应用和数据
    • 卷会一直存在,知道没有容器使用,可以安全的卸载
  • 创建数据卷

      docker volume create -d local test
    
  • 绑定数据卷

    docker run 的时候可用使用 -mount选项来使用数据卷

    • -volume 普通数据卷,映射到主机/var/docker/volumes路径下
    • bind 绑定数据卷,映射到指定路径下
    • tmpfs 临时数据卷 只存在于内存中

数据卷容器

数据卷容器专门提供数据卷给其他容器挂载

端口映射与容器关联

实践中,经常需要多个服务组件容器共同协作,这往往需要多个容器之间能够互相访问到对方的服务,docker除了网络访问外,还有两个功能以便服务间访问

  • 允许映射容器内应用的服务端口到本地宿主主机
  • 互联机制实现多个容器间通过容器名来快速访问

端口映射实现容器访问

  • 从外部访问容器应用

    当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P 或-p参数来制定端口映射。当使用-P标记时,Docker会随机映射一个49000~49900的网络端口

  • 映射所有接口地址

    使用HostPort:ContainerPort格式,把本地端口映射到容器端口

      docker run -d -p 5000:5000 training/webapp python app.py
    
  • 映射到指定地址的指定端口

    可以使用IP:HostPort:ContainerPort格式指定映射shying一个特定地址

  • 映射到指定地址的任意端口

    IP:ContainerPort 绑定localhost的任意端口到容器的5000端口

      docker run -d -p 127.0.0.1::5000 training/webapp python app.py
    
  • 查看映射端口配置

    docker port 来查看当前映射的端口配置,也可以查看到绑定的地址

互联机制

容器的互联是一种让多个容器中的应用进行快速交互的方式。在源和接收容器之间创建连接关系,接受容器可以通过容器名快速访问到源容器,而不用指定具体的IP和端口

  • 自定义容器命名

    创建容器时系统会分配一个名称,但是自定义比较好

    使用–name命名

      docker run -d -P --name web training/webapp python app.py
    
  • 容器互联

    使用–link参数 让容器之间安全地进行交互

      docker run -d --namne db training/postgres
      docker run -d -P --name web --link db:db training/webapp python app.py
    

    此时db容器和web容器建立互联关系。–link参数的格式为 --link name:alias,其中name是容器的名称,alias是别名

    docker通过 两种方式为容器公开连接信息

    • 更新环境变量
    • 更新/etc/hosts文件

    可使用env命令来查看容器的环境变量

docker 安装镜像

安装mysql镜像

https://www.runoob.com/docker/docker-install-mysql.html

docker search mysql 命令来查看可用版本
docker pull mysql:latest 获取最新镜像
docker images 查看已经安装的镜像

docker run -itd --name mysql-docker -p 127.0.0.1:9000:3306 -e  MYSQL_ROOT_PASSWORD=123456 mysql

docker ps 命令查看是否安装成功

将容器3306端口映射到主机9000端口上

mysql连接测试:

mysql -u root -p -h127.0.0.1 -P9000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值