1、引入
11、如果企业中,有1000台服务器,你能够保证所有的机器全部使用CentOS吗?
22、如果企业中要求部署一个Django,但是有很多台服务器不支持Python怎么办?
33、如果企业中要求将所有的服务,在无感知的情况下从阿里云切换至腾讯云,请问你怎么做?
4
5上世纪八十年代,虚拟化 sgroupd
62010左右 , 提出容器化的概念
7 存在两个难以解决的问题
8 名称随机
9 IP随机
102013年左右 , docker
112014年左右 , docker三剑客(解决了名称随机、IP随机)
122015年左右 , Google(请了Guido开发了kubernetes)
13 Google内部Brog系统 ---> kubernetes
14
15现kubernetes市场占有率达到90%以上
2、docker简介
1docker是一款容器软件。由2013年发布,后来加入linux基金会。
3、安装部署docker
1下载链接:https://www.docker.com/products/docker-desktop
2
3windows :
4mac
5linux
6
7docker分为两个版本:
8 docker-ce : 社区版
9 docker-ee :企业版
10
11linux 3.10的内核 有BUG
12
131、升级系统内核
14 [root@localhost ~]# wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-5.4.167-1.el7.elrepo.x86_64.rpm
15 [root@localhost ~]# wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.167-1.el7.elrepo.x86_64.rpm
16 # 安装
17 [root@localhost ~]# yum localinstall -y kernel-lt*
18 # 启动时自动选择最新的系统版本
19 [root@localhost ~]# grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
20 # 查看最新的系统内核启动版本
21 [root@localhost ~]# grubby --default-kernel
22 # 重启生效
23 [root@localhost ~]# reboot
24 # 检测
25 [root@localhost ~]# uname -a
26
272、安装依赖包
28 [root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
29
303、添加软件源信息
31 [root@localhost ~]# sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
32
334、更新并安装Docker-CE
34 [root@localhost ~]# sudo yum makecache fast
35 [root@localhost ~]# sudo yum -y install docker-ce-19.03.9
36
37 k8s支持的最新的版本,也是最稳定的版本是19
38
395、启动Docker
40 [root@localhost ~]# systemctl start docker
41
426、检测docker
43 [root@localhost ~]# docker info
44
457、加速docker
46(使用阿里云镜像源)
47sudo mkdir -p /etc/docker
48sudo tee /etc/docker/daemon.json <<-'EOF'
49{
50 "registry-mirrors": ["https://8mh75mhz.mirror.aliyuncs.com"]
51}
52EOF
53sudo systemctl daemon-reload
54sudo systemctl restart docker
4、docker的基础使用
11、docker三大概念
2 1、镜像 :镜像是启动容器的模板
3 2、容器 :是对外提供服务的实例
4 3、仓库(Harbor) :存放镜像的地方
5
62、docker和虚拟机之间的区别
7
83、镜像
9镜像是启动容器的模板,同一个镜像启动的所有的容器完全相同。
10
113.1、下载镜像
12 docker pull [仓库的URL]/[命名空间]/[镜像名称]:[版本号]
13 默认的仓库URL:https://index.docker.io/v1/
14 默认的命名空间:library
15 默认的版本号:latest
16
17 index.docker.io/library/nginx:latest
18 使用默认下载:[root@localhost ~]# docker pull nginx
19
20 [root@localhost ~]# docker images
21 REPOSITORY TAG IMAGE ID CREATED SIZE
22 nginx latest f6987c8d6ed5 6 days ago 141MB
23
243.2、查看本机镜像列表
25 [root@localhost ~]# docker images(是下面命令的简写)
26 [root@localhost ~]# docker image ls
27 REPOSITORY TAG IMAGE ID CREATED SIZE
28 nginx latest f6987c8d6ed5 6 days ago 141MB
29 仓库名 版本 镜像ID 创建距离现在的时间 大小
30
313.3、查看镜像的详情
32 docker inspect [镜像名称|ID] # 可以使用docker images查看id
33 [root@localhost ~]# docker inspect nginx
34
353.4、镜像tag
36 docker tag [镜像ID] [新的名称] # 相当于起个别名
37 [root@localhost ~]# docker tag f6987c8d6ed5 xiaodocker
38
39 # 查看
40 [root@localhost ~]# docker images
41 REPOSITORY TAG IMAGE ID CREATED SIZE
42 nginx latest f6987c8d6ed5 6 days ago 141MB
43 xiaodocker latest f6987c8d6ed5 6 days ago 141MB
44
453.5、登录仓库
46
47 首先需要在docker官网注册一个账号 # http://www.docker.com
48
49 docker login [仓库的URL地址]
50 默认的仓库地址:hub.docker.com
51 [root@localhost ~]# docker login # 使用默认的仓库地址
52 输入用户名、密码登录(官网注册的用户名和密码)
53
543.6、上传镜像
55 第一步:打tag
56 [root@localhost ~]# docker tag f6987c8d6ed5 alvinos/nginx:v2 # 名字可自定义
57 第二步:上传
58 [root@localhost ~]# docker push alvinos/nginx:v2
59
603.7、删除镜像
61 docker rmi [镜像的名称|ID]
62 [root@localhost ~]# docker rmi alvinos/nginx:v2
63
64注:docker镜像只能创建和删除,不能修改。
65 docker的ID全宇宙唯一,名称也不能重复
5、容器
1对外提供服务的实例。
2
31、容器生命周期
4 容器内的进程至少有一个进程运行在前台。
5
62、启动一个容器
7 docker run [参数] [镜像名称|ID] [启动命令]
8
9 参数:
10 -d : 以守护进程方式运行
11 [root@localhost ~]# docker run -d nginx
12
13 --rm : 当容器生命周期结束时,立即删除该镜像(默认结束后不会立即删除)
14 [root@localhost ~]# docker run -d --rm nginx
15
16 --name : 指定容器名称
17 [root@localhost ~]# docker run -d --rm --name nginx nginx
18
19 -e : 指定容器内部的环境变量
20 [root@localhost ~]# docker run -d -e NGINX_NAME=nginx nginx
21
22 -h : 指定容器的主机名
23 [root@localhost ~]# docker run -d -h hostname nginx
24
25 -p : 端口映射(固定)
26 [root@localhost ~]# docker run -d --rm --name nginx -p 40000:80 nginx
27 将centos7里面的4000端口映射成容器里的80端口,这样我们可以通过centos7的4000端口访问到容器的80端口
28
29 -P (大写) : 端口映射(随机)
30 [root@localhost ~]# docker run -d --rm --name nginx -P nginx
31
32 -i : 打开标准输出(将容器内部的标准输出接入到命令行中)
33 -t : 创建一个命令行(伪终端)
34 这两个参数一般一起使用,可以使用命令行模式操作容器
35 [root@localhost ~]# docker run -it --rm centos
36
37 -v : 添加一个目录映射
38 [root@localhost ~]# docker run -d --rm --name nginxv3 -P -v /tmp/:/usr/share/nginx/html nginx
39 由于/tmp/目录下没有内容,会报错403
40 [root@localhost ~]# echo helloword > /tmp/index.html
41
42 # 查看容器内是否有内容(还可以通过df -h查看挂载)
43 [root@localhost ~]# docker exec nginxv3 cat /usr/share/nginx/html/index.html
44helloword
45 通过docker ps查看随机端口
46 http://192.168.15.100:4001/ 查看
47
48 --link
49 --network
50
513、查看本机运行的容器列表
52 docker ps
53 -a : 显示本机上的所有的容器
54 -q : 只显示ID
55
56
574、在容器内部执行命令
58 docker exec [容器名称] [命令]
59 [root@localhost ~]# docker exec nginxv1 printenv # 打印容器的环境变量
60
61 进入容器:
62 docker exec -it [容器名称] bash
63 [root@localhost ~]# docker exec -it hungry_wright bash
64
655、删除容器
66 docker rm [容器ID或名称]
67
68 -f : 强制删除
69
70 [root@localhost ~]# docker rm -f $(docker ps -a -q) # 批量删除
6、保存容器和镜像
11、直接将容器保存成本地镜像
2
3 docker commit
4
5 docker commit --hrlp # 查看用法
6 Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
7 参数: 参数 容器(name或id) 自定义名称和版本号
8 -a : 作者
9 -m : 提交是解释信息
10 -p : 保存容器时,是否暂停运行容器
11
12 [root@localhost ~]# docker ps
13 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
14 7390f1d18977 nginx "/docker-entrypoint.…" 9 minutes ago Up 9 minutes 80/tcp hungry_wright
15 [root@localhost ~]# docker commit -a "Linux" -m 'init' -p hungry_wright test:v1
16 # 查看
17 [root@localhost ~]# docker images
18 REPOSITORY TAG IMAGE ID CREATED SIZE
19 test v1 9c5a265319e1 9 seconds ago 141MB
20
212、将本地的容器保存成镜像压缩包
22
23 1、保存容器为镜像压缩包
24
25 [root@localhost ~]# docker export --help
26 Usage: docker export [OPTIONS] CONTAINER # 用法
27 Options:
28 -o, --output string Write to a file, instead of STDOUT
29
30 docker export
31 [root@localhost ~]# docker export -o nginx.tar hungry_wright
32 再进行压缩
33 [root@localhost ~]# gzip nginx.tar
34
35 2、解压容器压缩包成镜像
36
37 [root@localhost ~]# docker import --help
38 Usage: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
39 Options:
40 -c, --change list Apply Dockerfile instruction to the created image
41 -m, --message string Set commit message for imported image
42 --platform string Set platform if server is multi-platform capable
43
44 # 先解压
45 [root@localhost ~]# gzip -d nginx.tar.gz
46
47 docker import
48 [root@localhost ~]# docker import nginx.tar test:v2
49
503、将本地的镜像保存成镜像压缩包
51
52 [root@localhost ~]# docker save --help
53 Usage: docker save [OPTIONS] IMAGE [IMAGE...] # 可以同时保存多个镜像
54 Options:
55 -o, --output string Write to a file, instead of STDOUT
56
57 docker save
58 [root@localhost ~]# docker save -o nginxv1.tar python:3.6 nginx:latest # 保存多个镜像
59
60----------------------------------------------------------------------------------------------------
61
62 [root@localhost ~]# docker load --help
63 Usage: docker load [OPTIONS]
64 Options:
65 -i, --input string Read from tar archive file, instead of STDIN
66 -q, --quiet Suppress the load output
67
68 docker load
69 [root@localhost ~]# docker load -i nginxv1.tar
70
714、save 和 export之间的区别
72 1、针对的对象不一样
73 2、save保存的镜像更加完善