docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署

摘要:
Docker I.容器技术和Docker简介1.部署演进l在物理机器上部署应用程序虚拟化技术2.容器的必要性l开发人员需要各种环境来开发应用程序,各种依赖性l运维人员在部署应用程序时也需要构建各种环境3。容器解决的问题l解决开发和运维之间的矛盾4.什么是容器l软件的标准化包装及其依赖关系l应用程序之间的隔离l共享同一个OSKernell可以在许多主流操作系统中运行
docker

一、 容器技术和docker简介

1. 部署演变

在一台物理机部署Application

l 虚拟化技术

2. 容器的必要性

开发人员开发一个Application需要各种环境,各种依赖

运维人员部署Application时也需要搭建各种环境

3. 容器解决的问题

l 解决了开发和运维之间的矛盾

4. 容器是什么

l 对软件和其依赖的标准化打包

l 应用之间相互隔离

共享同一个OS Kernel

l 可以运行在很多主流操作系统上

5. 虚拟机与容器的区别

虚拟机是物理层面的隔离,容器是Application层面的隔离

6. docker是什么

l docker是目前最流行的容器技术的实现

l 2004~2008年Linux已经出现了LXC2013docker包装了LXC2013年三月开源,2016docker分为企业版和社区版

7. docker能做什么

l 简化配置

l 提高效率

8. dockerkubernates

l docker可以被k8s管理

l kubernetes,简称k8s

9. DevOps

l DevOps ——解决开发和运维间合作和沟通

不仅仅依赖docker,还需要版本管理,持续集成等

10. docker的应用

2015年的618大促中,京东大胆启用了基于Docker的容器技术来承载大促的关键业务(图片展现、单品页、团购页),当时基于Docker容器的弹性云项目已经有近万个Docker容器在线上环境运行,并且经受住了大流量的考验

l 2016618中,弹性云项目更是担当重任,全部应用系统和大部分的DB服务都已经跑在Docker上,包括商品页面、用户订单、用户搜索、缓存、数据库,京东线上将会启动近15万个Docker容器

l 京东弹性计算云通过软件定义数据中心与大规模容器集群调度,实现海量计算资源的统一管理,并满足性能与效率方面的需求,提升业务自助上线效率。应用部署密度大幅提升,资源使用率提升,节约大量的硬件资源

二、 docker环境的各种搭建方法

1. docker的安装介绍

l 官网:https://docs.docker.com/

l Docker 提供了两个版本:社区版 (CE) 和企业版 (EE)

2. dockermac系统上安装

3. dockerwindows系统上安装

4. dockerCentOS系统上安装

l 官方文档:https://docs.docker.com/install/linux/docker-ce/centos/#set-up-the-repository

防止有残留

yum remove docker

docker-client

docker-client-latest

docker-common

docker-latest

docker-latest-logrotate

docker-logrotate

docker-selinux

docker-engine-selinux

docker-engine

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第1张

安装可能用到的依赖

yum install -y yum-utils

device-mapper-persistent-data

lvm2

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第2张

添加位置

yum-config-manager

--add-repo

https://download.docker.com/linux/centos/docker-ce.repo

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第3张

查询可以装什么docker版本

yum list docker-ce --showduplicates | sort -r

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第4张

安装指定版本

yum -y install docker-ce-18.06.1.ce-3.el7

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第5张

开启

systemctl start docker

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第6张

设置开机自启动

systemctl enable docker

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第7张

查看版本

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第8张

装完docker,修改如下文件,写入内容,重启docker,配置国内镜像

vi /etc/docker/daemon.json

加入以下内容:

{

"registry-mirrors": [

"https://kfwkfulq.mirror.aliyuncs.com",

"https://2lqq34jg.mirror.aliyuncs.com",

"https://pee6w651.mirror.aliyuncs.com",

"https://registry.docker-cn.com",

"http://hub-mirror.c.163.com"

],

"dns": ["8.8.8.8","8.8.4.4"]

}

重启docker 

systemctl restart docker

5. dockerUbuntu系统上安装

6. docker-machine的使用

l Docker Machine Docker 官方提供的一个工具,它可以帮助我们在远程的机器上安装 Docker,或者在虚拟机 host 上直接安装虚拟机并在虚拟机中安装 Docker

可以通过 docker-machine 命令来管理这些虚拟机和 Docker

7. docker palyground

l 地址:https://labs.play-with-docker.com/

直接使用云端的docker

公共的,每个人用4小时

左侧点一下,就增加一个实例

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第9张

三、 docker的镜像和容器

1. docker的底层技术实现架构

l docker提供了打包运行app的平台

app与底层基础设施隔离

2. docker engine

l docker engine是核心,里面有后台进程dockerd,提供了REST API接口,还提供了CLI接口,另外,docker就是一种C/S的架构

3. 整体架构

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第10张

4. 底层技术支持

l Namespaces:网络隔离

l Control groups:资源限制

l Union file systems:系统分层

5. docker image概述

是文件和meta data的集合

6. 制作baseImage

l baseImage:基于系统的基础镜像

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第11张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第12张

根据当前位置编译镜像

docker build -t gochaochao/hello-world .

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第13张

可以查看编译后的镜像

docker image ls

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第14张

运行镜像,成为一个容器

docker run gochaochao/hello-world

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第15张

也可以官方直接拉取镜像

docker pull redis

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第16张

查看镜像

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第17张

7. container概念和使用

l container可以理解为运行时的实例,与image不同

查看所有运行过的container容器

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第18张

如果没有就去官方下载

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第19张

可以交互运行容器

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第20张

此时,可以查到当期运行时的容器

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第21张

删除某个镜像

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第22张

还可以删除所有容器

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第23张

查出所有没有在运行的实例

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第24张

如下指令可以删除没有在运行的容器

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第25张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第26张

8. 创建Image的两种方式

基于image创建container后,如果在container做了一些变化,例如安装了某个软件,可以将这些改变,commit成一个新的image,也可以简写为docker commit

交互运行一个centos实例,给里面装一个lrzsz

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第27张

装完退出

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第28张

可以查看到修改后的容器

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第29张

将这个新的容器,打包成一个新的镜像

生成新的镜像

docker commit determined_hermann gochaochao/centos-lrzsz

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第30张

查看镜像

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第31张

还可以根据镜像id,查看到镜像分层信息

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第32张

使用Dockerfile,通过build制作image,可以简写为docker build

通过定义文件,一样的效果

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第33张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第34张

编译镜像

docker build -t gochaochao/centos-lrzsz2 .

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第35张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第36张

可以查看到多出个镜像

再次启动:docker container start 470671670cac

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第37张

9. Dockerfile详解

l FROM:从哪开始,从一个系统开始

FROM scratch         # 最小系统

FROM centos         

FROM ubuntu:14.04

l LABEL:注释

LABEL version=”1.0”

LABEL auther=”sjc”

l RUN:执行命令,每RUN一次,会多一个系统分层,尽量少一些层

RUN yum -y update && install lrzsz

net-tools

l WORKDIR:进入或创建目录,尽量不要用相对路径

WORKDIR /root     # 进入 /root 目录

WORKDIR /test     # 会在根下,创建 /test 并进入

WORKDIR demo    # 创建demo,进入

RUN pwd          # /test/demo

l ADD and COPY:将本地的文件,添加到image里,COPYADD区别是不会解压

ADD hello /  # 将当前目录下hello,添加到容器的根下

ADD tt.tar.gz /  # 压缩包扔进去,并解压

l ENV,增加Dockerfile的可读性,健壮性

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第38张

l CMD and ENTRYPOINT:执行命令或运行某个脚本

10. Dockerfile——CMD vs ENTRYPOINT

l ShellExec格式

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第39张

l ENTRYPOINTCMD:容器启动时,运行什么命令

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第40张

ENTRYPOINTCMD用的多,因为CMD有可能执行完前面的,把后面定义的CMD给忽略不执行了

11. 分享docker image

l image名字一定要以自己docker hub的用户名开头

登录

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第41张

上传镜像到docker hub

docker image push gochaochao/centos-lrzsz2:latest

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第42张

下载镜像到本地

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第43张

若想从docker hub删镜像

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第44张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第45张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第46张

12. 分享Dockerfile

l docker image不如分享Dockerfile,更加安全

13. 搭建私有docker registry

l github是公开的,也可以创建自己的私有仓库

docker官方给提供了私有仓库的镜像

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第47张

准备第二台机器,作为私有仓库

第二台运行如下

docker run -d -p 5000:5000 --restart always --name registry registry:2

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第48张

查看进程,运行没问题

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第49张

浏览器可以看到第二台机器仓库里,没东西

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第50张

测试端口,第一台可以下个telnet

yum -y install telnet

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第51张

输入q退出

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第52张

编写dockerfile,编译要求的镜像名

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第53张

按dd删除整行

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第54张

编译镜像,IP是私有仓库的IP

docker build -t 192.168.190.131:5000/centos .

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第55张

编写文件,加一行

"insecure-registries":["192.168.190.131:5000"],

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第56张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第57张

重启docker

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第58张

上传到私有仓库

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第59张

刷新页面,私有仓库有内容了

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第60张

若从私有仓库下东西,如下:

docker pull 192.168.190.131:5000/centos

14. Dockerfile案例

创建一个pythonweb应用,然后打包成docker image运行

from flask import Flask

app = Flask(__name__)

@app.route('/')

def hello():

    return "hello docker"

if __name__ == '__main__':

    app.run()

创建目录,创建个app.py,拷贝上面代码

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第61张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第62张

创建Dockerfile

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第63张

FROM python:3.6

LABEL auth="sun"

RUN pip install flask

COPY app.py /app/

WORKDIR /app

EXPOSE 5000

CMD ["python","app.py"]

构建镜像

docker build -t gochaochao/flask-hello-world .

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第64张

运行镜像

docker run gochaochao/flask-hello-world

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第65张

此时可以查看到进程

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第66张

15. 运行中对container操作

l exec命令用于调用并执行指令的命令

后台运行

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第67张

可以交互运行里面的机器,根据运行时的container ID

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第68张

交互运行容器里面机器的python shell

docker exec -it e8517231ecd8 python

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第69张

后台运行一个容器,并指定容器名字

docker run -d --name=demo gochaochao/flask-hello-world

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第70张

可以根据名字停止启动

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第71张

可以查看运行时的容器的运行日志

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第72张

查看运行时容器详细信息

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第73张

ping一下里面的地址

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第74张

16. 对容器资源限制

l 对内存的限制

CPU的限制

可以指定开启容器占用的内存和CPU

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第75张

四、 docker的网络

1. 网络分类

l 单机

n Bridge Network:相当于VMware的桥接,默认跑这个

n Host Network:类似于VMNAT

n None Network:没网

l 多机

n Overlay Network:集群网络

可以查看网卡信息

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第76张

2. Linux网络命名空间namespace

命名空间是docker底层重要的概念

3. Bridge详解

l 进行多容器通信

4. 容器通信

有时写代码时,并不知道要请求的IP地址

运行一个最小系统

docker run -d --name test1 busybox /bin/sh -c "while true;do sleep 3600;done"

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第77张

起第二个最小系统,链接第一个

链接类似于配置主机名和映射

docker run -d --name test2 --link test1 busybox /bin/sh -c "while true;do sleep 3600;done"

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第78张

假设此时,test2部署了项目,test1部署了项目用的mysql,那么项目访问mysql时,编写项目就可以不指定IP,指定成test1,就可以通,因为是linke了

5. 端口映射

l 实现外界访问

运行一个nginx,可以查到进程

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第79张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第80张

通过桥接网卡,查看到容器的IP

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第81张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第82张

从本机,可以访问到nginx启动了的主页

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第83张

此时外界是无法访问到的,可以通过端口映射解决

停止并删除前面的容器

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第84张

端口映射启动容器

docker run --name web -d -p 80:80 nginx

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第85张

此时,外界浏览器可以通过虚拟机IP,访问到容器内的内容

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第86张

6. 网络的nonehost

l none应用场景:安全性要求极高,存储绝密数据等

l host网络类似于NAT

7. 多容器部署和应用

可以清理下前面的容器

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第87张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第88张

2个容器,一个用flaskweb服务,另一个redis做自增

首先,跑起来一台redis

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第89张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第90张

创建目录,编写代码

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第91张

l app.py

from flask import Flask

from redis import Redis

import os

import socket

 

app = Flask(__name__)

redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)

 

@app.route('/')

def hello():

    redis.incr('hits')

    return 'Hello Container World! I have been seen %s times and my hostname is %s. ' % (redis.get('hits'),socket.gethostname())

 

if __name__ == "__main__":

    app.run(host="0.0.0.0", port=5000, debug=True)

再编写一个dockerfile

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第92张

l Dockerfile

FROM python:2.7

LABEL maintaner="1320685524@qq.com"

COPY . /app

WORKDIR /app

RUN pip install flask redis

EXPOSE 5000

CMD [ "python", "app.py" ]

构建一个镜像

docker build -t gochaochao/flask-redis .

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第93张

运行构建好的镜像,外界访问,需要加个 -p 5000:5000

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第94张

成功跑起2个容器

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第95张

进入flask容器,访问运行的代码,可以看到调用了redis自增

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第96张

8. 多机器多容器通信

可能出现容器IP一样,会出问题,可以加一个etcd去管理,防止IP冲突

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第97张

2台机器,etcd安装包传到2台机器

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第98张

都解压

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第99张

第一台:进入解压后的etcd,运行如下,注意修改IP

运行.txt 找命令,拷贝进去

etcd启动命令(node01),注意修改IP

nohup ./etcd --name docker-node1 --initial-advertise-peer-urls http://192.168.83.128:2380

--listen-peer-urls http://192.168.83.128:2380

--listen-client-urls http://192.168.83.128:2379,http://127.0.0.1:2379

--advertise-client-urls http://192.168.83.128:2379

--initial-cluster-token etcd-cluster

--initial-cluster docker-node1=http://192.168.83.128:2380,docker-node2=http://192.168.83.130:2380

--initial-cluster-state new&

etcd启动命令(node02),注意修改IP

nohup ./etcd --name docker-node2 --initial-advertise-peer-urls http://192.168.83.130:2380

--listen-peer-urls http://192.168.83.130:2380

--listen-client-urls http://192.168.83.130:2379,http://127.0.0.1:2379

--advertise-client-urls http://192.168.83.130:2379

--initial-cluster-token etcd-cluster

--initial-cluster docker-node1=http://192.168.83.128:2380,docker-node2=http://192.168.83.130:2380

--initial-cluster-state new&

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第100张

2台可以看到etcd是健康的状态

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第101张

此时,停止docker

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第102张

运行被etcd管理的docker

/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.83.128:2379 --cluster-advertise=192.168.83.128:2375&

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第103张

第二台一样的,停止docker,然后运行.txt里找命令启动

/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.83.130:2379 --cluster-advertise=192.168.83.130:2375&

查看网络docker network

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第104张

查看网路详细信息docker network ls

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第105张

上面搞定后,第一台机器创建个虚拟网卡

docker network create -d overlay demo

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第106张

此时,第二台也可以看到这个网络

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第107张

还可以第一台创建个容器

docker run -d --name test3 --net demo busybox sh -c "while true;do sleep 3600;done"

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第108张

此时第二台运行一样的,会报错,已经存在,解决了集群间docker机器互相不认识的情况

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第109张

例如一台做redis,一台做web处理

l app.py

from flask import Flask

from redis import Redis

import os

import socket

 

app = Flask(__name__)

redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)

 

@app.route('/')

def hello():

    redis.incr('hits')

    return 'Hello Container World! I have been seen %s times and my hostname is %s. ' % (redis.get('hits'),socket.gethostname())

 

if __name__ == "__main__":

    app.run(host="0.0.0.0", port=5000, debug=True)

l Dockerfile

FROM python:2.7

LABEL maintaner="sjc_job@126.com"

COPY . /app

WORKDIR /app

RUN pip install flask redis

EXPOSE 5000

CMD [ "python", "app.py" ]

9. overlay网络和etcd通信

l 多机多容器部署时,需要保证地址不冲突

五、 docker的持久化存储和数据共享

1. 数据持久化引入

l 容器中数据存在丢失的风险

2. 数据持久化方案

基于本地文件系统的Volume

基于pluginVolume

3. Volume的类型

受管理的data Volume:由docker后台自动创建

绑定挂载的Volume:具体挂载位置可以由用户指定

4. 数据持久化——data Volume

l https://hub.docker.com/mysql,可以看到官方的Dockerfile中也定义了VOLUME

官方mysql里定义的

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第110张

前边的容器清一下

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第111张

后台启动个mysql

docker run -d --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第112张

查看docker所有的持久化到本地的数据文件

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第113张

可以看到存到了本地的哪里详细信息

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第114张

持久化的redis数据

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第115张

持久化的mysql数据

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第116张

存储的mysql库文件

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第117张

可以清除不被引用的数据文件

docker volume prune

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第118张

启动容器,指定持久化数据目录文件

docker run -d -v mysql:/var/lib/mysql --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第119张

进入容器的mysql

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第120张

随便写点东西退出

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第121张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第122张

关闭并删除容器

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第123张

指定数据同步位置,开mysql容器

docker run -d -v mysql:/var/lib/mysql --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第124张

交互运行,可以查看到数据已经导入

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第125张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第126张

5. 数据持久化——bind mouting

l 可以指定一个与容器同步的文件夹,容器变化,文件同步变化

找个目录,创建个文件,写点东西

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第127张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第128张

编写dockerfile

FROM nginx:latest

WORKDIR /usr/share/nginx/html

COPY index.html index.html

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第129张

构建镜像

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第130张

启动容器,挂载目录

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第131张

此时,修改本地index.html文件,里面访问的首页是直接变的

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第132张

六、 docker Compose多容器部署

1. docker部署wordpress

l wordpress是一个博客网站,需要2个镜像,还需要一个mysql

查看所有的image

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第133张

清理image

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第134张

下载wordpress

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第135张

5.5

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第136张

5.5的,改成latest

docker tag mysql:5.5 mysql:latest

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第137张

启动mysql镜像

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第138张

启动wordpress镜像

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第139张

浏览器查看下

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第140张

上面wordpress部署,需要一个一个的下载和开启,比较麻烦,需要docker compose

2. docker compose介绍

l 多容器的APP很难部署和管理,docker compose就类似于批处理

3. docker compose安装和使用

先上传文件到目录

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第141张

l 安装后需要赋权限

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第142张

查看版本号

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第143张

创建文件夹

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第144张

创建文件,写入以下内容

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第145张

docker-compose的方式部署wordpress

version: '3'

 

services:

 

  wordpress:

    image: wordpress

    ports:

      - 80:80

    environment:

      WORDPRESS_DB_HOST: mysql

      WORDPRESS_DB_PASSWORD: admin

    networks:

      - my-bridge

 

  mysql:

    image: mysql:5.5

    environment:

      MYSQL_ROOT_PASSWORD: admin

      MYSQL_DATABASE: wordpress

    volumes:

      - mysql-data:/var/lib/mysql

    networks:

      - my-bridge

 

volumes:

  mysql-data:

 

networks:

  my-bridge:

    driver: bridge

启动compose

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第146张

浏览器查看

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第147张

可以查看进程

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第148张

对于很复杂的项目,只要编写好docker-compose,就可以很容易的运行起来

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第149张

4. 容器扩展和负载均衡

l 容器扩展

stop停止容器,down是停止并删除

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第150张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第151张

docker-compose结合Dockerfile使用

在前边例子里,编写一个docker-compose.yml ,加入如下内容

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第152张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第153张

version: "3"

services:

  redis:

    image: redis

  web:

    build:

      context: .

      dockerfile: Dockerfile

    ports:

      - 8080:5000

    environment:

      REDIS_HOST: redis

运行

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第154张

可以通过浏览器访问

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第155张

停止docker-compose

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第156张

docker-compose.yml 里如下2行删掉

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第157张

进行容器扩展

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第158张

加负载均衡:

首先修改 app.py

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第159张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第160张

Dockerfile里面也改一下

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第161张

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第162张

docker-compose.yml文件,加入以下内容,负载均衡

lb:

image: dockercloud/haproxy

links:

- web

ports:

- 8080:80

volumes:

- /var/run/docker.sock:/var/run/docker.sock

version: "3"

services:

  redis:

    image: redis

  web:

    build:

      context: .

      dockerfile: Dockerfile

    environment:

      REDIS_HOST: redis

  lb:

    image: dockercloud/haproxy

    links:

      - web

    ports:

      - 8080:80

    volumes:

      - /var/run/docker.sock:/var/run/docker.sock

再次启动容器

docker-compose up --scale web=3 -d

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第163张

启动后,访问代码,可以看出是不同的容器返回的信息

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第164张

5. 复杂应用部署

l 6-5项目部署

七、 容器编排docker Swarm

k8s   管理所有的docker的

docker swarm k8s功能差不多

1. 编排swarm简介

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第165张

l 服务创建和调度

l 在swarm manage做决策,决定将worker部署到哪里

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第166张

2. 三节点swarm集群的搭建

3. 创建维护Service并扩展

4. 使用DockerStack部署VotingApp

5. 使用DockerStack部署可视化应用

6. 使用并管理DockerSecret

7. 更新service版本

八、 docker Cloud和docker企业版

1. docker公司业务介绍

l 2017年初,docker分为社区版和企业版

l docker公司还提供培训,网址:https://training.docker.com/

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第167张

l docker公司还提供认证,网址:http://success.docker.com/

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第168张

l 类似于苹果的AppStore,网址:https://store.docker.com/

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第169张

可以通过web界面创建service,网址:https://cloud.docker.com/,这是收费的

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第170张

2. docker cloud自动化构建

docker公司第一个CaaScontainer-as-a-service)产品,提供容器服务的,是在PaaS(类似于阿里云)之上的,就算在云上搭建docker服务

l 是提供容器的管理、编排、部署的托管服务

l docker公司2015年收购了tutum公司,将tutum改装成了docker cloud

l docker cloud提供的主要模块如下:

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第171张

使用docker cloud时,需要与github账号关联

3. docker企业版的在线使用

l 网址:https://www.docker.com/products/docker-enterprise

使用docker公司提供的单节点的企业版试用,试用时间12小时

l 点击申请使用

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第172张

l 在线试用时间太短,下面用本地试用的方式

4. 阿里云部署容器

l 网址:https://cn.aliyun.com/

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第173张

l 往下拉,点击右侧容器服务

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第174张

l 点击立即开通

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第175张

l 可以直接支付宝登录

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第176张

l 授权

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第177张

l 注册

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第178张

l 立即开通,可能需要实名认证

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第179张

l 成功开通

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第180张

l 同意授权

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第181张

5. 阿里云部署dockerEE

l 网址:https://cn.aliyun.com/

九、 容器编排Kubernetes

l KubernetesGoogle开源的容器集群管理系统,可能被墙,所以要。。。

简称k8s2017年底,docker宣布支持k8s,宣布了k8s取得了阶段性胜利

l 20147月,Docker收购Orchard Labs,由此Docker公司开始涉足容器编排领域,Orchard Labs这家2013年由两位牛逼的年轻人创建的公司,有一个当时非常著名的容器编排工具fig,而这个fig就是docker-compose的前身

l 2015年初,Docker发布Swarm,开始追赶Kubernetes的脚步,正式进入容器编排领域,与k8s竞争

l 20173月,Docker公司宣布Docker企业版诞生,自此开始区分社区版和企业版,从2016年到2017年初,Docker公司的一些列动作充分展示了一个创业公司的盈利压力。Docker公司的一系列努力,并没有能让Docker Swarm走上容器编排的巅峰,相反,Kubernetes因为其优秀的架构和健康的社区环境,得到迅速发展,在生产环境中得到了广泛的应用,然后用户反馈,社区回应,良性循环了下去。2017年各大厂商都开始拥抱Kubernetes,亚马逊AWSMicrosoft AzureVMware, 有的甚至抛弃了自家的产品

l 2017年底,Docker宣布在自家企业版里支持Kubernetes,和Swarm一起作为容器编排的解决方案供用户选择

在容器底层技术领域,Docker还是老大,Kubernetes底层更更多的还是选择使用containerd

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第182张

l swarm的架构

l k8s的架构,主称为master,从称为node

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第183张

l k8smaster节点,API Server是对外的,可以通过UI访问,Scheduler是调度模块,Controller是控制模块,etcd就是分布式存储,存储k8s整个的状态和配置

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第184张

l k8snode节点,pod是容器中调度的最小单位,指具有相同namespacecontainer的组合,kubelet类似于代理,可以做创建容器的管理,kube-proxy和网络有关,做端口代理和转发,Fluentd是做日志的采集、存储和查询

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第185张

l k8s整体架构

 docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署第186张

十、 总结

免责声明:文章转载自《docker应用、搭建、container、image、搭建私有云docker registry、容器通信、端口映射、多机多容器通信、数据持久化、docker部署wordpress、docker compose使用、负载均衡、docker Swarm、docker云部署》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇苹果cms系统 更新后台数据 报(error) READONLY You can't write against a read only slave 的解决办法Vue.js 诞生及发展史下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

大数据采集和抽取怎么做?这篇文章终于说明白了!

本文来源于公众号【胖滚猪学编程】,转载请注明出处! 关于数据中台的概念和架构,我们在大白话 六问数据中台和数据中台全景架构及模块解析!一文入门中台架构师!两篇文章中都说明白了。从这一篇文章开始分享中台落地实战。 其实无论是数据中台还是数据平台,数据无疑都是核心中的核心,所以闭着眼睛想都知道数据汇聚是数据中台/平台的入口。纵观众多中台架构图,数据采集与汇聚都...

MySQL-Linux升级MySQL

升级MySql5.7.26 到5.7.29 1、查看原MySQL版本 select version(); 2、备份原数据库 以test数据库为例。 mysqldump -u root -pP@ssw0rd_2770 test > /opt/mysql/bak/test.sql 3、下载MySQL最新版本 wget http://dev.mysq...

Jellyfin 安装 Docker 版

Deploy jellyfin by Docker Ref Pre-requirement Docker please(Docker-Compose is optional) Installation Download the latest container's image:docker pull jellyfin/jellyfin Create pe...

(转)mysql中event的用法详解

转自:http://www.cnblogs.com/langtianya/p/5445528.html 一、基本概念mysql5.1版本开始引进event概念。event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发。通过单独或调用存储过程使用,在某一特定的时间点,触发相关的SQL语句或...

redis慢查询的简单认识和事务、订阅的认识

  有学习的小伙伴可以一起讨论有问题可以问我,微信 15321502296慢查询 阀值:规定的一个值 阈值:规定的一个范围 就是系统在执行命令前后计算每条命令的执行时间,当超过预设的阀值时,就见这条命令记录下来 slowlog-log-slower-than  微秒 1秒=1000毫秒=1000000微秒 0 记录所有命令 <0不进行记录 slowl...

Python中的多线程编程,线程安全与锁(一)

1.多线程编程与线程安全相关重要概念 在我的上篇博文聊聊Python中的GIL中,我们熟悉了几个特别重要的概念:GIL,线程,进程,线程安全,原子操作。 以下是简单回顾,详细介绍请直接看聊聊Python中的GIL GIL:Global Interpreter Lock,全局解释器锁。为了解决多线程之间数据完整性和状态同步的问题,设计为在任意时刻只有一个...