热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Docker入门教程,值得收藏

一.什么是Docker?  百度百科:Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows

一.什么是Docker?

 

 


百度百科:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
docker官网:http://www.docker.com


 

 


二.为什么说Docker是容器化技术?

 

 




  • 容器化技术的特点:



  • 标准化:每个容器都是标准化、可移植的,因为他们直接运行在宿主机的内核上



  • 隔离:容器互相隔离,互不干扰,独立运行



  • 高性能:容器性能开销极低,可以实现分钟级甚至秒级的部署和启动



  • 版本:CE(Community Edition:社区版)和 EE(Enterprise Edition:企业版)




 

 


三.Docker 理念

 

 


Build,Ship and Run Any App,Anywhere,在任何地方构建、 发布并运行任何应用程序(一次封装,到处运行)


 

 


四.Docker 架构

 

 


docker 由三部分组成:



  • Client 客户端



  • docker 主机



  • Registry 镜像仓库服务器




 

 


docker daemon:



  • docker 安装后,会以后台运行、守护进程的形式存在



  • images 镜像: 镜像可以用来创建 docker 容器,一个镜像可以创建很多容器



  • containers: 镜像和容器的关系类似面向对象设计中的类和对象, 镜像是容器的模板,容器是基于镜像创建出来的。 容器可以被创建、启动、停止、删除等等。




 

 


Registry:



  • 镜像注册服务器 https://hub.docker.com 一个 docker Registry(仓库注册服务器) 中可以包含多个 Repository(仓库); 每个仓库可以包含多个标签/版本(Tag);每个标签对应一个镜像。 仓库分为公开仓库(Public)和私有仓库(Private)两种形式,公开仓库就是 docker 官方仓库,私有仓库是自己搭建的 docker 私服




 

 


Client:



  • docker 终端 安装好 docker 中,同时包含了 docker 客户端,客户端负责执行 docker 命令, 发送给 docker 主机中的 docker 守护进程,例如:从仓库下载镜像,通过镜像创 建容器等等




 

 


五.CentOS7 安装 docker

 

 


(1)安装需要的软件包:

 

 

yum install -y yum-utils device-mapper-persistent-data lvm2

 

 


(2)设置 docker 下载镜像(推荐用阿里云,一个字:快)

 

 

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 

 


(3)更新 yum 软件包索引

 

 

yum makecache fas

 

 


(4)安装 DOCKER CE (社区版)

 

 

yum install -y docker-ce docker-ce-cli containerd.io
注意第一次安装可能会出现错误,重新执行一下安装的命令就好了

 

 


(5)启动 docker

 

 

systemctl start docker # 启动docker
systemctl enable docker # 设置开机自启动

 

 


(6)查看版本

 

 

docker version

 

 


(7)docker 卸载,一次执行下面的三行命令

 

 

systemctl stop docker
yum remove -y docker-ce
rm -rf /var/lib/docker

 

 


六.配置阿里云镜像服务加速器

 

 

sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://ny5dsu6o.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker

 

 


七.Docker 常用命令

 

 


(1).Docker 基本命令

 

 



  • 版本信息:docker version



  • 详细信息:docker info



  • 帮助文档:docker --help 列出所有的docker命令



 

 


(2)Docker服务相关命令

 

 



  • 启动Docker服务:systemctl start docker



  • 关闭Docker服务:systemctl stop docker



  • 查看Docker状态:systemctl status docker



  • 重启Docker服务:systemctl restart docker



  • 设置Docker服务跟随虚拟机开机自启:systemctl enable docker



  • 取消Docker服务跟随虚拟机开机自启:systemctl disable docker



 

 


(3)Docker 镜像命令(docker官方镜像网站)

 

 



  • 查看所有的本机镜像:docker images [-q|--no-trunc],-q:查看镜像ID --no-trunc:查看完成的镜像ID



  • 查找镜像:docker search 镜像名称



  • 下载镜像:docker pull 镜像名称:版本号,不加版本号默认是latest最新版



  • 删除镜像:docker rmi [-f] 镜像名|镜像ID:版本号,删除指定版本镜像,版本为latest版本号可以省略,[-f]:强制删除



  • 批量删除:docker rmi [-f] mysql tomcat redis ,除多个镜像,使用空格间隔不同的镜像名称



 

 


我就不演示了


 

 



  • 删除全部镜像:docker rmi -f $(docker images -q)



 

 


我就不演示了


 

 



  • 查看镜像详情:docker inspect 镜像名|镜像ID



 

 


(4)容器操作

 

 



  • 列出所有正在运行的容器,不包含已停止的容器(容器怎么运行可以看后面):docker ps



  • 列出当前所有已经创建的容器:docker ps [-aq]



  • 创建容器:



 

 


docker create 镜像名称 # 根据镜像名创建一个容器


 

 


docker create --name tomcat1 镜像名称 # 根据镜像创建名为 tomcat1 的容器


 

 


docker create 镜像 id # 根据镜像 id 新建一个容器


 

 



  • 启动、停止、重启容器:



 

 


docker start 容器名|容器ID


 

 


docker stop 容器名|容器ID


 

 


docker restart 容器名|容器ID


 

 


docker kill 容器名|容器ID 根据容器名强制停止一个容器


 

 



  • 创建并启动容器:docker run --name tomcat2 tomcat
    当本地镜像存在时,相当于 docker create + docker start
    当本地镜像不存在时,相当于 docker pull + docker create + docker start



  • 删除容器:



 

 


docker rm 容器名称 #删除未启动的容器


 

 


docker rm -f 容器名称 #强制删除已启动的容器


 

 


docker rm -f $(docker ps -qa) #删除所有容器,包括正在运行的容器
我就不演示了


 

 


docker ps -a -q | xargs docker rm #删除所有容器,不包括正在运行的容器
我就不演示了


 

 



  • 交互式启动:docker run -it --name qiu 镜像名|镜像ID



  • 进入容器:docker exec -it 容器ID|容器名称 /bin/bash



  • 退出容器:



 

 


ctrl + p + q # 不停止退出容器


 

 


exit #容器停止退出,此时执行


 

 



  • 启动守护式容器:docker run -d --name qiu 镜像名|镜像ID



 

 

推荐直接使用:docker run -itd --name qiu 镜像名|镜像ID

 

 


八.数据卷

 

 


(1)什么是数据卷:数据卷是存在于一个或多个容器中的特定文件或文件夹,这个文件或文件夹以独立于 docker 文件 系统的形式存在于宿主机中

 

 


(2)解决了什么问题?例如:MySQL 容器损坏无法启动,需要删除容器重新创建,那么数据库数据将会丢失

 

 


(3)安装centos:7镜像:docker pull centos:7

 

 


(4)做一个例子

 

 

将宿主机根目录中的 qiu 挂载到容器根目录中的 qiu

 

 


(5)挂载数据卷

 

 

docker run -itd -v /qiu:/qiu --name myMysql mysql

 

 

-v:挂载数据卷格式: /宿主机目录(文件):/容器内目录(文件) 目录必须是绝对路径 如果目录不存在, 则自动创建 可以挂载多个数据卷

 

 


(6)查看数据卷是否挂载成功

 

 

docker inspect myMysql

 

 


(7)数据共享

 

 

首先进入容器,在容器的数据卷挂载目录中创建文件并写入内容
然后退出容器,查看宿主机挂载目录,可以看到同步更新的文件

 

 


(8)数据的同步

 

 

首先停止容器
然后在宿主机修改共享数据 接下来启动前面的容器,
查看共享数据文件,发现数据在容器中同步

 

 


(9)数据的持久化

 

 

首先删除容器
然后在宿主机修改共享数据
接着重新创建容器并挂载数据卷
发现数据在容器中恢复

 

 


(10)一个容器挂载多个数据卷,两个容器挂载同一个数据卷

 

 

docker run -it -v /dataVolumeHost31:/dataVolumeContainer31 -v /dataVolumeHost32:/dataVolumeContainer32 --name centos3 centos:7
docker run -it -v /dataVolumeHost:/dataVolumeContainer4 --name centos4 centos:7
docker run -it -v /dataVolumeHost:/dataVolumeContainer5 --name centos5 centos:7

 

 


九.应用部署

 

 


(1)部署 tomcat

 

 


创建并运行tomcat容器
docker run -d -p 8080:8080 -v /docker/tomcat/webapps:/usr/local/tomcat/webapps -v /docker/tomcat/logs:/usr/local/tomcat/logs --name qiu_tomcat tomcat:8.5


 

 


准备一个index.html页面,使用 ftp 工具上到 /docker/tomcat/webapps/qbb 中


 

 


浏览器访问一下:http://192.168.137.72:8080/qbb/


 

 


也可以查看一下tomcat的日志:docker logs -tf --tail 20 atguigu_tomcat


 

 


(2)部署MySQL

 

 

docker run -d -p 3306:3306 -v /docker/mysql/conf:/etc/mysql/conf.d -v /docker/mysql/logs:/logs -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name atguigu_mysql mysql:5.7

 

 


十.docker 容器化技术和虚拟机技术

 

 


十一.镜像制作

 

 


(1)方式一:通过容器制作镜像

 

 


①生成镜像

 

 

docker commit 容器名 镜像名称:版本号

 

 


②压缩镜像

 

 

docker save -o 压缩文件名称 镜像名称:版本号

 

 


③还原镜像

 

 

docker load -i 压缩文件名称

 

 


(2)做一个例子:我们将前面tomcat制作成一个镜像然后部署运行

 

 


①将虚拟机的/docker/tomcat/webapps/qbb copy到 qiu_tomcat这个容器下的/usr/local/tomcat/webapps/ROOT目录

 

 

docker cp /docker/tomcat/webapps/qbb qiu_tomcat:/usr/local/tomcat/webapps/ROOT

 

 


②进入容器:docker exec -it qiu_tomcat /bin/bash,查看index.html是否赋值付过来了

 

 


③浏览器访问一下:http://192.168.137.72:8080/

 

 


④生成镜像;注意:要先退出容器(exit)

 

 

docker commit -a "qiuqiu" -m "create image from container" qiu_tomcat qbb/mytomcat:1.0

 

 


⑤压缩镜像

 

 


县创建/opt/docker目录

 

 

mkdir -p /opt/docker

 

 


执行压缩命令

 

 

docker save -o /opt/docker/qbb_mytomcat_v1.0 qbb/mytomcat:1.0

 

 


⑥还原镜像

 

 


我们先删除原来的镜像和容器

 

 

docker rm -f qiu_tomcat
docker rmi 9ddc19a406d0

 

 


由压缩程序还原出镜像文件

 

 

docker load -i /opt/docker/qbb_mytomcat_v1.0

 

 


一键部署

 

 

docker run -d -p 8080:8080 --name mytomcat qbb/mytomcat:1.0



推荐阅读
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • PL2303HXD电路图(USB转UART)介绍及应用
    本文介绍了PL2303HXD电路图(USB转UART)的特性和应用,该电路图可以实现RS232和USB信号的转换,方便嵌入到手持设备中。PL2303HXD作为USB/RS232双向转换器,可以将USB数据转换为RS232信息流格式发送给外设,并将RS232外设的数据转换为USB数据格式传送回主机。通过利用USB块传输模式和自动流量控制,PL2303HXD能够实现更高的数据传输吞吐量比传统的UART端口。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • 本文介绍了iOS开发中检测和解决内存泄漏的方法,包括静态分析、使用instruments检查内存泄漏以及代码测试等。同时还介绍了最能挣钱的行业,包括互联网行业、娱乐行业、教育行业、智能行业和老年服务行业,并提供了选行业的技巧。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
author-avatar
禅城花市C077
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有