【服务计算】docker实践报告

2023-11-06

环境说明

主机系统:win10 x64
虚拟机管理器:Virtualbox 版本 6.1.0 r135406 (Qt5.6.2)
虚拟机系统:ubuntu-18.04.2-desktop-amd64

准备docker环境

官方指南
中文安装教程
使用 Docker 仓库进行安装

  • 设置仓库
    • 更新 apt 包索引
      sudo apt-get update
      
    • 安装 apt 依赖包,用于通过HTTPS来获取仓库
      sudo apt-get install \
          apt-transport-https \
          ca-certificates \
          curl \
          gnupg-agent \
          software-properties-common
      
    • 添加 Docker 的官方 GPG 密钥
      curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
      
      添加GPG密钥.PNG
    • 通过搜索指纹9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88的后8个字符,即0EBFCD88,验证您现在是否拥有带有指纹的密钥
      sudo apt-key fingerprint 0EBFCD88
      
      验证.PNG
    • 使用以下指令设置稳定版仓库
      sudo add-apt-repository \
         "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
        $(lsb_release -cs) \
        stable"
      
      addRepository.PNG
  • 安装 Docker Engine-Community
    • 更新 apt 包索引
      sudo apt-get update
      
    • 安装最新版本的 Docker Engine-Community 和 containerd
      sudo apt-get install docker-ce docker-ce-cli containerd.io
      
    • 测试 Docker 是否安装成功
      sudo docker version
      
      dockerVersion.PNG

运行第一个容器

运行镜像

sudo docker run hello-world

dockerHelloWorld.PNG

sudo docker run -it ubuntu bash

dockerUbuntuBash.PNG

Docker基本操作

  • 显示本地镜像库内容

    sudo docker images
    

    dockerImages.PNG

  • 获得帮助

    sudo docker --help
    

    输出如下结果:

    Usage:	docker [OPTIONS] COMMAND
    
    A self-sufficient runtime for containers
    
    Options:
          --config string      Location of client config files (default
                               "/home/jiere/.docker")
      -c, --context string     Name of the context to use to connect to the
                               daemon (overrides DOCKER_HOST env var and
                               default context set with "docker context use")
      -D, --debug              Enable debug mode
      -H, --host list          Daemon socket(s) to connect to
      -l, --log-level string   Set the logging level
                               ("debug"|"info"|"warn"|"error"|"fatal")
                               (default "info")
          --tls                Use TLS; implied by --tlsverify
          --tlscacert string   Trust certs signed only by this CA (default
                               "/home/jiere/.docker/ca.pem")
          --tlscert string     Path to TLS certificate file (default
                               "/home/jiere/.docker/cert.pem")
          --tlskey string      Path to TLS key file (default
                               "/home/jiere/.docker/key.pem")
          --tlsverify          Use TLS and verify the remote
      -v, --version            Print version information and quit
    
    Management Commands:
      builder     Manage builds
      config      Manage Docker configs
      container   Manage containers
      context     Manage contexts
      engine      Manage the docker engine
      image       Manage images
      network     Manage networks
      node        Manage Swarm nodes
      plugin      Manage plugins
      secret      Manage Docker secrets
      service     Manage services
      stack       Manage Docker stacks
      swarm       Manage Swarm
      system      Manage Docker
      trust       Manage trust on Docker images
      volume      Manage volumes
    
    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
    
    Run 'docker COMMAND --help' for more information on a command.
    
  • 显示运行中容器

    sudo docker ps
    

    dockerPS.PNG

  • 显示所有容器(包含已中止)

    sudo docker ps -a
    

    dockerPSall.PNG

  • 继续运行原容器并进入

    sudo docker restart exciting_wiles
    

    dockerRestart.PNG

MySQL与容器化

拉取MySQL镜像

  • 拉取MySQL镜像
    sudo docker pull mysql:5.7
    
    dockerPullSQL.PNG

构建docker镜像

  • 编辑dockerfile
    mkdir mydock && cd mydock
    vim dockerfile
    
    在文件中输入以下内容:
    FROM ubuntu
    ENTRYPOINT ["top", "-b"]
    CMD ["-c"]
    
  • 构建镜像
    sudo docker build . -t hello
    
    dockerBuild.PNG
  • 运行镜像
    sudo docker run -it --rm hello -H
    
    dockerRun.PNG

MySQL容器使用

  • 启动服务器

    sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
    

    启动服务器.PNG
    启动服务器后ps.PNG

  • 启动MySQL客户端

    sudo docker run -it --net host mysql:5.7 "sh"
    

    运行MySQL客户端.PNG
    MySQL客户端的基本操作可参考潘老师的博客

  • 数据库文件位置:

    $ sudo docker exec -it mysql2 bash
    # ls /var/lib/mysql
    

    事实上,每次启动MySQL容器,docker就会创建一个文件卷挂载在/var/lib/mysql位置,而这个卷在主机的/var/lib/docker/volumes/目录下
    数据库文件位置.PNG

  • dockerfile的VOLUME /var/lib/mysql 的含义

    • sudo docker container prune -fdockersContainerPrune.PNG
    • docker volume prune -f
      dockerVolumePrune.PNG
    • sudo docker volume ls
      dockerVolumeLs.PNG
  • 创建卷并挂载(挂载到/var/lib/mysql)

    sudo docker rm $(sudo docker ps -a -q) -f -v
    sudo docker volume create mydb
    sudo docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=root -v mydb:/var/lib/mysql -d mysql:5.7
    

    创建卷并挂载.PNG

  • 启动客户端连接服务器

    $ sudo docker run --name myclient --link mysql2:mysql -it mysql:5.7 bash
    /# env
    /# mysql -hmysql -P3306 -uroot -proot
    

    说明:这里使用了--link连接两个容器;客户端容器内可以使用mysql这个别名访问
    启动客户端连接服务器.PNG

  • 挂载现有数据库

    • 首先查看当前的镜像有哪些:sudo docker images
      Images.PNG
    • 挂载
      sudo docker run -v "$PWD/data":/va/lib/mysql --user 1000:1000 --name wyb-sql -e MYSQL_ROOT_PASSWORD=19970805 -d mysql:5.7
      

    其中,

    • --user(或-u):提供用户名(或UID),格式为<name|uid> : <group|gid>
    • --name:为容器指定一个别名
    • -e(或--env):设置环境变量
    • -d(或--datch):在后台运行容器,并在终端打印容器的ID

    更多参数说明可参考官方手册
    挂载现有数据库.PNG

  • 修改容器配置(例如修改密码和别名)

    sudo docker run --name web-sql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=0805 -d mysql:5.7
    
    • --name:为容器重新指定一个别名
    • -v(或--volume):挂载卷
    • -e(或--env):设置环境变量
    • -d(或--datch):在后台运行容器,并在终端打印容器的ID

    更多参数说明可参考官方手册
    修改容器配置.PNG

Docker compose与多容器应用自动化部署

  • 下载docker-compose(容器编排的原型):

    sudo apt install docker-compose
    
  • 编写stack.yml如下:

    version: '3.1'
    services:
     db:
      image: mysql:5.7
      command: --default-authentication-plugin=mysql_native_password
      restart: always
      environment:
       MYSQL_ROOT_PASSWORD: 19970805
     adminer:
      image: adminer
      restart: always
      ports:
       - 8080:8080 
    
  • 启动服务

    sudo docker-compose -f stack.yml up -d
    

    dockerCompose.PNG

docker网络

docker默认网络:

  • 容器通过桥(docker0)相连
  • IP-Forward通过NAT访问外面
  • 端口映射使外面访问容器

容器网络管理

  • 容器默认使用网络:docker0(桥接)
  • 容器支持网络与类型
    • bridge(本机内网络)
    • host(主机网卡)
    • overlay(跨主机网络)
    • none
    • Custom(网络插件)
  • 管理容器网络
    sudo docker network ls
    
    networkLs.PNG
    说明:docker-compose为每个应用建立自己的网络

自定义容器网络

  • 备制支持ifconfigping命令的ubuntu容器

    sudo docker run --name unet -it --rm ubuntu bash
    
    apt-get update
    apt-get install net-tools
    apt-get install iputils-ping -y
    ifconfig
    

    ifconfi.PNG
    根据上面得到的ip地址,ping 172.17.0.2
    pingSelf.PNG
    ping主机:ping 172.26.45.15
    pingHost.PNG

  • 打开另一个终端窗口,由容器制作镜像

    sudo docker commit unet ubuntu:net
    

    由容器制作镜像.PNG

  • 创建自定义网络

    sudo docker network create mynet
    
  • 在另外两个窗口分别创建u1,u2容器网络,并使用以下命令:

    sudo docker run --name u1 -it -p 8080:80 --net mynet --rm ubuntu:net bash
    sudo docker run --name u2 --net mynet -it --rm ubuntu:net bash
    sudo docker info
    

    dockerInfo.PNG

    sudo docker network connect bridge u1
    sudo docker network disconnect mynet u1
    

    inspectMyNet.PNG
    有关docker网络更详细的介绍可参考官方手册 network,亦或参考文章 Docker - 网络使用详解2(创建自定义网络:user-defined)

docker仓库(Registry)

容器仓库在cnf技术栈中属于供给层

  • 公共容器仓库服务
    • Docker hub
    • Amazon ECR
    • … …
    • 几乎所有容器云服务商都免费提供此服务
  • 私有容器仓库工具
    • Docker Registry 2
    • Vmware Harbor
    • Sonatype Nexus 3

私有容器仓库搭建

根据官方指南进行实践:

  • Docker 官方提供了一个搭建私有仓库的镜像 registry ,首先需把镜像下载下来
    sudo docker pull registry:2
    
  • 运行容器并暴露9785端口
    sudo docker run -d -p 9785:9785 --restart=always --name wybregistry registry:2
    
    运行容器.PNG
  • 从docker hub上拷贝一个镜像到仓库中
    • 从docker hub拉取ubuntu:16.04镜像
      sudo docker pull ubuntu:16.04
      
      拉取镜像.PNG
    • 将镜像标记为localhost:5000/my-ubuntu
      sudo docker tag ubuntu:16.04 localhost:5000/my-ubuntu
      
    • 将镜像push到正运行在localhost:5000的本地仓库中
      sudo docker push localhost:5000/my-ubuntu
      
    标记并push.PNG
    • 将本地缓存中的ubuntu:16.04localhost:5000/my-ubuntu镜像删掉
      sudo docker image remove ubuntu:16.04
      sudo docker image remove localhost:5000/my-ubuntu
      
      删除镜像.PNG
    • 从本地仓库中拉取镜像localhost:5000/my-ubuntu
      sudo docker pull localhost:5000/my-ubuntu
      
      从本地仓库拉取镜像.PNG
  • 停用本地仓库
    • 停用仓库使用命令docker container stop,例如
      sudo docker container stop wybregistry
      
    • 删除容器使用命令docker container rm,例如
      sudo docker container rm -v wybregistry
      
    停用本地仓库.PNG

阿里云容器镜像服务实践

  • 访问登录页面
  • 登录
  • 开通“容器镜像服务”:设置registry密码
  • 配置镜像加速器(要求Docker客户端版本大于 1.10.0,我的是19.03.5):通过修改daemon配置文件/etc/docker/daemon.json来使用加速器,在终端输入如下命令:
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://9n0uofr7.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    配置镜像加速器.PNG
    • 检查是否配置成功:journalctl -f -u docker
      成功配置镜像加速器.PNG
  • 创建镜像仓库的命名空间,例如yibo-cool-guy
    创建命名空间.PNG
  • 创建镜像仓库
    • 根据提示和要求,输入必要信息
      创建镜像仓库1.PNG
    • 选择代码源为本地仓库
      创建镜像仓库2.PNG
  • 点击进入前面创建的仓库,将有常用仓库操作提示:
    • 登录(用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码;可以在访问凭证页面修改凭证密码)
      sudo docker login --username=淼姐姐阿嚏 registry.cn-shenzhen.aliyuncs.com
      
      若报错“登录超时”:
      Error saving credentials: error storing credentials - err: exit status 1, out: `Error calling StartServiceByName for org.freedesktop.secrets: Timeout was reached`
      
      则执行命令删除如下文件:
      rm /usr/local/bin/docker-credential-osxkeychain
      sudo rm /usr/bin/docker-credential-secretservice
      
      解决后成功登录:
      登录阿里云.PNG
    • 将镜像推送到Registry
      sudo docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/yibo-cool-guy/senseless:[镜像版本号]
      sudo docker push registry.cn-shenzhen.aliyuncs.com/yibo-cool-guy/senseless:[镜像版本号]
      
      以上传前面的hello-world镜像为例,首先查看其镜像ID为fce289e99eb9,然后执行上述命令推送即可
      推送镜像.PNG
      这时在阿里云仓库上可以看到上传的镜像:
      镜像版本.PNG
    • 从Registry中拉取镜像
      sudo docker pull registry.cn-shenzhen.aliyuncs.com/yibo-cool-guy/senseless:[镜像版本号]
      
      拉取成功后可以看到本地镜像多了registry.cn-shenzhen.aliyuncs.com/yibo-cool-guy/senseless
      在这里插入图片描述
    • 删除
      sudo docker rmi registry.cn-shenzhen.aliyuncs.com/yibo-cool-guy/senseless:[镜像版本号]
      
      删除成功后可以看到本地镜像少了registry.cn-shenzhen.aliyuncs.com/yibo-cool-guy/senseless
      删除镜像.PNG
    • 运行
      sudo docker run --rm registry.cn-shenzhen.aliyuncs.com/yibo-cool-guy/senseless:0
      
      运行容器.PNG
    • 退出
      sudo docker logout registry.cn-shenzhen.aliyuncs.com
      
      退出.PNG

其他参考资料

Docker login问题

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【服务计算】docker实践报告 的相关文章

  • [附源码]计算机毕业设计Python课程在线测评系统(程序+源码+LW文档)

    该项目含有源码 文档 程序 数据库 配套开发软件 软件安装教程 项目运行 环境配置 Pychram社区版 python3 7 7 Mysql5 7 HBuilderX list pip Navicat11 Django nodejs 项目技
  • 一文理解pytorch张量概念和tensor的三种创建方式!

    1 张量是什么 张量是一个多维数组 它是标量 向量 矩阵的高维拓展 1 1 Variable Variable是 torch autograd中的数据类型 主要用于封装 Tensor 进行自动求导 data 被包装的Tensor grad
  • 超实用的IDEA插件推荐,百万级下载量

    超实用的30多款idea插件 有百万级下载量的优秀插件 你值得拥有 好的工具助你事半功倍 快速协助敲出更漂亮更有效率的代码 搬运工这里收集了很不错的IDEA插件 相信你一定会喜欢的 必备插件列表 Grep Console 自定义控制台输出格
  • C#常用代码

    最近学习用C 写了几个程序 记录一下常用的几个操作 方便以后Copy 文件操作 FileStream fs null try byte buf FileStream fs new FileStream strSampleFileName F
  • Ubuntu16.04下opencv2与ROSkinetic中自带opencv3不兼容问题总结

    1 背景 从ROSindigo换到ROSkinetic ROSkinetic中自带的opencv3 与原来indigo中opencv2不一样 所以原来的涉及opencv的程序都出了问题 最近这两天就一直在改兼容性 清明节最后一天了 总结一下
  • WebStorm2016.2 注册码及激活,2018.6.14亲测有效

    License server激活 这可能是最简单的了 在激活框 选择 License server 输入 http idea iteblog com key php 2018 6 14可用
  • table自定义表格的封装

    前言 对原生的table进行封装 让他满足我们一行显示不同个的需求 实现效果 如图所示 一行显示不同数量的内容 实现代码 1 封装的组件 custom table vue 源码看下面 1 一行显示几个td 2 表头数据 表格数据 3 js封
  • 深度学习python图像标记工具labelTool

    深度学习训练需要标记图像位置和类别 之前用的时候是叫做BBox Label Tool master 遇到大图像就显示不完整了 没有自适应缩放 这是改进后的Python脚本 目录结构 图片目录名images 标签目录名labels 图像目录下

随机推荐

  • JDK 新特性篇:JDK 8 新特性详解

    Java8新特性简介 Java 8 又称为 JDK 1 8 是 Java 语言开发的一个主要版本 Java 8 是 Oracle 公司于 2014 年 3 月发布 可以看成是自 Java 5 以来最具革命性的版本 Java 8 为 Java
  • 函数重载和缺省参数

    函数重载 C 允许在同一作用域类声明几个功能类似的同名函数 但是这些同名函数的形式参数 指参数的个数 类型或者顺序 必须不同 也就是说用同一个运算符完成不同的运算功能 函数重载必须是参数的个数或者类型不同 与返回值无关 在C语言当中是不支持
  • 李宏毅机器学习——梯度下降详细讲解

    文章目录 梯度下降 1 学习率 1 1自适应学习率 1 2 Adagrad算法 2 随机梯度下降 3 特征缩放 3 1 特征缩放原因 3 2 特征缩放方法 4 梯度下降的限制 梯度下降 梯度下降是为了解决回归方程中参数的最优化问题 即表现为
  • STM32F446+OLED12864做贪吃蛇游戏

    上面是我的微信和QQ群 欢迎新朋友的加入 闲暇之余发现看了下OLED12864的数据手册 发现他的显示在Y轴上只有页写 也就是一次写8个点 突然想到 如果自己程序需要精准定位到某个点 那这不是会很艹蛋么 去网上搜索 基本上都是页写的代码 也
  • mysql 自动备份(windows 环境)

    windows环境设置mysql自动备份 测试成功 要实现数据库的自动备份就需要一下两步 一 利用MySQL提供的备份命令mysqldump 结合Windows的任务计划程序 实现步骤 编写脚本 说明 该脚本不会关闭数据库 并且可以按每一天
  • C#强制杀进程

    通过cmd命令实现 using System using System Collections Generic using System Linq using System Text using System Threading Tasks
  • 小波矩特征提取matlab代码

    这是我上研究生时写的小波矩特征提取代码 新归一化方法小波矩特征提取 F imread a1 bmp F im2bw F F imresize F 128 128 求取最上点for i 1 128 for j 1 128 if F i j 1
  • AVPlayer 播放在线视频和本地文件的设置区别

    http blog csdn net u012671808 article details 30500595 comments
  • 动态文件版通讯录及C语言中的文件的读写操作

    上一期我们编写了一个C语言版本的简易通讯录 但是我们的之前的通讯录是没有记忆功能的 也就是说 一旦关闭了程序我们存储在里面的数据也就消失了 那么今天我们就来实现一个附带数据储存的通讯录 在此之前 我们先来了解一下C语言中文件的读写函数 1
  • QT-通过控件ObjectName获取控制

    QT 通过控件ObjectName获取控制 示例 1 说明解释 示例 1 说明解释 代码如下 QString strObjectName QString lineEditDev5IP QLineEdit pLineEdit this gt
  • KVM中的ballooning详解

    KVM中的ballooning详解 1 Ballooning简介 通常来说 要改变客户机占用的宿主机内存 是要先关闭客户机 修改启动时的内存配置 然后重启客户机才能实现 而内存的ballooning 气球 技术可以在客户机运行时动态地调整它
  • kibana数据导入导出_怎么实现kibana的数据导入导出

    匿名用户 1级 2016 10 19 回答 logstash好说 client只需要在代码逻辑改下redis地址就可以了 logstash server直接docker pull镜像就可以了 elasticsearch需要我们自己写脚本迁移
  • 机器翻译 深度学习预处理实战(中英文互译)一

    深度学习预处理实战 中英文互译 文章目录 深度学习预处理实战 中英文互译 前言 一 获取中英互译的数据集 二 具体步骤 1 首先引入相关库 2 中英文预处理 3 主函数运行 前言 基于深度学习的机器翻译学习分为三步 1 解决自动将一种自然语
  • python获取指定时间段内特定规律的日期列表

    前言 写小程序时 遇到个需要自定义回归时间的场景 下面是实现的效果图 于我需求而言 我只需要用到fixed interval weekly per month三个方法返回的回归间隔列表就行 最后的这个make date from list方
  • 开源软件选型分析标准【转载】

    http wenku baidu com view 0f4acf88cc22bcd126ff0ca2 html re view 1 标准和目标 1 1前言目前开源的网管软件众多 时间关系只能通过网络上的资料介绍和其他用户的体验进行评估 对于
  • ROI Pooling层详解

    ROI Pooling层详解 原文链接 https blog deepsense ai region of interest pooling explained 目标检测typical architecture 通常可以分为两个阶段 1 r
  • NO.15 不得不说的以太坊跟ICO

    随着以太坊的出现 区块链进入了2 0时代 以太坊是个太神奇的东西 没有天才的想法 高超的技术以及黑客的精神是无法如此成功的 它实现了区块链项目的快速开发 快速实施 以太坊这个开发平台本身发行了一种币叫做以太币 ETH 使用此平台开发出来的应
  • APS系统介绍

    APS系统介绍 前言 听说新工作将是做APS系统 之前没接触过 所以查找了一些资料 整理学习记录于此 本文打算从以下几个方面来阐述 APS的概念 前提条件 怎么实现 优化算法 简单示例 APS概念 APS Advanced Planning
  • el-table表单实现点击编辑按钮对内容进行编辑

    el table表单实现点击编辑按钮对内容进行编辑 话不多说 先上效果图 这里我将按钮绑定了dialog对话框 避免直接在原有表行之间进行修改 因为后台管理系统多是响应式布局 使用dialog对话框可以更直观的让用户对内容进行编辑 而对于在
  • 【服务计算】docker实践报告

    docker实践报告 环境说明 准备docker环境 运行第一个容器 Docker基本操作 MySQL与容器化 拉取MySQL镜像 构建docker镜像 MySQL容器使用 Docker compose与多容器应用自动化部署 docker网