Docker基础

1. Docker是什么?

  • Docker是一个开源的应用容器引擎,基于Go语言并遵从 Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到个轻量级、可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iphone的app),更重要的是容器性能开销极低。
    • 每个容器都有一个软件镜像,相当于集装箱中的货物。容器可以被创建、启动、关闭和销毁。和集装箱一样, Docker在执行这些操作时,并不关心容器里到底装的什么,它不管里面是Web Server,还是 Database。
    • 用户不需要关心容器最终会在哪里运行,因为哪里都可以运行。
    • 开发人员可以在笔记本上构建镜像并上传到 Registry,然后QA人员将镜像下载到物理或虚拟机做测试,最终容器会部署到生产环境。
    • 使用 Docker以及容器技术,我们可以快速构建一个应用服务器、一个消息中间件、一个数据库、一个持续集成环境。因为 Docker Hub上有我们能想到的几乎所有的镜像。
  • Docker官网:https://docs.docker.com/
  • Docker镜像仓库:https://hub.docker.com/

2. Docker的优点

Docker为代码提供了一个基于容器的标准化运输系统。Docker可以将任何应用极其依赖打包成一个轻量级、可移植、自包含的容器。容器可以运行在几乎所有的操作系统上。

  • 简化程序:

    Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上,使可以实现虚拟化。 Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入 Docker中进行管理。方便快捷已经是 Docker的最大优势。

  • 部署安全

    可以通过容器技术将开发环境和测试环境以及生产环境保持版本和依赖上的统一,保证代码在一个高度统一的环境上执行。而测试环境的统一,也同样能解决CI流程对环境的要求。

  • 隔离性好

    每一个容器就是一个隔离的环境,你对容器内部提供服务的要求,容器可以自依赖的全部提供。这种高内聚的表现可以实现快速的分离有问题的服务,在一些复杂系统中能实现快速排错和及时处理

3. 安装docker(CentOS7):

https://mirrors.163.com/.help/centos.html 拷贝CentOS7的*链接*
wget *链接*
yum -y install docker

注意:CentOS8默认安装的是podman(一个无守护进程的容器引擎),与docker用法没有区别

Podman 直接与镜像注册表、容器和镜像存储进行交互
Podman 和 Docker 的镜像具有兼容性。
Podman 中没有使用守护进程,而是直接使用 runC 容器运行时。
Podman 不需要启动或管理像 Docker daemon 那样的守护进程。
3.1 hello-world——最小的镜像

hello-world是Docker官方提供的一个镜像,用来验证Docker是否安装成功
在这里插入图片描述
hello-world的Dockerfile内容如下所示:

FROM scratch
COPY hello /
CMD ['/hello']

只有短短三条指令。

(1) FROM scratch镜像是从白手起家,从0开始构建。

(2) COPY hello /将文件“hello”复制到镜像的根目录。

(3)CMD [’/hello’]容器启动时,执行hello.

hello-world虽然是一个完整的镜像,但它并没有什么实际用途。通常来说,我们希望镜像能提供一个基本的操作系统环境,用户可以根据需要安装和配置软件。

3.2 输出Hello world

Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。

runoob@runoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world

命令的各个参数解析:

  • docker: Docker 的二进制执行文件。
  • run: 与前面的 docker 组合来运行一个容器。
  • ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
  • /bin/echo “Hello world”: 在启动的容器里执行的命令

以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。

3.3 docker镜像加速:
vim /etc/docker/daemon.json

{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
]
}
  • 安装docker后,注意先不要启动服务,先给虚拟机新增一块磁盘,重启,然后格式化挂到/var/lib/docker目录下,让新增的磁盘成为docker的存储盘,docker启动后会在这个目录下生成一些目录,docker默认的目录为/var/lib/docker
    在这里插入图片描述
vim /usr/share/container-storage-setup/container-storage-setup

改两个地方DEVS=新增的磁盘,VG=卷名
在这里插入图片描述
在这里插入图片描述

4. Docker的架构

  • Docker 包括三个基本概念:

    • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
    • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
    • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

    Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
    Docker 容器通过 Docker 镜像来创建。
    在这里插入图片描述

  • 概念

    概念说明
    Docker 镜像(Images)Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
    Docker 容器(Container)容器是独立运行的一个或一组应用,是镜像运行时的实体。
    Docker 客户端(Client)Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
    Docker 主机(Host)一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
    Docker RegistryDocker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
    Docker MachineDocker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。
  • Docker 的两个主要组成模块是: Docker DaemonDocker CLI

    • Docker Daemon: 一个常驻的后台进程,帮助管理和创建 Docker 镜像、容器、网络和存储卷。
    • Docker Engine REST API: 一个应用程序用来与 Docker 守护进程进行交互的 API; 可以通过 HTTP 客户端访问它。
    • Docker CLI: 一个用来与 Docker 守护进程进行交互的 Docker 命令行客户端,也就是 Docker 命令。

5. Docker常用命令

获取镜像:docker pull debian:8.10

启动容器:docker run -it ubuntu /bin/bash

​	-i:交互式操作 -t:终端 /bin/bash:交互式shell

	关于shell:Linux中的shell,是指一个面向用户的命令接口,表现形式就是一个可以由用户录入的界面,这个界面也可以反馈运行信息;shell如何执行用户的指令:shell脚本或命令行。

查看运行中的容器:docker ps

	后加 -a 表示查看所有容器

启动一个已停止的容器:docker start 容器ID

指定后台运行容器:docker run -itd --name ubuntu-test ubuntu bin/bash

进入后台运行的容器:docker exec -it 容器ID /bin/bash

	从这个容器退出,容器不会停止

停止/重启容器:docker stop/restart 容器ID

导出容器:docker export  导出的本地目录

导入容器:docker import 导入的本地目录 

 	 也可以通过指定URL或某个目录来导入

删除容器:docker rm -f 容器ID

清除所有停止的容器:docker container prune
删除所有未启动的容器:docker rm $(sudo docker ps -a -q)
杀死所有正在运行的容器:docker kill $(docker ps -a -q)
删除所有镜像:docker rmi $(docker images -q)
强制删除 无法删除的镜像
		docker rmi -f <IMAGE_ID>
		docker rmi -f $(docker images -q)
查看到容器的端口映射:docker ps/docker port 容器名或ID  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值