一、为什么要学习Docker

二、Docker是什么?

三、Docker解决了什么问题?

四、Docker核心概念

五、Centos部署Docker

六、Image详解

七、通过Dockerfile构建Image

八、发布Image到自己的Docker Hub上去

本次课程所需环境CentOS7.X,各位有需要购买云服务器的可以通过我的链接:点击进行购买,享9折优惠!

阿里云9折优惠券,点击领取

一、为什么要学习Docker

解决了以下痛点:
1、持续集成(速度快)
2、运维(易部署)
3、资源

国内大的互联网公司都使用Docker技术,从业者必须要掌握的一个技能。

  • Spark也都是跑在K8s上面,无论开发、测试、运维。

官网:

  • www.docker.com

Securely build, share and run modern applications anywhere(构建、共享、运行应用程序在任何地方)

容器技术和虚拟化技术的联系:

了解虚拟化技术:
在这里插入图片描述

  • 虚拟机是底层架构,虚拟机之上有一层Host Operator System,再上面一层是Hypervisor,再上面有很多操作系统,在操作系统上部署很多应用程序。

  • 都是基于虚拟机,我们可以创建虚拟机的方式让不同的应用程序跑在不同的虚拟机上,这样做资源隔离不彻底。

虚拟化技术的局限性:

1、每一台虚拟机是一个操作系统,操作系统占用资源,虚拟机越多,操作系统占用资源也越多。

容器技术的架构:

在这里插入图片描述

  • 职责是开发、打包、运行APP的职责所在:Docker engine将底层物理设备和上层应用程序隔离开了。

我们要去部署一个普通App

常理来说找到物理机 --> 操作系统 --> Application:一个应用程序还要很多依赖包

  • 涉及到成本、资源问题、扩展(程序迁移)
  • 如果访问量扩大,服务器不够,进行扩展,做过集群扩容、搬迁;是一件很麻烦的事情。

==> 由物理层面部署变更为Docker Engine

二、Docker是什么?

Securely build, share and run modern applications anywhere

Docker思想:鲸鱼扛着集装箱在大海中遨游

  • 把所有零部件装到集装箱中去,就能保障货物的安全;可以把集装箱理解为应用程序,我们把application A --> application B,通过Docker搬走,有了docker之后,它能够运行在任何地方。

  • github上pull和push,github就是中转站;dockerhub是docker的一个中央仓库:http://hub.docker.com

通过docker构建centos都是秒级别的。

三、Docker解决了什么问题

1、解决生产环境和测试环境运行不一致的问题

2、隔离问题:比如说一个应用程序的边界值,在Spark中,某个机器负载高,task运行时间就会加长。作业跑在容器中,运行间是隔离的

3、扩展问题:比如618、双11的访问量,docker很容易完成设备的横向扩展。

四、Docker核心概念

1、镜像

  • 把所依赖的东西打成一个镜像,类比于一个集装箱 Build

2、仓库

  • docker hub这种就是仓库 Share

3、容器

  • App运行在Container中国 Run

五、Centos部署Docker

Docker:部署在Mac、Linux、Cloud上

Docker:
1、CE 社区版 社区版的功能已经够了
2、 EE 企业版

Docker只能运行在CentOS7,扩展出来一个vagrant工具(他能非常方便的创建一个VM)

什么是vagrant?

vagrant是一个工具,用于创建和部署虚拟化开发环境的。

拿VirtualBox举例,VirtualBox会开放一个创建虚拟机的接口,Vagrant会利用这个接口创建虚拟机,并且通过Vagrant来管理,配置和自动安装虚拟机。

普通用户如何使用sudo权限?

先切换到root用户,yum install sudo(安装这一服务),进入这个目录编辑文件:vi /etc/sudoers,进入尾行模式,输入:/root,表示搜索,键盘上的N表示搜索下一个;定位到如下这行,继续添加一行:

  • 允许hadoop用户无密码的使用到sudo权限:
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
hadoop  ALL=(ALL)       NOPASSWD:ALL

Docker如何安装?

docker.com拉到底,在Tools有一个documentation,点击进去是操作说明文档。

直接参照官网:
https://docs.docker.com/install/linux/docker-ce/centos/

Docker安装的前置要求:
1、Docker安装的操作系统至少得是CentOS7.X

  • To install Docker Engine-Community,you need a maintained version of Centos7. Archived versions aren’t supported or tested.

如果你的系统曾经安装过老版本的话,首先需要先卸载老版本:

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

Install Docker Engine - Community(社区版)

  • Most Users set up Docker’s repositories and install from them, for ease of installation and upgrade tasks. This is the recommended approach.

Install using the repository(首先安装仓库):

  • 1、Before You install Docker Engine - Community for the first time on a new host machine, you need to set up the Docker repository. Afterward, you can install and update Docker from the repository.
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
  • 2、Use the following command to set up the stable repository.
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3、Option中可选的我们暂时不关注,然后我们直接安装(INSTALL DOCKER ENGINE - COMMUNITY):

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

4、启动Docker:

  • sudo systemctl start docker

5、验证是否启动成功:

  • Verify that Docker Engine - Community is installed correctly by running the hello-world image.

在这里插入图片描述

在这里插入图片描述

[hadoop@hadoop ~]$ docker version
Client: Docker Engine - Community
 Version:           19.03.2
 API version:       1.40
 Go version:        go1.12.8
 Git commit:        6a30dfc
 Built:             Thu Aug 29 05:28:55 2019
 OS/Arch:           linux/amd64
 Experimental:      false
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/version: dial unix /var/run/docker.sock: connect: permission denied

到此处Docker基本的安装已经完成了。

六、Image详解

  • 镜像图解:
    在这里插入图片描述
    解析:
    1、底层是linux内核,也叫bootfs;基于linux内核可以装centos、Ubuntu、Debian操作系统,这层叫base image;在base image上可以装image1、image2、image3,image3上还能安装image4;linux主要分为内核空间和用户空间,每一个虚拟机还有一个概念叫rootfs。

2、并且还是分层的,层是可以添加、删除的,如:image3上可以加一个image4;在bootfs上建立了发行版,rootfs,base image只包含了rootfs,用户空间它可以共享主机下面的内核空间。

3、把每一个image理解为一个假设image3是一个MySQL,image4是一个Apache应用,image是只读的,不能改变

获取方式:

1、Dockerfile

2、Registory:从仓库中获取

去到hub.docker.com中去拉镜像,搜索centos;拉取centos镜像:

sudo docker pull centos

[hadoop@hadoop ~]$ sudo docker pull centos
Using default tag: latest
latest: Pulling from library/centos
d8d02d457314: Pull complete 
Digest: sha256:307835c385f656ec2e2fec602cf093224173c51119bbebd602c53c3653a3d6eb
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

2、使用sudo docker images:

[hadoop@hadoop ~]$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              67fa590cfc1c        5 weeks ago         202MB
hello-world         latest              fce289e99eb9        9 months ago        1.84kB

3、演示下载Ubuntu的指定版本号的:

  • sudo docker pull ubuntu:16.04
[hadoop@hadoop ~]$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               657d80a6401d        11 days ago         121MB
centos              latest              67fa590cfc1c        5 weeks ago         202MB
hello-world         latest              fce289e99eb9        9 months ago        1.84kB

Dockerfile的语法:

  • base image
  • info
  • 需要一些command命令

七、通过Dockerfile构建Image

1、新建ruozedata-hello-world目录:mkdir ruozedata-hello-world

2、vi hello.c文件;sudo yum install gcc glibc-static;gcc -static hello.c -0 hello

#include <stdio.h>
int main() {
    printf("hello world!\n");
    system("pause");
    return 0;
}

3、

1、
[hadoop@hadoop ruozedata-hello-world]$ sudo docker build -t 18896826276/ruozedata-hello-world .
Sending build context to Docker daemon  865.8kB
Step 1/3 : FROM scratch
 ---> 
Step 2/3 : ADD hello /
 ---> 0aff0865fffd
Step 3/3 : CMD ["/hello"]
 ---> Running in 5e4c819f377f
Removing intermediate container 5e4c819f377f
 ---> fabcc2fd29ab
Successfully built fabcc2fd29ab
Successfully tagged 18896826276/ruozedata-hello-world:latest

2、[hadoop@hadoop ruozedata-hello-world]$ sudo docker images
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
18896826276/ruozedata-hello-world   latest              fabcc2fd29ab        22 seconds ago      862kB
ubuntu                              16.04               657d80a6401d        11 days ago         121MB
centos                              latest              67fa590cfc1c        5 weeks ago         202MB
hello-world                         latest              fce289e99eb9        9 months ago        1.84kB

4、history命令:能够看到我们的层级变化

  • sudo docker history fabcc2fd29ab
[hadoop@hadoop ruozedata-hello-world]$ sudo docker history fabcc2fd29ab
IMAGE               CREATED              CREATED BY                                      SIZE                COMMENT
fabcc2fd29ab        About a minute ago   /bin/sh -c #(nop)  CMD ["/hello"]               0B                  
0aff0865fffd        About a minute ago   /bin/sh -c #(nop) ADD file:94931316fcd355f36鈥  862kB               

5、docker run命令,在容器中把它运行起来

  • 使用dockerfile的方式去构建image
[hadoop@hadoop ruozedata-hello-world]$ sudo docker run 18896826276/ruozedata-hello-world
hello world!

八、发布Image到自己的Docker Hub

  • 容器运行完了我们怎么看呢,它是如何展示出来的

使用命令:

1、sudo docker container ls -a

[hadoop@hadoop ruozedata-hello-world]$ sudo docker container ls -a
CONTAINER ID        IMAGE                               COMMAND             CREATED             STATUS                     PORTS               NAMES
9b59bcd94341        18896826276/ruozedata-hello-world   "/hello"            3 minutes ago       Exited (0) 3 minutes ago                       vigorous_brahmagupta
ec64392e08e0        hello-world                         "/hello"            3 hours ago

如何把本地的image提交到我们注册的docker hub中去:
自行注册hub.docker.com,然后在centos服务器上操作:

第一步:sudo docker login

  • 提示你需要输入用户名和密码,输入的是docker hub注册的用户名、密码,提示login successed表示okay。
[hadoop@hadoop ruozedata-hello-world]$ sudo docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: 18896826276
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

2、查看本地有几个镜像,选择一个镜像推上去,名字应该要保持一致:

sudo docker image ls -a

  • sudo docker push 18896826276/ruozedata-hello-world
[hadoop@hadoop ruozedata-hello-world]$ sudo docker image ls -a
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
<none>                              <none>              0aff0865fffd        12 minutes ago      862kB
18896826276/ruozedata-hello-world   latest              fabcc2fd29ab        12 minutes ago      862kB
ubuntu                              16.04               657d80a6401d        11 days ago         121MB
centos                              latest              67fa590cfc1c        5 weeks ago         202MB
hello-world                         latest              fce289e99eb9        9 months ago        1.84kB
[hadoop@hadoop ruozedata-hello-world]$ sudo docker push 18896826276/ruozedata-hello-world
The push refers to repository [docker.io/18896826276/ruozedata-hello-world]
b166e7907d08: Pushed 
latest: digest: sha256:428fe63402b41984f5bb3519c565e11d6bff5deabf982ec591828eeb1d5624f5 size: 527

第三步:去到docker hub上验证

在这里插入图片描述

第四步:删除本地的container和image

1、先要删除18896826276/ruozedata-hello-world对应的container
[hadoop@hadoop ruozedata-hello-world]$ sudo docker container ls -a
CONTAINER ID        IMAGE                               COMMAND             CREATED             STATUS                      PORTS               NAMES
9b59bcd94341        18896826276/ruozedata-hello-world   "/hello"            19 minutes ago      Exited (0) 19 minutes ago                       vigorous_brahmagupta
ec64392e08e0        hello-world                         "/hello"            3 hours ago         Exited (0) 3 hours ago                          ecstatic_galileo
[hadoop@hadoop ruozedata-hello-world]$ sudo docker container rm 9b59bcd94341
9b59bcd94341

2、本地删除这个对应的镜像
[hadoop@hadoop ruozedata-hello-world]$ sudo docker rmi 18896826276/ruozedata-hello-world

第五步:去docker hub上拉取镜像

在这里插入图片描述

第六步:重跑镜像:

  • [hadoop@hadoop ruozedata-hello-world]$ sudo docker run 18896826276/ruozedata-hello-world
    hello world!

注意:

  • 本地删除镜像前需要先删除它占用的容器;本地镜像也删除的话,再次回车让它运行它会去到docker hub上面去找。

1、sudo docker rmi 18896826276/ruozedata-hello-world 删除这个image

2、sudo docker container ls -a 发现不能删除,有容器占用,查看容器

3、sudo docker rm 1505a61b8201 删除占用着的容器

4、sudo docker rmi 18896826276/ruozedata-hello-world 删除本地镜像

5、sudo docker run 18896826276/ruozedata-hello-world 本地找不到会去docker hub上去找了运行
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐