史上最详细的docker学习手册,请查收!(一)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 史上最详细的docker学习手册,请查收!(一)

一、docker入门


1、docker的安装及入门示例

  • 环境准备:docker需要安装在centos7 64位系统上;docker要求系统内核在3.10以上
  • 查看系统内核:
uname -r
  • 安装命令:
yum -y install docker-io
  • 安装完成后,启动命令
service docker start
  • 安装nginx体验
docker run -p 80:80 -d nginx

2、doker的理论概念

  • 什么是docker:
    鲸鱼通过身上的集装箱(Container)来将不同种类的货物进行隔离;而不是通过生出很多小鲸鱼(Guest OS)来承运不同种类的货物。Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
    物理机、虚拟机、docker的形象对比
    这是物理机:一栋楼一户人家、独立地基、独立花园。

    这是虚拟机:一栋楼包含多套房子,一套房一户人家,共享地基、共享花园,独立卫生间、厨房、宽带

    这是docker容器:一套房隔离成多个小空间俗称胶囊公寓,每个胶囊住一个租客,共享地基、花园、卫生间、厨房、宽带等等

  • docker和虚拟机的对比

docker 虚拟机
运行环境 docker构建在操作系统上,所以docker甚至可以在虚拟机上运行 虚拟化技术依赖物理CPU和内存,是硬件级别的
隔离性 docker属于进程之间的隔离 虚拟机可实现系统级别隔离
安全性 Docker的租户root和宿主机root等同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。    故:docker的安全性也更弱 虚拟机租户root权限和宿主机的root虚拟机权限是分离的,并且虚拟机利用硬件隔离:如Intel的VT-d和VT-x的ring-1硬件隔离技术,这种隔离技术可以防止虚拟机突破和彼此交互     虚拟机的安全性高
可管理性 docker的集中化管理工具还不算成熟。 各种虚拟化技术都有成熟的管理工具,例如VMware  vCenter提供完备的虚拟机管理能力。
快速创建、删除 Docker容器创建是秒级别的,Docker的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间。 虚拟化创建是分钟级别的
交付、部署 Docker在Dockerfile中记录了容器构建过程,可在集群中实现快速分发和快速部署; 虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化;
  • docker的架构原理


derver daemon:docker server是一个守护进程,它可以部署远程也可以部署本地。它包含2部分网络newtwork和磁盘data volumes

REST API: 实现了client和server间的通信交互协议

CLI(command line interface): docker client ,它包含2部分容器和镜像,1个镜像可以创建N个容器(container)

Image:个只读的镜像模板。可以自己创建一个镜像也可以从网站上下载镜像供自己使用。

Container:由docker client通过镜像创建的实例,用户在容器中运行应用,一旦创建后就可以看做是一个简单的操作系统,每个应用运行在隔离的容器中,享用独自的权限,用户,网络。

Registry:镜像仓库,用来存储和管理image镜像,目前主流的仓库有Docker hub、阿里云镜像仓库,也可以自己创建仓库来管理。

说明:docker client 通过3个命令,先到docker daemon pull拉取images,如果服务端没有,先到仓库拉取,(如果仓库没有你可以build自建images);最后通过run命令创建容器


二、镜像管理


1、什么是镜像

  • 一个只读的模板,就是一个dockerfile,可以在镜像仓库上传或下载
  • 先有镜像,后有容器;并且一个镜像可以创建多个容器。
  • docker镜像最大的特点:分层结构。
    最底层是一个base层,也即是一个操作系统层。它还会从base层一层层的叠加生成(什么是层层叠加?例如,安装一个软件,它就会在base层的基础上追加一层。它的好处就是资源共享)。

2、镜像相关命令

  • 查看docker本地的镜像
docker images
  • 搜索一个镜像
docker search mysql

  • INDEX :仓库地址
    NAME  :仓库+名称
    STARS :用户的喜欢程度
    OFFICIAL:是否为官方,如果为OK的话代表官方,可信度高,放心使用 UTOMATED:是否为公开的dockerfile脚本制成的?也即是说dockerfile是否提供。
  • 下载一个镜像
docker pull mysql:5.7
  • 下载完后,查看是否在本地 docker images
  • 删除docker镜像
docker rmi [imageID]
# 如果要删除全部镜像 
docker rmi $(docker images -q)
  • 加速器的配置
#centos的阿里云加速器命令
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://uqxmqcrw.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

3、dockerfile

  • dockerfile概念
    dockerfile是一个文本的配置文件,它可以快速创建自定义的镜像,文本内容包含了若干的命令行,并支持#作为注释行,文本格式包含基础镜像FROM,维护者MAINTAINER,操作指令ADD,容器启动后指令等共计4部分
  • dockerfile文件示例
#1.基础镜像:FROM指令:基础镜像名:tag,例如java:8
FROM java:8
#2.维护者:格式:MAINTAINER <name>
MAINTAINER jackly
#3.镜像的操作指令
# ADD拷贝一个文件到容器中,格式:ADD <src> <dest>
ADD eureka-server-0.0.1-SNAPSHOT.jar  /app/service/eureka/data/app.jar
#告诉docker容器暴露端口,在容器启动的时候,需要通过-p 做端口映射
EXPOSE 8761
#5.配置容器启动后,执行什么命令
ENTRYPOINT ["java","-jar","/app/service/eureka/data/app.jar"]
  • 构建docker镜像
#其中 -t 对镜像进行命名,一般的命名法:仓库名字/镜像名字:版本号
#注意:其中 .号,代表当前目录下的dockerfile文件
docker build -t registry-jackly/eureka-server:1.0.0 .
  • 查看和运行镜像容器
#查看本地镜像
docker images
#启动镜像
docker run -d -p 8761:8761 --name=eureka registry-jackly/eureka-server:1.0.0


三、镜像仓库管理


1、建设dockerhub官方仓库

  • 什么是镜像仓库
    就是存放镜像的地方
  • 推送镜像到dockerhub(需翻墙)
①、登录 https://hub.docker.com/,创建一个eureka-server仓库
②、本地linux登录docker官方, docker login
③、改镜像的名,(为什么要改?因为docker官方镜像仓库是以 用户名 来命名仓库的)
   docker tag registry-jackly/eureka-server:1.0.0 jacklydocker/eureka-server:1.0.0
④、推送镜像到官方仓库
   docker push jacklydocker/eureka-server:1.0.0
⑤、拉取上传的镜像
   先删除旧镜像:docker rmi jacklydocker/eureka-server:1.0.0
   拉取镜像:docker pull jacklydocker/eureka-server:1.0.0
   创建容器:docker run -d -p 8761:8761 --name=eureka docker.io/jacklydocker/eureka-server:1.0.0

2、建设阿里云docker仓库

  • 推送镜像到阿里云仓库
①、登录阿里云,先创建命名空间,并建个镜像仓库
②、本地linux登录登录阿里云Docker Registry, docker login --username=你的用户名 registry.cn-shenzhen.aliyuncs.com
③、改镜像的名,(为什么要改?因为docker官方镜像仓库是以 用户名 来命名仓库的)
   docker tag 58acc264425c registry.cn-shenzhen.aliyuncs.com/jackly/eureka-server:1.0.0
④、推送镜像到阿里云仓库
   docker push registry.cn-shenzhen.aliyuncs.com/jackly/eureka-server:1.0.0
⑤、拉取上传的镜像
   docker pull registry.cn-shenzhen.aliyuncs.com/jackly/eureka-server:1.0.0

3、建设本地仓库

  • 为什么需要搭建本地仓库
    (1).节约带宽:因为如果用docker或阿里云官方的仓库走的互联网浪费带宽,而且慢。
    (2).提供资源利用和安全:因为公司内部的镜像,推送到本地仓库,更方便公司内部人员用,而且安全性高。
  • 创建仓库容器
#查找官方仓库
docker search registry
#拉取仓库镜像
docker pull registry
#运行仓库容器
docker run -d -p 5000:5000 \
--restart=always \
--privileged=true \
--name=registry-local-jackly \
-v /date/volume/registry:/var/lib/registry \
registry
  • 推动镜像到本地私有仓库
①、改镜像的名
   docker tag 58acc264425c reg.qxbdocker.com:5000/eureka-server:1.0.0
②、推送镜像到私有仓库(注意:记得改本地hosts:127.0.0.1 reg.qxbdocker.com)
   docker push reg.qxbdocker.com:5000/eureka-server:1.0.0
③、查看搭建仓库的信息
   查看仓库的镜像:
    curl -X GET http://127.0.0.1:5000/v2/_catalog
   仓库仓库某个镜像的版本信息:
    curl -X GET http://127.0.0.1:5000/v2/eureka-server/tags/list
⑤、拉取上传的镜像
 #先删除本地镜像
 docker rmi reg.qxbdocker.com:5000/eureka-server:1.0.0
 #在拉取仓库中的镜像
    docker pull reg.qxbdocker.com:5000/eureka-server:1.0.0


相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3月前
|
运维 虚拟化 开发者
Docker-全面详解(学习总结---从入门到深化)
Docker-全面详解(学习总结---从入门到深化)
49 1
|
4月前
|
分布式计算 Java Linux
【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Dockerfile使用手册)
Docker 是一套构建在 Linux 内核之上的高级工具,旨在帮助开发人员和运维人员更轻松地交付应用程序和依赖关系,实现跨系统和跨主机的部署。使用安全且轻量级的容器环境来实现这一目标。容器可以手动创建,也可以通过编写 Dockerfile 自动创建。开发人员和运维人员可以将应用程序及其依赖打包到容器中,实现应用程序的可移植性和环境一致性。
126 5
【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(Dockerfile使用手册)
|
20天前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs &lt;container_name&gt;` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
17 0
|
28天前
|
存储 Ubuntu Docker
Docker从入门到精通:Docker pull命令学习
了解Docker镜像下载方法!使用`docker pull`命令从[Docker Hub](https://hub.docker.com/)获取镜像。基本语法是`docker pull NAME[:TAG]`。例如,拉取Python最新镜像的命令是`docker pull python`或`docker pull python:latest`。可选参数包括`-a`(拉取所有标签)和`--quiet`(只显示进度条)。拉取后,用`docker images`检查镜像是否成功存储。开始你的容器化之旅吧!
32 0
|
28天前
|
关系型数据库 MySQL Go
Docker从入门到精通:Docker镜像相关命令学习
本文介绍了Docker中管理镜像的基本命令:`docker images`用于查看镜像列表,`docker search`从Docker Hub搜索镜像,`docker rmi`删除镜像,`docker tag`则用于标记和重命名镜像。通过这些命令,用户能有效管理自己的Docker镜像资源。
28 1
|
2月前
|
Cloud Native Shell Linux
云原生专题 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
云原生专题 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
19 0
|
2月前
|
Cloud Native Linux 虚拟化
云原生专题 |【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(底层实现系列)
云原生专题 |【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(底层实现系列)
55 0
|
3月前
|
Ubuntu 应用服务中间件 Docker
docker-学习
docker-学习
22 0
|
3月前
|
消息中间件 RocketMQ Docker
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
分布式事物【RocketMQ事务消息、Docker安装 RocketMQ、实现订单微服务、订单微服务业务层实现】(八)-全面详解(学习总结---从入门到深化)
56 0
|
4月前
|
存储 运维 Linux
精彩推荐 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
在使用Docker时,管理维护工作可能会显得复杂。然而,实际上,Docker提供了许多便捷且人性化的工具,这些工具的使用技巧可以大大简化维护工作,并提升效率。通过掌握这些技巧,你不仅能够更轻松地管理Docker环境,还能展现出专业的能力。接下来我们就给大家介绍一下对于我在工作当中对于Docker容器使用的技术实战总结
49 2
精彩推荐 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)