若泽数据公开课-Docker系列(主讲PK哥)
一、为什么要学习Docker二、Docker是什么?三、Docker解决了什么问题?四、Docker核心概念五、Centos部署Docker六、Image详解一、为什么要学习Docker解决了以下痛点:1、持续集成(速度快)2、运维(易部署)3、资源国内大的互联网公司都使用Docker技术,从业者必须要掌握的一个技能。Spark也都是跑在K8s上面,无论开发、测试、运维。...
本次课程所需环境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上去找了运行
更多推荐
所有评论(0)