Docker简介

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker的应用场景

  1. 虚拟机的粒度是“虚拟出的机器”,而 Docker 的粒度则是“被限制的应用”,相比较而言 Docker 的内存占用更少,更加轻量级。
  2. Docker 可以很好地和微服务结合起来。从概念上来说,一个微服务便是一个提供一整套应用程序的部分功能,Docker便可以在开发、测试和部署过程中一直充当微服务的容器。
  3. 甚至生产环境也可以在 Docker 中部署微服务。 Web 应用的自动化打包和发布。
  4. 自动化测试和持续集成、发布。 在服务型环境中部署和调整数据库或其他的后台应用。
  5. 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的环境。

Docker的架构

Docker 镜像(Images) 是用于创Docker 镜像建 Docker 容器的模板。
Docker 容器(Container) 容器是独立运行的一个或一组应用。
Docker 客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker API (https://docs.docker.com/reference/api/docker_remote_api) 与 Docker 的守护进程通信。

Docker 主机(Host) 一个者物理或虚拟的机器用于执行 Docker 守护进程和容器。
Docker 仓库(Registry) Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。

Centos7安装Docker

1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
$ uname -r

2、使用 root 权限登录 Centos。确保 yum 包更新到最新。
$ yum update

3、卸载旧版本(如果安装过旧版本的话)
$ yum remove docker docker-common docker-selinux docker-engine

4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
$ yum install -y yum-utils device-mapper-persistent-data lvm2

5、设置yum源
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

6,安装最新版本的Docker
$ yum install docker-ce docker-ce-cli containerd.io

7,启动Docker并设置开机启动
$ systemctl start docker
$ systemctl enable docker

8,验证是否安装成功docker version
Docker入门_docker入门
出现了上图版本号就是成功了

配置阿里云

默认的远程仓库 https://hub.docker.com/下载网速很慢,所以我们配置下阿里云的镜像仓库
1、我们先登录阿里云的服务地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
2、找到我们需要配置的地址
Docker入门_微服务_02
3、然后我们执行命令:cd /etc/docker/ 进入文件夹,然后输入:ll 找到daemon.json文件,没有的话就新建:vi daemon.json,就会进入下图,我们只需要把上图红框里面的地址copy到里面,然后按Esc,然后输入命令 :wq(:是命令的一部分),就更改完成了
Docker入门_微服务_03
4、重启daemon
systemctl daemon-reload

5、重启docker服务
systemctl restart docker

我们就能下载东西了,并且速度会快很多

然后运行 docker run hello-world,首先本地仓库未能找到该镜像,然后去远程仓库寻找以及下载该镜像,所以我们再执行这个命令时就能看到hello world了
Docker入门_docker_04

Docker基本命令

下载镜像官网:https://hub.docker.com/
我们搜索我们需要下载的镜像,比如我们的centos,然后回车
Docker入门_docker_05
Docker入门_docker_06
下载命令:docker pull 镜像名称:[TAG]
不加版本就是默认最新版本

下载好了我们能执行命令:docker images查看我们所有镜像
Docker入门_docker入门_07
REPOSITORY 镜像的仓库源
TAG 镜像的标签(版本)同一个仓库有多个TAG的镜像,多个版本;我们用REPOSITORY:TAG来定义不同的镜像;
IMAGE ID 镜像ID,镜像的唯一标识
CREATE 镜像创建时间
SIZE 镜像大小

docker images OPTIONS

OPTIONS 可选参数:
-a 显示所有镜像(包括中间层)
-q 只显示镜像ID
-qa 可以组合
–digests 显示镜像的摘要信息
–no-trunc 显示完整的镜像信息

启动Docker
systemctl start docker

停止Docker
systemctl stop docker

重启Docker
systemctl restart docker

开机启动Docker
systemctl enable docker

查看Docker概要信息
docker info

查看Docker帮助文档
docker --help

查看Docker版本信息
docker version

删除镜像
1、docker rmi 镜像名
有镜像生成的容器再运行时候,会报错,删除失败,我们需要加 -f 强制删除
docker rmi -f 镜像名

2,删除多个:docker rmi -f 镜像名称1:[TAG] 镜像名称2:[TAG]
中间空格隔开

3,删除全部:docker rmi -f $(docker images -qa)

Docker创建并启动容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

–name=“容器新名字”:为容器指定一个名称;
-i:以交互模式运行容器,通常与-t或者-d同时使用;
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;
-d: 后台运行容器,并返回容器ID;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

启动容器的3种方式
1、启动普通容器: docker run --name 别名 镜像ID
2、启动交互式容器: docker run -it --name 别名 镜像ID 来运行一个容器,取别名,交互模式运行,以及分配一个伪终端,并且进入伪终端
3、docker run -di --name 别名 镜像ID

it的启动方式就是会直接进入你开启的容器的路径,而di不会

查询Docker容器

docker ps [OPTIONS]

OPTIONS说明:
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
–format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
–no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。

docker ps 查看正在运行的容器
docker ps -a 查看所有容器
docker ps -n 2 显示最近创建的2个容器
docker ps -f status=exited 查看停止的容器

Docker退出容器

exit 容器停止退出
ctrl+P+Q 容器不停止退出

Docker进入容器

docker attach 容器ID or 容器名

Docker启动容器

docker start 容器ID or 容器名

Docker重启容器

docker restart 容器ID or 容器名

Docker停止容器
docker stop 容器ID or 容器名

Docker删除容器

docker rm 容器ID
一样的,如果再启动中删除会报错,需要加-f
删除所有容器
docker rm -f $(docker ps -qa)

Docker容器日志

docker logs [OPTIONS] CONTAINER
Options:
–details 显示更多的信息
-f, --follow 跟踪实时日志
–since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
–tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
–until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

最直接的方法
我们可以直接找到他的日志文件:/var/lib/docker/containers/
然后把这些文件copy下来,再自己看
Docker入门_重启_08
end…