手摸手教你Docker的入门

2023-11-10 07:30
文章标签 入门 docker 摸手

本文主要是介绍手摸手教你Docker的入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 1.Docker的介绍
      • 1.1什么是docker
      • 1.2docker的应用场景
      • 1.3docker的优点
      • 1.4docker的核心概念
    • 2.Docker的下载
      • 2.1手摸手教你安装centos7
      • 2.2在linux虚拟机上安装docker
    • 3.Docker常用命令&操作
      • 3.1镜像操作
      • 3.2容器操作
    • 4.Docker镜像原理
      • 4.1UnionFS
      • 4.2Docker镜像加载原理
      • 4.3为什么使用分层
      • 4.4docker-commit操作
    • 5.Docker容器数据卷
      • 5.1容器数据卷是什么和能干嘛?
      • 5.2数据卷操作
        • 5.2.1添加数据卷
        • 5.2.2检查是否挂载成功
        • 5.2.3同步数据和权限命令
        • 5.2.4采用DockerFile来添加
      • 5.3数据卷容器
    • 6.DockerFile解析
      • 6.1什么是DockerFile
      • 6.2怎么去构建
      • 6.3DockerFile内容基础知识
      • 6.4Docker执行Dockerfile的大致流程
      • 6.5总结
      • 6.5DockerFile体系结构
    • 7.本地镜像推送到阿里云
      • 7.1流程图
      • 7.2镜像生成方法
      • 7.3本地镜像推送到阿里云

1.Docker的介绍

1.1什么是docker

  Docker是一个开源的应用容器引擎;是一个轻量级容器技术;Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;运行中的这个镜像称为容器,容器启动是非常快速的。
在这里插入图片描述

1.2docker的应用场景

  • Web 应用的自动化打包和发布。

  • 自动化测试和持续集成、发布。

  • 在服务型环境中部署和调整数据库或其他的后台应用。

  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

1.3docker的优点

  1. 快速,一致地交付您的应用程序
    Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。

  2. 响应式部署和扩展
    Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。

  3. 在同一硬件上运行更多工作负载
    Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

1.4docker的核心概念

  docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
  docker客户端(Client):连接docker主机进行操作;
  docker仓库(Registry):用来保存各种打包好的软件镜像;
  docker镜像(Images):软件打包好的镜像;放在docker仓库中;
  docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用

2.Docker的下载

  Docker官网:http://www.docker.com
  Docker中文网站:https://www.docker-cn.com/
  Docker Hub官网:https://hub.docker.com/
  本博文中教程使用的相关配套软件(强烈建议):
https://pan.baidu.com/s/14eWN8IbXcHNGbMBWhPst3A 提取码:in84
  这里使用linux安装,使用一个轻量级的虚拟机,VirtualBox,使用centos7安装

2.1手摸手教你安装centos7

  1.首先安装好VirtualBox软件,然后点击管理,导入centos7的系统包
在这里插入图片描述
  2.然后注意一定要勾选图片中的红框
在这里插入图片描述
  3.然后双击启动linux虚拟机,我启动的时候会出现网络失败导致开机失败,解决方法是在这里插入图片描述
  设置好网络以后使用命令重启虚拟机的网络:

service network restart

  我的使用过程中出现重启失败,问题解决如下(默认你会linux,不会就算了):cd /etc/sysconfig 进入这个文件夹下,然后vi docker 打开这个文件,修改 OPTIONS=’–selinux-enabled=false 这个参数即可。然后:wq保存退出。
在这里插入图片描述

  4.开机后使用 root/ 123456登陆。但是有个问题,存在输入密码正确,但是一直连接失败的,所以我这里使用SmarTTY进行连接。首先查看linux的ip地址:

ip addr

在这里插入图片描述

  5.然后使用客户端连接linux,输入查到的ip地址,账号和密码并保存,然后就安装成功了。
在这里插入图片描述

2.2在linux虚拟机上安装docker

1、检查内核版本,必须是3.10及以上
uname ‐r
2、安装docker
yum install docker
3、输入y确认安装
4、启动docker
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker ‐v
Docker version 1.12.6, build 3e8e77d/1.12.6
5、开机启动docker
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi‐user.target.wants/docker.service to
/usr/lib/systemd/system/docker.service.
6、停止docker
systemctl stop docker

3.Docker常用命令&操作

3.1镜像操作

操作命令说明
检索docker search 关键字 eg:docker search redis我们经常去docker hub上检索镜像的详细信息,如镜像的TAG。
拉取docker pull 镜像名:tag:tag是可选的,tag表示标签,多为软件的版本,默认是latest
列表docker images查看所有本地镜像
删除docker rmi image-id删除指定的本地镜像

在这里插入图片描述

3.2容器操作

  首先拉取你要的软件镜像,这一步就好比你下载安装包(网抑云安装程序);然后运行镜像就会产生一个容器,(正在运行的软件,运行的网抑云);
  下面前五步,在虚拟机上面部署了一个tomcat,然后我们访问http://虚拟机ip:8080/是访问不到的,这个因为需要做个映射并且需要关闭防火墙,通过‐p: 将主机的端口映射到容器的一个端口,格式:主机端口:容器内部的端口。在网页输入虚拟机ip:8888就可以访问了。

1、搜索镜像
[root@localhost ~]# docker search tomcat
2、拉取镜像
[root@localhost ~]# docker pull tomcat
3、根据镜像启动容器
docker run ‐‐name mytomcat ‐d tomcat:latest
4、docker ps 
查看运行中的容器
5、 停止运行中的容器
docker stop  容器的id
6、查看所有的容器
docker ps ‐a
7、启动容器
docker start 容器id
8、删除一个容器docker rm 容器id
9、启动一个做了端口映射的tomcat
[root@localhost ~]# docker run ‐d ‐p 8888:8080 tomcat
‐d:后台运行
‐p: 将主机的端口映射到容器的一个端口    主机端口:容器内部的端口
10、为了演示简单关闭了linux的防火墙
service firewalld status ;查看防火墙状态
service firewalld stop:关闭防火墙
11、查看容器的日志
docker logs container‐name/container‐id
更多命令参看
https://docs.docker.com/engine/reference/commandline/docker/
可以参考每一个镜像的文档

4.Docker镜像原理

4.1UnionFS

  UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。
  Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。 特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

4.2Docker镜像加载原理

  Docker镜像加载原理:docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统为UnionFS。
  bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
  rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
在这里插入图片描述

4.3为什么使用分层

  最大的一个好处就是 - 共享资源,比如:有多个镜像都从相同的 base 镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

4.4docker-commit操作

  提交容器来生成一个新的镜像,这个功能可以把我们自定义的容器给生成一个新的镜像。

docker commit -m="提交注释" -a="作者名" 容器ID 要创建的目标镜像名:[版本号]
docker commit -m="第一个镜像" -a="smm" 5a4b2180de88 smm/mytomcat:1.0

5.Docker容器数据卷

5.1容器数据卷是什么和能干嘛?

  就是容器运行过程中有些数据需要保存,能让它持久化保存下来,数据卷类似于Redis里面的rdb和aof文件,用于容器的持久化,实现容器间继承+共享数据。

5.2数据卷操作

5.2.1添加数据卷

  添加数据卷有两种方式,分别是直接命令和DockerFile,下面命令的意思是在根目录下新建一个myDataVolume文件夹,并且指定容器tomcat,在容器里面新建一个文件夹dataVolumeContainer,实现两个文件夹的数据共享和容器的持久化。

docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it -v /myDataVolume:/dataVolumeContainer tomcat

  Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied,解决办法:在挂载目录后多加一个–privileged=true参数即可

docker run -it -v /myDataVolume:/dataVolumeContainer --privileged=true tomcat
5.2.2检查是否挂载成功

  使用命令检查,出现图中的数据表示成功。

docker inspect 容器ID

在这里插入图片描述

5.2.3同步数据和权限命令

  容器停止退出后,主机修改了数据卷,再次启动容器,数据会自动同步。
  如果要容器对数据卷只能读不能写,则命令带上ro(read only)权限。

docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
5.2.4采用DockerFile来添加

  根目录下新建一个myDocker文件夹并进入,输入命令vim dockerfile进行编辑,输入如下,然后就会生成一个新容器。

# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash

5.3数据卷容器

  命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。通俗的说A容器和主机两者挂载了,然后B,C,D容器挂载到A中,来实现数据共享。
  首先启动一个父容器:

docker run -it --name dc01 smm/centos

  然后dc02和03继承父容器

docker run -it --name dc02 --volumes-from dc01 smm/centos
docker run -it --name dc03 --volumes-from dc01 smm/centos

:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。

6.DockerFile解析

6.1什么是DockerFile

  Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
在这里插入图片描述

6.2怎么去构建

  编写Dockerfile文件 --> docker build --> docker run

6.3DockerFile内容基础知识

  1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数;
  2、指令按照从上到下,顺序执行;
  3、#表示注释;
  4、每条指令都会创建一个新的镜像层,并对镜像进行提交;

6.4Docker执行Dockerfile的大致流程

  1、docker从基础镜像运行一个容器;
  2、执行一条指令并对容器作出修改
  3、执行类似docker commit的操作提交一个新的镜像层;
  4、docker再基于刚提交的镜像运行一个新容器;
  5、执行dockerfile中的下一条指令直到所有指令都执行完成。

6.5总结

   从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段:
  Dockerfile是软件的原材料;
  Docker镜像是软件的交付品;
  Docker容器则可以认为是软件的运行态。
  Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
  1 Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;
  2 Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时,会真正开始提供服务;
  3 Docker容器,容器是直接提供服务的。

6.5DockerFile体系结构

  FROM:基础镜像,当前新镜像是基于哪个镜像的;
  MAINTAINER:镜像维护者的姓名和邮箱地址;
  RUN:容器构建时需要运行的命令;
  EXPOSE:当前容器对外暴露出的端口;
  WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点;
  ENV:用来在构建镜像过程中设置环境变量;
  ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包;
  COPY:类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中 <源路径> 的文件目录复制到新的一层的镜像内的 <目标路径> 位置;COPY src dest或COPY [“src”,“dest”];
  VOLUME:容器数据卷,用于数据保存和持久化工作;
  CMD:指定一个容器启动时要运行的命令(Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换);
  ENTRYPOINT:指定一个容器启动时要运行的命令(ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数,不同在于ENTRYPOINT不会覆盖前面的命令);
  ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发;

7.本地镜像推送到阿里云

7.1流程图

在这里插入图片描述

7.2镜像生成方法

  1.编写DockerFile,然后build。2.从容器生成一个新的自定义的镜像,从而获得本地镜像素材原型。

docker commit -m="提交注释" -a="作者名" 容器ID 要创建的目标镜像名:[版本号]

7.3本地镜像推送到阿里云

  打开阿里云开发者平台:https://dev.aliyun.com/search.html

  1.创建镜像仓库,填写命名空间和仓库名称。2.然后刚建好的仓库里面找到图中的指令,进行一行一行推送。[ImagedId]就是你本地要推送镜像的id,[镜像版本号]你可以瞎写多少版本,然后云那里就会显示这个的版本号。
在这里插入图片描述

  如果是推送到阿里云里面,设置为对外开放的话,可以搜索到,并且可以下载到本机。指令在你搜索到那里给你复制,具体不演示。

这篇关于手摸手教你Docker的入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/381233

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

关于Docker Desktop的WSL报错问题解决办法

《关于DockerDesktop的WSL报错问题解决办法》:本文主要介绍关于DockerDesktop的WSL报错问题解决办法的相关资料,排查发现是因清理%temp%文件夹误删关键WSL文件,... 目录发现问题排查过程:解决方法其实很简单:重装之后再看就能够查到了:最后分享几个排查这类问题的小www.cp

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

解读docker运行时-itd参数是什么意思

《解读docker运行时-itd参数是什么意思》在Docker中,-itd参数组合用于在后台运行一个交互式容器,同时保持标准输入和分配伪终端,这种方式适合需要在后台运行容器并保持交互能力的场景... 目录docker运行时-itd参数是什么意思1. -i(或 --interactive)2. -t(或 --

Docker部署Jenkins持续集成(CI)工具的实现

《Docker部署Jenkins持续集成(CI)工具的实现》Jenkins是一个流行的开源自动化工具,广泛应用于持续集成(CI)和持续交付(CD)的环境中,本文介绍了使用Docker部署Jenkins... 目录前言一、准备工作二、设置变量和目录结构三、配置 docker 权限和网络四、启动 Jenkins

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

docker如何删除悬空镜像

《docker如何删除悬空镜像》文章介绍了如何使用Docker命令删除悬空镜像,以提高服务器空间利用率,通过使用dockerimage命令结合filter和awk工具,可以过滤出没有Tag的镜像,并将... 目录docChina编程ker删除悬空镜像前言悬空镜像docker官方提供的方式自定义方式总结docker