1、明确我们学的是什么 我们学习的是容器技术,并不仅仅是docker,docker仅仅是遵循容器标准的一种实现,只要遵循了容器标准,就可以叫容器技术。比如说最流行的docker,或者红帽的podman都可以叫容器技术。docker仅仅是最开始实现容器技术的一个软件。docker不等于容器,仅仅是容器的一个子集。容器不是虚拟化。
2、docker的由来 2010年,几个年轻人,追求梦想,走向人生巅峰,在美国的旧金山成立了一家dotcloud公司,主要提供PaaS的云计算服务。被迫出现的产物,利益驱使下的产物。
3、docker解决了什么问题? 麻烦的开发环境,麻烦的测试环境,麻烦的集成环境,解决了一个最经典的问题:在我这跑的好好的,怎么到了你那里就不行了呢?上述例子就是一个测试问题,世界上不存在完全一模一样的叶子,也不可能存在完全一模一样的操作系统(测试环境)。但是我们想要这种理想的情况,在我这测试的结果就会和在你那一模一样了。就不会出现上述情况了。docker就彻底解决了这个问题,docker通过打包镜像,将测试环境封装到一个密闭的镜像中,随时随地的在任何地方复制这个镜像。就能实现几乎一模一样的测试环境。
集成环境指的是生产环境的部署阶段,比如说要搭建一个云平台,要在基础设施上安装各种各样的软件,在基础设施上安装软件就意味着各种各样的问题,因为软件是分版本的,不同的软件对系统的要求也不一样。集成环境就是大名鼎鼎的微服务架构。
4、docker的安装 1 2 3 4 5 6 enable  docker --now
5、Docker镜像 1、Docker镜像介绍 在安装完docker-ce之后,默认相当于安装好了docker-cli和docker-ce进程,启动docker-ce进程就算是运行起了docker,但是此时我们并没有可以直接使用的docker私有仓库。镜像其实是装好了特定应用的一个东西,镜像是静态的,容器是动态的。镜像运行起来就是容器,类似于程序和进程。镜像只会占用磁盘空间,但是容器会占用磁盘空间的同时也会占用cpu和内存。
镜像一般是存放在就镜像仓库中的,然后通过docker-cli提供的命令从仓库中拉取镜像,然后将镜像保存在本地,以便后续使用。镜像仓库中的镜像都是压缩过的,压缩的目的是减少镜像的大小,这样在网络传输的时候,可以减少带宽的压力,然后docker的客户端拉取了镜像之后,会对镜像进行解压。
默认情况下docker是需要配置镜像仓库的,一般在生产环境中会配置一个私有的镜像仓库,这样就可以保证镜像传输的安全和速度。
在internet上有很多开源厂商给我们提供了镜像仓库,可以连接这些仓库直接拉取(pull)。
2、Dockerhub介绍和使用 Docker公司为了实现docker容器技术的良好的生态圈,推出了和github类似的东西,叫做dockerhub,是一个公有仓库,任何人都可以在dockerhub上创建自己仓库,然后上传自己镜像(早期的时候)
3、配置dockerhub的镜像加速器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 使用阿里云配置镜像加速器  daemon 守护程序"data-root" :"/data/docker" ,"storage-driver" :"overlay2" ,"registry-mirrors" : ["https://oym4jkot.mirror.aliyuncs.com" ],"insecure-registries" :["registry.access.redhat.com" ,"quay.io" ],"bip" :"172.101.10.1/24" ,"live-restore" :true 
4、配置docker的代理 有些情况下我们可能无法直接的访问到某些镜像仓库,但是有一个代理服务器可以访问到,就需要配置代理来访问到镜像仓库。
测试的环境,容器主机没有办法直接访问,但是有一个代理服务器,但是代理服务器的协议是socks5,docker没有办法直接访问socks代理,所以我们需要将socks5的代理转换成http或者https,一般是转换成http
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 1、将socks5的代理转换成http代理echo  '[Service] Environment="HTTP_PROXY=http://192.168.192.200:8118" Environment="HTTP_PROXY=https://192.168.192.200:8118" '  >> /etc/systemd/system/docker.service.d/proxy.conf
5、Docker镜像管理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 1、Docker镜像的拉取
6、使用Dockerhub上创建自己的仓库 1 2 3 4 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 只能创建一个私有仓库,公有仓库意味着创建的仓库都会被别人看到并拉取,这里指的仓库是repository't have a Docker ID, head over to https://hub.docker.com to create one. Username: vorabend 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 5、上传镜像到自己的dockerhub上 [root@docker ~]# docker push vorabend/zy:ubuntu-latest  The push refers to repository [docker.io/vorabend/zy] f6253634dc78: Layer already exists  9069f84dbbe9: Layer already exists  bacd3af13903: Layer already exists  ubuntu-latest: digest: sha256:4e4bc990609ed865e07afc8427c30ffdddca5153fd4e82c20d8f0783a291e241 size: 943 
6、Docker容器 1、Docker容器的介绍 镜像是静态的,将镜像运行起来就是容器,所以容器是动态的,镜像只会占用硬盘,但是容器会占用cou,内存和网络。
注意:不能将容器看做成一个操作系统,因为容器不包含内核,没有内核的东西当然不能称为操作系统。
2、一次性运行容器 1 2 3 4 5 6 7 8 9 10 11 12 早期是用docker run ,后来改成了更加显著的命令格式docker container run
3、交互式运行容器
1 2 3 4 5 6 7 8 9 
7、高级操作 1、映射端口 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 [root@docekr-ce ~]"http://nginx.org/" >nginx.org</a>.<br/>"http://nginx.com/" >nginx.com</a>.</p>for  using nginx.</em></p>
2、挂载数据卷 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 type =text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link="/root/html:/usr/share/nginx/html" "Destination" : "/usr/share/nginx/html" ,
3、传递环境变量 1 2 3 4 5 6 7 8 9 10 11 12 13 local /sbin:/usr/local /bin:/usr/sbin:/usr/bin:/sbin:/bin
8、Dockerfile 1、Dockerfile规则 1 2 3 4 5 6 7 8 9 1 、格式2 、Docker是按顺序执行Dockerfile里的指令集合的(从上至下依次执行)3 、每一个Dockerfile的第一个非注释行指令,必须是"FROM" 指令,用于为镜像文件构建过程中,指定基准镜像,后续的指令运行于此基准镜像所提供的运行环境中
2、USER/WORKDIR 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [root@docekr-ce Dockerfile]in  f51f7307d476in  a50fb1c01515pwd 
3、ADD/EXPOSE指令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 [root@docekr-ce Dockerfile]in  f6fecbc90c2ctype =text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=
4、RUN/ENV 1 2 3 4 5 6 7 8 9 10 11 12 13 [root@docekr-ce Dockerfile]$VER  -y 
5、CMD/ENTRYPOINT指令 1、CMD指令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 $VER  -y "httpd" ,"-D" ,"FOREGROUND" ]"httpd -D FOREGROUND"     59 seconds ago   Up 58 seconds 
2、ENTRYPOINT指令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 "daemon off;" $VER  -y 
6、综合实验 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [root@docekr-ce Dockerfile]echo  'Asia/Shanghai'  > /etc/timezone$WWW $WWW /index.html$CONF /demo.od.com.conf"nginx" ,"-g" ,"daemon off;" ]"nginx -g 'daemon of…"    33 seconds ago   Up 31 seconds      0.0.0.0:49161->80/tcp, :::49161->80/tcp   all_test
9、Docker的网络模型 1、NAT(默认) 2、None 3、HOST 4、联合网络 1 2 3 4 5 6 [root@docekr-ce Dockerfile]