初识docker

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保存的镜像更加完善
上一篇:Tomcat环境部署


下一篇:centos7.3离线安装和配置NFS