在本文中,您将会了解到关于DockerWeave应用部署的新资讯,同时我们还将为您解释docker部署web应用的相关在本文中,我们将带你探索DockerWeave应用部署的奥秘,分析docker部署
在本文中,您将会了解到关于Docker Weave 应用部署的新资讯,同时我们还将为您解释docker部署web应用的相关在本文中,我们将带你探索Docker Weave 应用部署的奥秘,分析docker部署web应用的特点,并给出一些关于docker (部署常见应用):docker 部署 redis、Docker 04 应用部署与迁移备份 Dockerfile 与 Docker 私有仓库、Docker Macvlan 应用部署、Docker Overlay 应用部署的实用技巧。
本文目录一览:- Docker Weave 应用部署(docker部署web应用)
- docker (部署常见应用):docker 部署 redis
- Docker 04 应用部署与迁移备份 Dockerfile 与 Docker 私有仓库
- Docker Macvlan 应用部署
- Docker Overlay 应用部署
Docker Weave 应用部署(docker部署web应用)
Docker Weave 应用条件
- 官方文档:https://www.weave.works/docs/net/latest/install/installing-weave
使用前提:
1. 确保 Linux 内核版本 3.8+,Docker1.10+。
2. 节点之间如果有防火墙时,必须彼此放行 TCP 6783 和 UDP 6783/6784 端口,这是 Weave 控制和数据端口。
3. 主机名不能相同
内核版本升级方案:https://www.cnblogs.com/xiangsikai/p/9899844.html
Docker Weave 网络连接部署
1、下载安装 weave
- Weave
- 百度云下载:https://pan.baidu.com/s/11C7DAd3vPWvHchmxIWEkTg
- 密码:0azq
# 1、加入可执行权限
chmod +x weave
# 2、下载到本地,存入指定命令文件目录下
mv weave /usr/bin/
2、创建网络环境
# 节点1:启动并与其他主机建立连接,启动weave并下载镜像
weave-01:~# weave launch
# 节点2:进行连接 IP连接对端服务器
weave-02:~# weave launch <ip address>


命令:weave status
Version: 2.0.4 (failed to check latest version - see logs; next check at 2018/11/02 14:12:39)
Service: router
Protocol: weave 1..2
Name: 52:e7:9f:3c:61:a0(weave01)
Encryption: disabled
PeerDiscovery: enabled
Targets: 1
# 建立连接
Connections: 1 (1 established)
# 2 表示有两个节点
Peers: 2 (with 2 established connections)
TrustedSubnets: none
Service: ipam
Status: idle
Range: 10.32.0.0/12
DefaultSubnet: 10.32.0.0/12
Service: dns
Domain: weave.local.
Upstream: 192.168.1.1, 8.8.8.8
TTL: 1
Entries: 0
Service: proxy
Address: unix:///var/run/weave/weave.sock
Service: plugin (legacy)
DriverName: weave


命令:weave status connections
<- 192.168.1.78:53935 established fastdp 0e:75:65:8b:5c:4d(weave02) mtu=1376

注:fastdp 是它的运作模式,主要是用 VXLAN 封装的。如果内核版本不够它会使用自己的 sleeve 模式。
3、测试网络通信
# 节点1节点2:运行容器 测试ping
docker run -it --net=weave busybox
Docker Weave 使用 Weave 网络代理
1、节点 1 节点 2:使用 Weave 网络创建容器
# 1、使用weave代理
weave env
# 2、执行输出
export DOCKER_HOST=unix:///var/run/weave/weave.sock
2、直接运行测试容器
# 运行容器测试 ping 通
docker run -it busybox
3、查看连接情况
# 查看当前分配的容器
weave ps
# 查看weave相互之间节点建立的关系
weave status peers
docker (部署常见应用):docker 部署 redis
上节回顾:docker (部署常见应用):docker 部署 mysql
docker 部署 redis:4.0
# 下载镜像
docker pull redis:4.0
# 查看下载镜像
docker images|grep redis
# 启动镜像
docker run --name my-redis -p 16379:6379 -v /usr/local/workspace/redis/data:/data -d redis:4.0 redis-server --appendonly yes
命令说明:
--name my-redis 启动后容器名为 my-redis
-p 16379:3306 将容器的 3306 端口映射到主机的 16379 端口
-v /usr/local/workspace/redis/data:/data 将主机 /usr/local/workspace/redis/data 目录挂载到容器的 /data
redis-server --appendonly yes 在容器执行 redis-server 启动命令,并打开 redis 持久化配置
查看容器启动情况
[root@k8s-master docker]# docker ps|grep redis
f9eb2360ed36 redis:4.0 "docker-entrypoint.s?? 5 minutes ago Up 5 minutes 0.0.0.0:16379->6379/tcp my-redis
进入 redis 容器
# 进入redis容器
docker exec -it f9eb2360ed36 bash
# 找到redis执行脚本
root@f9eb2360ed36:/usr/local/bin# cd /usr/local/bin/
root@f9eb2360ed36:/usr/local/bin# ls -l
total 24528
-rwxrwxr-x 1 root root 374 Jun 11 06:46 docker-entrypoint.sh
-rwxr-xr-x 1 root staff 1286720 May 24 2017 gosu
-rwxr-xr-x 1 root staff 2628640 Jun 11 06:48 redis-benchmark
-rwxr-xr-x 1 root staff 6121232 Jun 11 06:48 redis-check-aof
-rwxr-xr-x 1 root staff 6121232 Jun 11 06:48 redis-check-rdb
-rwxr-xr-x 1 root staff 2820088 Jun 11 06:48 redis-cli
lrwxrwxrwx 1 root staff 12 Jun 11 06:48 redis-sentinel -> redis-server
-rwxr-xr-x 1 root staff 6121232 Jun 11 06:48 redis-server
# 执行redis-cli命令连接到redis中
root@f9eb2360ed36:/usr/local/bin# ./redis-cli
# 展示redis信息
127.0.0.1:6379> info
# Server
redis_version:4.0.14
redis_git_sha1:00000000
redis_git_dirty:0
感谢支持。感谢观看
Docker 04 应用部署与迁移备份 Dockerfile 与 Docker 私有仓库
MySQL 部署
拉取 mysql 镜像 docker pull centos/mysql-57-centos7
创建 MySQL 容器 docker run -di --name=mysql01 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=320512 centos/mysql-57-centos7
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是 root 用户的登录密码
Tomcat 部署
拉取镜像 docker pull tomcat:7-jre7
创建容器 创建容器 -p 表示地址映射
docker run ‐di ‐‐name=mytomcat ‐p 9000:8080
‐v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7‐jre7
Nginx 部署
拉取镜像 docker pull nginx
创建容器 docker run ‐di ‐‐name=mynginx ‐p 80:80 nginx
Redis 部署
拉取镜像 docker pull redis
创建容器 docker run ‐di ‐‐name=myredis ‐p 6379:6379 redis
迁移与备份
容器保存为镜像
我们可以通过以下命令将容器保存为镜像
docker commit 容器名称 镜像名称
镜像备份
我们可以通过以下命令将镜像保存为 tar 文件
docker save -o tar 文件名称 镜像名称
恢复镜像
docker load -i tar 文件名称
Dockerfile
Dockerfile 是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过 Dockerfile 文件构建一个新的镜像开始工作了;
3、对于运维人员:在部署时,可以实现应用的无缝移植。
常用命令
命令 | 作用 |
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像的创建者 |
ENV key value | 设置环境变量 (可以写多条) |
RUN command | 是 Dockerfile 的核心部分 (可以写多条) |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和 ADD 相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录 |
使用脚本创建镜像
步骤:
(1)创建目录
mkdir –p /usr/local/dockerjdk8
(2)下载 jdk-8u171-linux-x64.tar.gz 并上传到服务器(虚拟机)中的 /usr/local/dockerjdk8 目录
(3)创建文件 Dockerfile vi Dockerfile
#依赖镜像名称和 ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER ITCAST
#切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相对路径 jar, 把 java 添加到容器中
ADD jdk‐8u171‐linux‐x64.tar.gz /usr/local/java/
#配置 java 环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH
$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
(4)执行命令构建镜像(注意后边的空格和点,不能省略)
docker build ‐t=''jdk1.8'' .
参看镜像是否建立完成
docker images
Docker 私有仓库
私有仓库搭建与配置
(1)拉取私有仓库镜像(此步省略)
docker pull registry
(2)启动私有仓库容器
docker run ‐di ‐‐name=registry ‐p 5000:5000 registry
(3) 打开浏览器输入地址 http://ip:5000/v2/_catalog,看到 {"repositories":[]} 表示私有仓库搭建成功并且内容为空。
(4) 修改 daemon.json vi /etc/docker/daemon.json
添加以下内容,保存退出,这是为了让 docker 信任私有仓库地址 {"insecure-registries":["ip:5000"]}
重启 docker 服务
systemctl restart docker
镜像上传到私有仓库
标记此镜像为私有仓库的镜像 docker tag jdk1.8 ip:5000/jdk1.8
再次启动私服容器
docker start registry
上传标记的镜像
docker push ip:5000/jdk1.8
Docker Macvlan 应用部署
Docker Macvlan 应用部署
MacVLAN有两种桥接模式
- Bridge模式:不创建子接口的情况下直接去桥接物理接口。直接桥接到与宿主级的同网段。
- VLAN Bridge模式:创建子接口去桥接物理接口。可划分多个VLAN。
Macvlan Bridge模式 容器专属网络
1、节点1节点2操作:创建macvlan网络
docker network create -d macvlan --subnet=172.100.1.0/24 --gateway=172.100.1.1 -o parent=ens33 macvlan_net


docker network create 创建网络
-d 指定网络驱动程序为macvlan
--subnet 指定一个子网段
--gateway 指定网关
-o parent=ens33 指定宿主接口
macvlan_net 自定义网络名称


命令:docker network ls
NETWORK ID NAME DRIVER SCOPE
0a48ab454840 macvlan_net macvlan local
注:如果需要访问外网,需要将网络设置为与宿主级相同网络下。
注:本地不可访问,因为桥接的本地网络。
注:单个网卡只能绑定一次如重复添加会报如下错误。


# ens33网卡已被绑定,不多次绑定。
Error response from daemon: network dm-0a48ab454840 is already using parent interface ens33
# 删除绑定网卡网络集
docker network rm ID号
2、测试通信
macvlan-01# docker run -it --net macvlan_net --ip=172.100.1.10 busybox
macvlan-02# docker run -it --net macvlan_net --ip=172.100.1.11 busybox ping 172.100.1.10
docker run -it --net macvlan_net --ip=172.100.1.11 busybox ping 172.100.1.10
PING 172.100.1.10 (172.100.1.10): 56 data bytes
64 bytes from 172.100.1.10: seq=0 ttl=64 time=0.949 ms
64 bytes from 172.100.1.10: seq=1 ttl=64 time=0.316 ms
64 bytes from 172.100.1.10: seq=2 ttl=64 time=0.317 ms
64 bytes from 172.100.1.10: seq=3 ttl=64 time=0.310 ms
Macvlan VLAN Bridge模式 容器专属网络
1、节点1节点2操作:创建一个VLAN,VLAN ID 50
# ip link add link 宿主网卡 name 宿主网卡名字.子网卡名称id type vlan id 50
ip link add link ens33 name ens33.50 type vlan id 50
# 重启docker激活网卡
systemctl restart docker
2、节点1节点2操作:创建Macvlan网络
docker network create -d macvlan --subnet=172.99.0.0/24 --gateway=172.99.0.1 -o parent=ens33.50 macvlan_net99


docker network create 创建网络
-d 指定网络驱动程序为macvlan
--subnet 指定一个子网段
--gateway 指定网关
-o parent=ens33 指定宿主接口
macvlan_net99 自定义网络名称


命令:docker network ls
NETWORK ID NAME DRIVER SCOPE
f3b3b084f580 macvlan_net99 macvlan
3、测试互通
macvlan-01# docker run -it --net macvlan_net99 --ip=172.99.0.10 busybox
macvlan-02# docker run -it --net macvlan_net99 --ip=172.99.0.11 busybox ping 172.99.010
注:像这样创建多个子网卡,来实现划分多个VLAN环境。
Docker Overlay 应用部署
Docker Overlay 部署条件
要想使用 Docker 原生 Overlay 网络,需要满足以下任意条件:
1、Docker 运行在 Swarm 模式
2、使用键值存储的 Docker 主机集群
本次部署使用键值存储的 Docker 主机集群,需要满足以下条件:
1. 集群中主机连接到键值存储,Docker 支持 Consul、Etcd 和 Zookeeper;
2. 集群中主机运行一个 Docker 守护进程;
3. 集群中主机必须具有唯一的主机名,因为键值存储使用主机名来标识集群成员;
4. 集群中 Linux 主机内核版本 3.12+,支持 VXLAN 数据包处理,否则可能无法通信。
5. Docker 通过 overlay 网络驱动程序支持多主机容器网络通信。
内核版本升级方案:https://www.cnblogs.com/xiangsikai/p/9899844.html
Docker Overlay 应用部署
- 节点 1 / 键值存储:192.168.1.77
- 节点 2:192.168.1.78
节点 1 节点 2 操作
# 修改两个测试端主机名,并退出终端生效
hostname overlay-01
hostname overlay-02
一、部署 Consul 并运行服务
1.1 节点 1 操作:下载 Consul 二进制包并启动
- 百度云:https://pan.baidu.com/s/1MsVJtYUDJ8LzBqVxwmdc8A
- 密码:g5jd
- 命令行下载:wget https://releases.hashicorp.com/consul/0.9.2/consul_0.9.2_linux_amd64.zip
# 1、解压Consul压缩包
unzip consul_0.9.2_linux_amd64.zip
# 2、将consul移动到/bin/目录下并添加执行权限
mv consul /usr/bin/consul && chmod +x /usr/bin/consul
# 3、启动consul并指定本机IP
nohup consul agent -server -bootstrap -ui -data-dir /var/lib/consul -client=192.168.1.77 -bind=192.168.1.77 &>/var/log/consul.log &
1.2 节点 1 操作:查看日志启动情况
tail /var/log/consul.log -f


2018/10/29 15:17:39 [INFO] agent: Started HTTP server on 192.168.1.77:8500
2018/10/29 15:17:45 [WARN] raft: Heartbeat timeout from "" reached, starting election
2018/10/29 15:17:45 [INFO] raft: Node at 192.168.1.77:8300 [Candidate] entering Candidate state in term 2
2018/10/29 15:17:45 [INFO] raft: Election won. Tally: 1
2018/10/29 15:17:45 [INFO] raft: Node at 192.168.1.77:8300 [Leader] entering Leader state
2018/10/29 15:17:45 [INFO] consul: cluster leadership acquired
2018/10/29 15:17:45 [INFO] consul: New leader elected: localhost.localdomain
2018/10/29 15:17:45 [INFO] consul: member ''localhost.localdomain'' joined, marking health alive
2018/10/29 15:17:45 [INFO] agent: Synced node info
==> Newer Consul version available: 1.3.0 (currently running: 0.9.2)
二、部署 Docker 配置文件
2.1 节点 1 操作:配置 Docker 守护进程连接 Consul
# 添加 ExecStart 如果已有则注释添加下面案例
vim /lib/systemd/system/docker.service
[Service]
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store consul://192.168.1.77:8500 --cluster-advertise 192.168.1.77:2375


# 为docker监听
tcp://0.0.0.0:2375
2.2 节点 1 操作:重启 docker 服务
# 1.修改配置文件重新加载
systemctl daemon-reload
# 2.重启docker服务
systemctl restart docker
2.3 节点 2 操作:修改配置文件
vim /lib/systemd/system/docker.service
[Service]
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store consul://192.168.1.77:8500 --cluster-advertise 192.168.1.78:2375


# 通告信息需要改为本机IP
--cluster-advertise 192.168.1.78:2375
2.4 节点 2 操作:重启 docker 服务
# 1.修改配置文件重新加载
systemctl daemon-reload
# 2.重启docker服务
systemctl restart docker
三、创建 Overlay 网络
3.1 节点 1 操作:创建 overlay 网络
# 创建网络 -d 指定网络驱动程序为 overlay multi_host
docker network create -d overlay multi_host
注:再任意节点创建后会通过 overlay 同步到已连接的节点下创建网络。


命令:docker network ls
4abe591cdf50 multi_host overlay global


命令:docker network inspect ID/KEY
[
{
"Name": "multi_host",
"Id": "4abe591cdf504c1f15f563e4c8516c22b7d037268e6975e9491a417d2da83e8a",
"Created": "2018-11-01T10:42:00.117452769+08:00",
"Scope": "global",
# 驱动为overlay
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
# 网段信息
"Config": [
{
"Subnet": "10.0.0.0/24",
"Gateway": "10.0.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
四、测试通信
4.1 节点 1 与 2 操作:运行测试容器
# 指定连接网络类型 --net=multi_host
docker run -it --net=multi_host busybox
注:如果报错则可在配置文件中 ExecStart 添加加如下参数
--default-runtime=docker-runc


建议添加 多个参数
--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
--default-runtime=docker-runc \
--exec-opt native.cgroupdriver=systemd \
--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
--init-path=/usr/libexec/docker/docker-init-current \
--seccomp-profile=/etc/docker/seccomp.json \
如下
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store consul://192.168.1.77:8500 --cluster-advertise 192.168.1.78:2375 --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json
4.2 节点 1 与 2 操作:测试通信
overlay-01
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:0A:00:00:03
inet addr:10.0.0.3 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fe80::42:aff:fe00:3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1
RX packets:11 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:906 (906.0 B) TX bytes:586 (586.0 B)
overlay-02
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:0A:00:00:02
inet addr:10.0.0.2 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fe80::42:aff:fe00:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1
RX packets:14 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1136 (1.1 KiB) TX bytes:656 (656.0 B)
测试是否通信 overlay-02 ping overlay-01
/ # ping 10.0.0.3
PING 10.0.0.3 (10.0.0.3): 56 data bytes
64 bytes from 10.0.0.3: seq=0 ttl=64 time=0.960 ms
64 bytes from 10.0.0.3: seq=1 ttl=64 time=0.355 m
注:通信成功。
今天关于Docker Weave 应用部署和docker部署web应用的讲解已经结束,谢谢您的阅读,如果想了解更多关于docker (部署常见应用):docker 部署 redis、Docker 04 应用部署与迁移备份 Dockerfile 与 Docker 私有仓库、Docker Macvlan 应用部署、Docker Overlay 应用部署的相关知识,请在本站搜索。
本文标签: