docker的基本概念
Dokcer 部署流程
Docker简介
Docker(官网: https://www.docker.com/)一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
Docker包括 Image(镜像) Container(容器) Dockerfile 几个关键元素 从面相对象的角度来看 镜像就相当于一个类 容器就相当于一个一个的对象。
安装配置docker环境 依次执行以下命令
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager
\
--add-repo
\
https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-edge
yum install docker-ce
执行完以上命令如果没有异常则表示docker安装成功
然后启动docker服务
systemctl start docker
设置docker启动
chkconfig docker on
安装docker-compose工具
Docker Compose是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成一切准备工作。
安装
curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-
`uname -s
`-
`uname -m
`> /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
执行完之后 执行
docker-compose --version
显示如下则表示安装成功
创建镜像仓库
为了维护自己的镜像文件, 我们需要一个镜像仓库来存储。有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。docker-registry
是官方提供的工具,可以用于构建私有的镜像仓库。也可以使用nexus。这里是使用的docker-registry
执行命令
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
然后修改/etc/docker/daemon.json文件 表明 如果没有则创建
{
"registry-mirrors": ["https://5eajrcwh.mirror.aliyuncs.com"],
"insecure-registries": ["10.129.27.53:5000"]
}
然后执行命令重启docker
systemctl daemon-reload
systemctl restart docker
构建项目镜像
创建镜像描述文件Dockerfile 并编辑如下 以api为例 其他war包应用类似改下war文名称即可
这是api.war对应的镜像文件内容
FROM dordoka/tomcat
MAINTAINER cxg <chaixg@xxxxx.com>
ENV CATALINA_HOME /opt/tomcat
ADD ./api.war $CATALINA_HOME/webapps/
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
在Dockerfile 所在目录执行即构建镜像并且api.war文件也在此目录下
docker build –t <imageName>:<tag> .
把构建好的镜像推送到镜像仓库中 以供其他人使用
docker push NAME[:TAG]
拉取仓库中的镜像到本地
docker pull NAME[:TAG]
也可以导出创建好的镜像为tar文件 然后在其他服务器上就可以加载这些文件生产本地镜像 使用如下
导出镜像为tar文件
加载镜像文件
创建docker-compose.yml文件
各应用使用docker-compose 进行编排
服务器一docker-compose.ym内容如下
version: '2'
services:
zookeeper-host:
image: "10.129.27.53:5000/zookeeper"
ports:
- "2181:2181"
xxx-service-confmanager:
image: "10.129.27.53:5000/confmanager"
ports:
- "8080:8080"
extra_hosts:
- "redis-host:10.129.8.147"
- "mysql-keystone-host:10.129.56.220"
- "mysql-xxx-host:10.129.248.10"
- "swift-keystone-web:10.129.56.220"
- "swift-keystone:10.129.56.220"
- "swift-proxy:10.129.56.216"
depends_on:
- zookeeper-host
cloudadapter:
image: "10.129.27.53:5000/cloudadapter"
ports:
- "8088:8080"
extra_hosts:
- "redis-host:10.129.8.147"
- "mysql-keystone-host:10.129.56.220"
- "mysql-xxx-host:10.129.248.10"
- "swift-keystone-web:10.129.56.220"
- "swift-keystone:10.129.56.220"
- "swift-proxy:10.129.56.216"
depends_on:
- xxx-service-confmanager
xxx-web-cloud:
image: "10.129.27.53:5000/cloud"
ports:
- "8085:8080"
extra_hosts:
- "redis-host:10.129.8.147"
- "mysql-keystone-host:10.129.56.220"
- "mysql-xxx-host:10.129.248.10"
- "swift-keystone-web:10.129.56.220"
- "swift-keystone:10.129.56.220"
- "swift-proxy:10.129.56.216"
depends_on:
- cloudadapter
xxx-web-api:
image: "10.129.27.53:5000/api"
ports:
- "8083:8080"
# mem_limit: 2g
# environment:
# - CATALINA_OPTS= "-Xmx512m"
extra_hosts:
- "redis-host:10.129.8.147"
- "mysql-keystone-host:10.129.56.220"
- "mysql-xxx-host:10.129.248.10"
- "swift-keystone-web:10.129.56.220"
- "swift-keystone:10.129.56.220"
- "swift-proxy:10.129.56.216"
depends_on:
- xxx-web-cloud
nginx:
image: nginx
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/logs:/etc/nginx/logs
- ./api/resources:/etc/nginx/html/resources
ports:
- "80:80"
extra_hosts:
- "api2:10.129.27.54"
depends_on:
- xxx-web-api
- xxx-web-cloud
服务器二docker-compose.ym内容如下
version: '2'
services:
cloudadapter:
image: "10.129.27.53:5000/cloudadapter"
ports:
- "8088:8080"
extra_hosts:
- "redis-host:10.129.8.147"
- "mysql-keystone-host:10.129.56.220"
- "mysql-xxx-host:10.129.248.10"
- "swift-keystone-web:10.129.56.220"
- "swift-keystone:10.129.56.220"
- "swift-proxy:10.129.56.216"
- "zookeeper-host:10.129.27.53"
- "xxx-service-confmanager:10.129.27.53"
xxx-web-cloud:
image: "10.129.27.53:5000/cloud"
ports:
- "8085:8080"
extra_hosts:
- "redis-host:10.129.8.147"
- "mysql-keystone-host:10.129.56.220"
- "mysql-xxx-host:10.129.248.10"
- "swift-keystone-web:10.129.56.220"
- "swift-keystone:10.129.56.220"
- "swift-proxy:10.129.56.216"
- "zookeeper-host:10.129.27.53"
- "xxx-service-confmanager:10.129.27.53"
depends_on:
- cloudadapter
xxx-web-api:
image: "10.129.27.53:5000/api"
ports:
- "8083:8080"
mem_limit: 2g
environment:
- CATALINA_OPTS=-Xmx800m -Xmx800m -XX:MaxNewSize=256m
extra_hosts:
- "redis-host:10.129.8.147"
- "mysql-keystone-host:10.129.56.220"
- "mysql-xxx-host:10.129.248.10"
- "swift-keystone-web:10.129.56.220"
- "swift-keystone:10.129.56.220"
- "swift-proxy:10.129.56.216"
- "zookeeper-host:10.129.27.53"
- "xxx-service-confmanager:10.129.27.53"
depends_on:
- xxx-web-cloud
nginx.conf 配置内容如下
#user nobody;
worker_processes 4;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
upstream cloudprivate {
server xxx-web-cloud:8080;
server api2:8085;
}
upstream xxx {
ip_hash;
server xxx-web-api:8080;
server api2:8083;
}
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$http_host" "$request" '
'$status $body_bytes_sent $request_length $content_length "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'"$upstream_addr" "$request_time" "$upstream_response_time"';
sendfile on;
keepalive_timeout 300;
access_log logs/access.log main;
client_max_body_size 5000m;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
server {
listen 80;
server_name localhost;
location = / {
proxy_pass http://xxx/api/v1/p ;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
}
location /cloud {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://cloudprivate;
}
location /api{
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://xxx;
}
location / {
root html;
index index.html index.htm;
}
}
}
启动容器
在docker-compose.yml 所在目录下执行 docker-compose up –d 即启动各个容器
docker ps 查看当前正在运行的容器列表
docker logs –f <容器名称 or 容器id> 查看日志
停止容器
docker-compose stop 或者 docker stop <容器名称或者容器id>