Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南

马肤
摘要:本文介绍了Docker从入门到实践的全过程。内容涵盖了Docker的基本概念、安装配置、镜像管理、容器操作、网络设置等方面,为初学者提供了详尽的教程,同时也为进阶者提供了实用的干货技巧。阅读本文,读者可以全面掌握Docker的核心知识,轻松应对实际工作中的应用场景。

点击图标或者

open /Applications/Docker.app

windows


不推荐在windows安装,如果实在没有也可以装。

教程参考:www.runoob.com/docker/wind…

Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境。

Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。

因此,Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境。

Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第1张

在 Windows 上部署 Docker 的方法都是先安装一个虚拟机,并在安装 Linux 系统的的虚拟机中运行 Docker。

Docker Desktop 是 Docker 在 Windows 10 和 macOS 操作系统上的官方安装方式,这个方法依然属于先在虚拟机中安装 Linux 然后再安装 Docker 的方法。

Docker Desktop 官方下载地址: hub.docker.com/editions/co…

**注意:**此方法仅适用于 Windows 10 操作系统专业版、企业版、教育版和部分家庭版!

安装 Hyper-V

Hyper-V 是微软开发的虚拟机,类似于 VMWare 或 VirtualBox,仅适用于 Windows 10。这是 Docker Desktop for Windows 所使用的虚拟机。

但是,这个虚拟机一旦启用,QEMU、VirtualBox 或 VMWare Workstation 15 及以下版本将无法使用!如果你必须在电脑上使用其他虚拟机(例如开发 Android 应用必须使用的模拟器),请不要使用 Hyper-V!

开启 Hyper-V

右键开始菜单并以管理员身份运行 PowerShell,执行以下命令:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

复制代码

安装 Docker Desktop for Windows

点击 Get started with Docker Desktop,并下载 Windows 的版本,如果你还没有登录,会要求注册登录:

Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第2张

运行安装文件

双击下载的 Docker for Windows Installer 安装文件,一路 Next,点击 Finish 完成安装。

Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第3张

安装完成后,Docker 会自动启动。通知栏上会出现个小鲸鱼的图标

Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第4张

,这表示 Docker 正在运行。

我们可以在命令行执行 docker version 来查看版本号。

阿里云(linux)


基于阿里云服务器的安装方式,推荐!

查看配置

内核版本查看

uname -r

系统版本:CentOS7

内核版本:3.10.0-514.26.2.el7.x86_64

安装

安装有两种方式:

1.官方脚本安装(本文讲解)

2.手动安装

安装:此为国内镜像。安装完提示如果想在非root用户使用,需将用命名加入组,并重启。

curl -fsSL https://get.docker.com/ | sh

⚠️如果报错缺少deltarpm,执行下面命令

yum provides ‘*/applydeltarpm’ #查看依赖包的位置

yum -y install deltarpm #安装命令

启动docker服务

service docker start

❤️本文以下全部讲解均基于Linux系统❤️

运行实例

====

本着一切语言都是从hello-world开始的原则,我们先运行官方的实例体验一下。

官方提供了hello-world实例。运行前需要在官网注册docker id并创建仓库。

官网地址:hub.docker.com

注册时注意id起的复杂一点,很容易重复。

启动docker服务

systemctl start docker

拉取镜像

docker pull hello-world

运行镜像

docker run hello-world

Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第5张

查看容器

-a 查看所有

docker ps -a

镜像加速

========

如果刚才拉取镜像时感觉速度过慢可以配置加速,速度正常可跳过此步。

鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决。

网易的镜像地址:hub-mirror.c.163.com。

在任务栏点击 Docker for mac 应用图标

Perferences... -> Daemon -> Registry mirrors

在列表中填写加速器地址即可。

修改完成之后,点击 Apply & Restart 按钮,Docker 就会重启并应用配置的镜像地址了。

通俗理解什么是docker?

==============

Docker的思想来自于集装箱,集装箱解决了什么问题?

在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。

docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮。docker就是集装箱。

  • 不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成一些冲突。比如IIS和Apache访问端口冲突。这个时候你就要隔离.net开发的网站和php开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高。docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小,小就意味着省钱了。

  • 你开发软件的时候用的是Ubuntu,但是运维管理的都是centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,centos不支持,在转移的过程当中运维就得想办法解决这样的问题。这时候要是有docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。

  • 在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。

    总之docker就是集装箱原理。

    docker与虚拟机的对比

    =============

    物理机:别墅

    虚拟机:楼房

    docker:酒店式公寓

    docker三大概念

    ==========

    库:一个总的仓库,包含所有的镜像,使用时可以从库拉取镜像到本地。

    镜像:从库中拉取下来的应用,比如mysql。

    容器:镜像运行之后就是容器,容器和镜像可以互相转换。

    docker工作流程

    ==========

    Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第6张

    docker命令

    ========

    docker指令基本用法:

    docker 命令关键字 -参数

    基本操作


    查看docker信息

    docker info

    docker版本

    docker version

    查找镜像

    docker search nginx

    #拉取镜像

    docker pull nginx

    入门案例


    快速搭建wordpress博客

    查找镜像

    docker search name

    wordpress

    mariadb

    Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第7张

    拉取镜像

    docker pull wordpress

    mariadb就是mysql

    docker pull mariadb

    运行镜像

    docker run --name db -p 3306:3306 --env MYSQL_ROOT_PASSWORD=root -d mariadb

    docker run --name mywordpress --link db:mysql -p 8080:80 -d wordpress

    运行成功,访问wordpress

    http://libiao:8080

    根据提示配置数据库信息,一个个人博客网站就搭建好了

    Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第8张

    查看端口映射


    docker ps

    docker port CONTAINER_ID

    举例:xxjob的8080端口映射到宿主机的8089端口

    Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第9张

    linux设置docker开机自启


    systemctl enable docker

    查看镜像


    docker images

    #因为docker是分层,所以显示的文件大小要大于实际占用磁盘的大小

    运行镜像


    docker run --name db -p 3306:3306 --env MYSQL_ROOT_PASSWORD=root -d mariadb

    –name 别名

    –env 环境变量

    #-d 后台执行

    docker run --name mywordpress --link db:mysql -p 8080:80 -d wordpress

    –link ip映射

    -p 端口映射

    docker logs -f 7a38a1ad55c6

    像tail -f一样查看容器内日志

    docker top name

    #查看容器内的进程

    删除镜像


    docker rmi hello-world:latest

    docker rmi id

    4位即可

    复合命令


    docker rm -f $(docker ps -a -q)

    #删除全部容器

    查看运行的容器


    docker ps

    docker compose


    一个方便维护多个容器的yaml文件,docker认为一个容器对应一个进程,但一个应用会有多个进程,例如上面的mysql和wordpress。

    个人觉得docker compose类似于shell脚本,但他实际都python实现,访问的是docker的一些api。

    Docker compose一般随docker一起安装,所以要求版本对应

    docker version

    docker-compose --version

    在yaml文件制定镜像的名字,版本,端口映射后用 up -d 启动

    docker-compose.yaml up -d

    查看日志

    docker-compose logs

    容器管理

    ====

    进入容器

    docker exec -it name /bin/sh

    查看容器详细信息

    容器的详细信息会以json的形式返回。

    docker inspect name

    [root@lib mysh]# docker inspect mywordpress

    [

    {

    “Id”: “6253e66959047c6f8de891abe1c661f7766fdef7407f00e07d1788310e0ea6a9”,

    “Created”: “2021-08-04T20:11:43.649001354Z”,

    “Path”: “docker-entrypoint.sh”,

    “Args”: [

    “apache2-foreground”

    ],

    “State”: {

    “Status”: “running”,

    “Running”: true,

    “Paused”: false,

    “Restarting”: false,

    “OOMKilled”: false,

    “Dead”: false,

    “Pid”: 28041,

    “ExitCode”: 0,

    “Error”: “”,

    “StartedAt”: “2021-08-04T20:11:43.947511209Z”,

    “FinishedAt”: “0001-01-01T00:00:00Z”

    }

    “Name”: “/mywordpress”,

    容器启停

    docker start name

    docker stop name

    docker restart name

    删除容器

    删除时容器需要处于停止状态

    docker rm name

    查看日志

    docker ps -a

    docker logs container_Id

    占用资源

    docker stats name

    Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第10张

    镜像特性

    ====

    镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,他包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件。将所有的应用和环境直接打包为docker镜像,就可以直接运行。

    镜像名和版本号共同组成唯一标识,默认是最新版——lastest

    分层原理


    Docker的镜像通过联合文件系统将将各层文件系统叠加在一起。

    引导方式

    • bootfs:传统操作系统,用于系统引导的文件系统,包括BootLoader和kernel,容器启动完成后会被卸载以节省内存资源。

      Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第11张

      • rootfs:位于bootfs之上,表现为docker容器的根文件系统

      • 传统模式中,系统启动时,内核首先挂载为”只读“模式,完成全部自检后挂载为”读写“模式。

      • docker中,rootfs由内核挂载为”只读“模式,而后通过UFS技术挂载一个”可写“层。

        ⚠️注意:已有的分层只能读不能写,上层镜像优先级大于底层镜像

        Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第12张

        当我们使用pull命令时,我们可以看到docker的镜像是一层一层的在下载。这样做最大的好处就是资源共享了。

        比如多个镜像都从Base镜像构建而来,那么宿主机只需要在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服务了,而且镜像的每一层都可以被共享。查看镜像分层的方式可以通过docker image inspect命令。

        所有的Docker镜像都起始于一个基础镜像,当进行修改或者增加新的内容时,就会在当前的镜像层之上,创建新的镜像层。在添加额外的镜像层的同时,镜像始终保持当前所有镜像的组合, Docker通过存储引擎的方式来实现镜像层堆栈,并保证多镜像层对外展示为统一的文件系统。

        UFS(联合文件系统)


        UFS时一种分层、轻量级并且高性能的文件系统。

        它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。

        UnionFS是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件,系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

        加载原理


        Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层时bootfs。

        当boot加载完成后整个内核就在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。rootfs在bootfs之上,rootfs包含的就是典型Linux系统中的/dev、/proc、/bin、/etc等目录和文件。rootfs就是各种不同的操作系统发行版。

        Docker File

        ===========

        仓库没有的镜像怎么办?

        可以自己创建镜像吗?

        容器->镜像


        docker commit CID -t xx.xx.xx

        ⚠️⚠️⚠️⚠️ 工作在前台的守护进程至少一个

        网易蜂巢:开源镜像仓库

        Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第13张

        编写docker file


        Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

        指令讲解

        FROM

        指定基础镜像,必须为第一个命令,有且只有一个

        FROM

        FROM :

        FROM @

        FROM mysql:5.6

        MAINTAINER

        创建者信息

        MAINTAINER

        MAINTAINER yitiao

        RUN

        用于在镜像容器中执行命令,其有以下两种命令执行方式:

        #shell执行

        RUN

        #exec执行

        RUN [“executable”, “param1”, “param2”]

        RUN apk update

        RUN [“/etc/execfile”, “arg1”, “arg1”]

        ADD

        将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

        自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

        深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

        因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第14张

        Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第15张

        Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第16张

        既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

        由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

        如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

        Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第17张

        最后

        现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。

        所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。

        Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第18张

        《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

        hell执行

        RUN

        #exec执行

        RUN [“executable”, “param1”, “param2”]

        RUN apk update

        RUN [“/etc/execfile”, “arg1”, “arg1”]

        ADD

        将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

        自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

        深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

        因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-YR6myA7h-1713321182040)]

        [外链图片转存中…(img-phs3L8d2-1713321182040)]

        [外链图片转存中…(img-AIqhTZnI-1713321182041)]

        既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

        由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

        如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

        Docker从入门到干事,看这一篇就够了,Docker新手入门到进阶实践指南 第17张

        最后

        现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。

        所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。

        [外链图片转存中…(img-hhTMvIvQ-1713321182041)]

        《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码