一个混迹于Github、Stack Overflow、开源中国、CSDN、博客园、稀土掘金、51CTO等 的野生程序员。
目标:分享更多的知识,充实自己,帮助他人
GitHub公共仓库:https://github.com/zhengyuzh
以github为主:
1、分享前端+后端基础知识
2、前后端框架知识+框架使用分析
3、热门前端+后端面试题(实时更新)
4、开源项目(主要包含大学课程设计)
为了方便查看请使用侧边栏的形式阅读,文章目录在侧边栏
1、Docker是什么?
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
docker能干嘛
一次构建、随处运行
- 更快速的应用交付和部署;
- 更便捷的升级和扩缩容;
- 更简单的系统运维;更高效的计算资源利用
2、Docker架构
Docker 包括三个基本概念:
- 镜像(image):Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
- 容器(container): Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。 它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。 可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
- 仓库(repository):仓库(Repository)是集中存放镜像文件的场所。仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云 等
概念 | 说明 |
---|---|
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
Docker 容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
Docker Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 |
Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信 |
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
提示:
需要正确的理解仓储/镜像/容器这几个概念: Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎 image镜像文件。只有通过这个镜像文件才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。 * image 文件生成的容器实例,本身也是一个文件,称为镜像文件。 * 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器 * 至于仓储,就是放了一堆镜像的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了。
3、Docker安装
3.1 安装
Docker 支持以下的 64 位 CentOS 版本:
CentOS 7
CentOS 8
更高版本…
以安装centos7为例
使用官方安装脚本自动安装,安装命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
查看安装的docker
docker version
3.2 启动
systemctl start docker
4、配置阿里云镜像
4.1 阿里云账号
登录自己的阿里云账号
4.2 配置镜像
可以通过修改daemon配置文件/etc/docker/daemon.json
来使用加速器。如果没有该文件,创建。使用 touch daemon.json
创建。
使配置的文件生效
//重新加载
sudo systemctl daemon-reload
sudo systemctl restart docker
5、Docker常用命令
5.1 镜像命令
5.1.1列出本地主机上的镜像
docker images
参数说明
- REPOSITORY:表示镜像的仓库源;
- TAG:镜像的标签;
- IMAGE ID:镜像ID;
- CREATED:镜像创建时间;
- SIZE:镜像大小;
提示: 同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像
5.1.2查询某个镜像
docker search 某个XXX镜像名字
例如: 查询redis
5.1.3下载某个镜像
docker pull 某个XXX镜像名字
例如下载redis、默认下载最新版本
//默认下载最新的redis
docker pull redis
//下载指定的redis版本
docker pull redis:4.0.1
5.1.4删除某个下载的镜像
docker rmi 某个XXX镜像名字ID
例如删除 redis镜像
docker rmi redis
5.2 容器命令
5.2.1 新建并且启动容器
新建并且启动一个容器、前提是由对应的镜像。一个镜像可以创建多个容器。
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明(常用):有些是一个减号,有些是两个减号 --name=“容器新名字”: 为容器指定一个名称;-d: 后台运行容器,并返回容器ID,也即启动守护式容器;-i:以交互模式运行容器,通常与 -t 同时使用;-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;-P: 随机端口映射;-p: 指定端口映射,有以下四种格式 ip:hostPort:containerPort ip::containerPort hostPort:containerPort containerPort
例如以centos镜像创建一个centostest005的容器,在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
docker run -itd --name centostest005 centos /bin/bash
列出当前所有正在运行的容器
docker ps
在以centos镜像创建一个centostest006 容器,同时查看运行的容器
5.2.2 停止容器
docker stop 容器ID或者容器名
这里的容器ID可以通过docker ps 查看
5.2.3 删除停止容器
docker rm 容器ID
5.2.4 启动容器
前提是已经根据镜像创建过容器,只不过创建的容器暂时未启动
docker start 容器ID或者容器名
5.3.5 进入已运行的容器
方式一:
exec 是在容器中打开新的终端,并且可以启动新的进程,因为是新终端,用exit退出,不会导致容器的停止。
docker exec -it 容器ID /bin/bash
方式二
docker attach 容器ID
attach 直接进入容器启动命令的终端,不会启动新的进程。如果进入前台交互式启动容器,,用exit退出,会导致容器的停止。用ctrl+p+q,不会导致容器停止。如果进入后台守护式启动容器,不仅无法进行交互,并且ctrl+c会导致守护式进程停止。
提示:工作中我们一般使用 docker run -d image:tag /bin/bash启动容器,再通过docker exec -it 容器ID /bin/bash,最为安全可靠。
5.2.6 退出容器的方法
exit:run进去容器,exit退出,容器停止
ctrl+p+q:run进去容器,ctrl+p+q退出,容器不停止
测试 ctrl+p+q
测试exit