Docker入门

Docker概述

Docker为什么会出现?

将项目打包并带上部署环境(镜像),上传到Docker 仓库,下载镜像,运行即可。开发打包部署上线一套流程做完。

Docker思想来自集装箱
JRE--多个应用(端口冲突)--原来都是交叉的
隔离:Docker核心思想!打包装箱!每个箱子都是相互隔离的。
Docker通过隔离,将服务器利用到极致。

Docker 历史

2010年,几个搞IT的年轻人,在美国成立了一家公司dotCloud
做一些pass云计算服务,Linux相关的容器技术,并且将自己的技术(容器化技术)命名就是Docker!
Docker刚刚诞生的时候,没有引起行业的注意,dotCloud就活不下去!
2013年,Docker开源
越来越多的人发现Docker的优点,火了,Docker每个月更新一个版本!
2014年9月,Docker1.0发布!
Docker为什么这么火?十分的轻巧!
在容器技术出现之前,我们都是使用虚拟机技术!
虚拟机,在windows中装一个VMware,通过这个软件我们可以虚拟出来一台或多台电脑!十分笨重!
虚拟机属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!
vm中加载linux centos原生镜像(一个电脑)运行多个应用,需要开启多个电脑,一个电脑几个G
docker 镜像中包含的最核心的环境小于4m,加上jdk mysql十分小巧,运行镜像就可以了。秒级启动。
Docker是基于Go语言开发的。

Docker能干什么

之前的虚拟机技术


image.png

虚拟机技术缺点:

  • 占用资源十分多
  • 冗余步骤多
  • 启动很慢
    容器化技术
    容器化技术不是模拟的一个完整的操作系统


    image.png

    比较Docker和虚拟机技术的不同:

  • 传统虚拟机,虚拟出一套硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
  • 容器内的应用直接运行在宿主机的内核上,容器没有自己的内核,也没有虚拟硬件。
  • 每个容器是相互隔离的,每个容器内都有一个属于自己的文件系统,互不影响。

DevOps(开发、运维)

更快速的交付和部署
传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一件运行
更便捷的升级和扩缩容
使用了docker之后,部署应用就和搭积木一样,项目打包为一个镜像
更简单的系统运维
容器化之后,我们的开发,测试环境高度一致

Docker基本组成

image.png

Docker镜像(image)
好比一个模板,可以通过这个模板来创建容器服务,例如:
Tomcat镜像==》run==》tomcat01容器(可提供服务器)。
通过这个镜像可以创建多个容器(最终服务器或者项目运行就是在容器中的)
容器(container)
Docker利用容器技术,独立运行一个后者一组应用,通过镜像来创建的。
启动 停止 删除 基本命令
目前可以把这个容器理解为一个建议的linux系统
仓库(repository)
仓库就是放镜像的地方
仓库分为公有仓库和私有仓库!
DockerHub(国外的)
阿里云也有容器服务器(配置了镜像加速)

Docker安装

环境准备
1.Linux基础
2.Centos7
3.Xshell(MobaXterm)连接服务器
环境查看

# 系统内核是3.10以上
[root@localhost /]# uname -r
3.10.0-1127.el7.x86_64
#  系统版本
[root@localhost /]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
  1. 卸载旧版本

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2.需要的安装包


安装 Docker Engine-Community
使用 Docker 仓库进行安装
在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。
设置仓库
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

使用以下命令来设置稳定的仓库。
使用官方源地址(比较慢)

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

可以选择国内的一些源地址:
阿里云

$ sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

清华大学源

$ sudo yum-config-manager \
    --add-repo \
    https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

安装 Docker Engine-Community
安装最新版本的 Docker Engine-Community 和 containerd,或者转到下一步安装特定版本:

$ sudo yum install docker-ce docker-ce-cli containerd.io

3.启动docker

[root@localhost /]# systemctl start docker
  1. 使用docker 查看是否安装成功
[root@localhost /]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-162.git64e9980.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      64e9980/1.13.1
 Built:           Wed Jul  1 14:56:42 2020
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-162.git64e9980.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      64e9980/1.13.1
 Built:           Wed Jul  1 14:56:42 2020
 OS/Arch:         linux/amd64
 Experimental:    false

  1. 运行hello-world
[root@localhost /]# docker run hello-world
Unable to find image 'hello-world:latest' locally
Trying to pull repository docker.io/library/hello-world ...
latest: Pulling from docker.io/library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:7f0a9f93b4aa3022c3a4c147a449bf11e0941a1fd0bf4a8e6c9408b2600777c5
Status: Downloaded newer image for docker.io/hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

提示 Hello form Docker,证明成功运行

6.查看hello-world 镜像

[root@localhost /]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx         latest              4bb46517cac3        12 days ago         133 MB
docker.io/hello-world   latest              bf756fb1ae65        7 months ago        13.3 kB

卸载docker
1、查询docker安装过的包:

[root@localhost /]# yum list installed | grep docker
docker.x86_64                       2:1.13.1-162.git64e9980.el7.centos @extras
docker-client.x86_64                2:1.13.1-162.git64e9980.el7.centos @extras
docker-common.x86_64                2:1.13.1-162.git64e9980.el7.centos @extras

2、删除安装包:

[root@localhost /]# yum remove docker-ce.x86_64 ddocker-ce-cli.x86_64 -y

3、删除镜像/容器等

[root@localhost /]# rm -rf /var/lib/docker

阿里云镜像加速

1.将docker镜像源修改为国内的:
在 /etc/docker/daemon.json 文件中添加以下参数(没有该文件则新建):

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

2.服务重启:

[root@localhost /]# systemctl daemon-reload
[root@localhost /]# systemctl restart docker

回顾hello-world

run的运行流程


image.png

底层原理

Docker是怎么工作的?
Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问!
DockerServer 接收到Docker-Client的指令,就会执行这个命令。

image.png

** Docker为什么比VM快**
1.Docker有着比虚拟机更少的抽象层
2.Docker利用宿主机的内核,VM则组要Guest OS。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345