linux:docker入门

了解

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

Docker的应用场景

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

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

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

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

说明:

PaaS:

把服务器平台作为一种服务提供的商业模式,通过网络进行程序提供的服务

基本概念

镜像(Image):Docker 镜像(Image),就相当于是一个 完整的镜像(包含程序、环境、编译器等)

容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,某一个镜像的实例就是容器,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。仓库和仓库注册服务器是不同的:仓库注册服务器上存放着多个仓库,每个仓库中包含多个镜像。仓库又可以分为公开仓库和私有仓库,例如:Docker Hub、阿里云、网易云等

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类

Person p1=new Person();
Person p2=new Person();
Person p3=new Person();
-----------------------------
p1,p2,p3 就是三个容器(实例)
Person  就是镜像(类)
-----------------------------

用Dcoker的LOGO来形象介绍容器、宿主机、镜像的关系:

大海  --- 就是宿主机(环境、系统)

鲸鱼  ---就是docker(软件)

小箱子   ---就是容器实例,这些实例来自镜像的实例化

安装

注释:Docker只支持Centos6.8以上的系统版本

Docker 分为社区版(CE)企业版(EE)

社区版免费、企业版收费

Centos6.8以上

Centos7安装

yum install docker-ce

Centos8安装

参考:链接

1. 安装检查

  Docker要求安装环境为 64位系统,且内核在3.8以上。可用uname -r 查看。

2. 安装依赖 

yum install -y yum-utils  device-mapper-persistent-data  lvm2

3. 设置yum源,我使用的是阿里云镜像(官方地址直接连接失败了,估计是服务器网络问题)

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  

4. 安装

yum install docker-ce

5. 故障处理 

  第4步安装时,报错: Problem: package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3,

根据提示,需要使用版本大于1.2.2-3的 containerd.io,直接使用wget从官方下载不了,直接在  下载 ,containerd.io-1.2.6-3.3.el7.x86_64.rpm,然后上传至服务器。

安装containerd.io:dnf install containerd.io-1.2.6-3.3.el7.x86_64.rpm

6. 继续安装

yum install docker-ce

一路输入y,安装完成。

7. 安装完成

docker -v

查看安装版本(Docker version 19.03.8, build afacb8b)

8、启动docker

docker启动       

systemctl start docker
service docker start

重启docker服务

systemctl restart  docker
sudo service docker restart

关闭docke

systemctl stop docker
service docker stop

查看是否启动成功

docker ps -a

运行Hello World

1、Hello World 程序在远程仓库(Docker Hub)上

2、Docker host(主机)上从远程仓库拉取,获得镜像

3、然后创建容器,开始运行

阿里云镜像加速

Docker Hub 服务器在国外,从上面拉取超级慢,换到国内的镜像厂商比较快,这里以阿里云为例:

1、在  容器镜像服务控制台 中获取加速地址

2、将加速器地址配置到 Docker 主机上

vim /etc/docker/daemon.json  //若没有改文件,则手动创建

{
  "registry-mirrors": ["https://geqvsh14.mirror.aliyuncs.com"]
}

systemctl daemon-reload  //加载文件
systemctl restart docker  //重启服务 

运行

docker run hello-world

注释:本地没有hello-world镜像,所以会从仓库下载(拉取)镜像,并在容器中运行

底层原理

Docker是怎么工作的?

Docker是一个CS结构的系统,Go语言编写,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器

容器就是运行的环境,就是一个一个箱子

为什么Docker比VM运行快?

1、Docker比虚拟机有更少的抽象层,Docker不需要硬件资源,直接使用实际主机上的硬件资源,不需要 Hypevisor 实现硬件资源虚拟化

2、Docker使用的是宿主机的内核,当新建一个容器时,不需要和虚拟机一样重新加载一个操作系统内核。因此新建一个容器,只需几秒

常用命令

docker version

显示版本信息

docker info

显示版本号、存储驱动、可用内存、宿主机的名字等

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
  scan: Docker Scan (Docker Inc.)

Server:
 Containers: 2
  Running: 1
  Paused: 0
  Stopped: 1
 Images: 3
 Server Version: 20.10.6
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries spl
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 269548fa27e0089a8b8278fc4fc781d7f65a939b
 runc version: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-957.21.3.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 1.795GiB
 Name: iZuf6ece4mm10ixp4atj39Z
 ID: D42R:EIYV:I4YK:JO4I:TPBL:AT5R:2KM5:42GK:4R2E:CCE5:WNID:PIQE
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://geqvsh14.mirror.aliyuncs.com/
 Live Restore Enabled: false

docker --help

帮助文档

--镜像命令--

docker images

列出本地主机的镜像

各个字段说明:

   

PS:TAG:表示标签,可以有多个,表示这个仓库源的不同版本

选项说明:

docker images -a

列出本地主机上所有的镜像

docker images -qa

只显示镜像ID

docker images --digests

显示镜像的摘要信息

docker images --digests --no-trunc

显示完整的镜像信息  

docker search tomcat

在docker Hub上查询镜像

选项说明:

docker search tomcat --no-trunc

显示完整的镜像描述

docker search tomcat --limit 5

限制显示个数

docker pull tomcat

从远程Hub中拉取镜像源,默认最新版本

docker rmi  -f hello-world

强制(-f)删除镜像

选项介绍:

docker rmi  -f 镜像ID

删除单个镜像

docker rmi  -f 镜像名1 镜像名2

删除多个镜像

docker rmi  -f $(docker images -qa)

删除全部镜像

--容器命令--

1、首先在docker中拉取一个Centos镜像,下面的实验在该容器中进行:

docker pull centos

2、启动该系统(容器)

docker run -it 300e315adb2f

选项:

docker ps

显示所有正在使用的容器

选项介绍:

退出容器

1、exit :容器停止并退出

2、Ctrl+P+Q :容器随处不停止

启动容器

docker start 容器ID/容器名

重启容器

docker restart 容器ID/容器名 

停止容器

docker stop 容器ID/容器名

强制停止容器

docker kill 容器ID/容器名

删除已停止的容器

docker rm -f $(docker ps -aq)

docker ps -qa | xargs dockers rm

  

参考

1、官方文档

2、Centos 官方文档

3、Docker从入门到精通

作者: Pam

出处: https://www.cnblogs.com/pam-sh/>

关于作者:网安在读

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(mir_soh@163.com)咨询.

原文地址:https://www.cnblogs.com/pam-sh/p/13192295.html