docker部署教程

如今Docker的使用已经非常普遍,特别在一线互联网公司。使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力。在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如今在微服务架构越来越流行的情况下,微服务+Docker的完美组合,更加方便微服务架构运维部署落地。

本文详细解释介绍Docker入门相关内容,Docker在微服务体系中的使用。在了解Docker之前我们先考虑几个问题:
1、Docker是什么?2、为什么要使用Docker,它有什么优势?带着这些问题我们来看看下面的内容。

什么是Docker?

Docker 是世界领先的软件容器平台。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用 Docker 可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟。

Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目已经超过 4 万 6 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。

为什么要使用Docker

容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。

具体说来,Docker 在如下几个方面具有较大的优势。

1、更快速的交付和部署

对开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。

开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。

2、更高效的虚拟化

Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。

3、更轻松的迁移和扩展

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

4、更简单的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

Docker vs VM

从下图可以看出,VM是一个运行在宿主机之上的完整的操作系统,VM运行自身操作系统会占用较多的CPU、内存、硬盘资源。Docker不同于VM,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟之内完成。由于Docker轻量、资源占用少,使得Docker可以轻易的应用到构建标准化的应用中。但Docker目前还不够完善,比如隔离效果不如VM,共享宿主机操作系统的一些基础库等;网络配置功能相对简单,主要以桥接方式为主;查看日志也不够方便灵活。

docker部署教程_第1张图片

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多;Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。

相关概念

Docker是CS架构,主要有两个概念:

Docker daemon: 运行在宿主机上,Docker守护进程,用户通过Docker client(Docker命令)与Docker daemon交互
Docker client: Docker 命令行工具,是用户使用Docker的主要方式,Docker client与Docker daemon通信并将结果返回给用户,Docker client也可以通过socket或者RESTful api访问远程的Docker daemon
docker部署教程_第2张图片

了解了Docker的组成,再来了解一下Docker的三个主要概念:

Docker image:镜像是只读的,镜像中包含有需要运行的文件。镜像用来创建container,一个镜像可以运行多个container;镜像可以通过Dockerfile创建,也可以从Docker hub/registry上下载。
Docker container:容器是Docker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。
Docker hub/registry: 共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为 https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry。
镜像就相当于打包好的版本,镜像启动之后运行在容器中,仓库就是装存储镜像的地方。

好了,接下来就是具体进行docker实战演练了!!!
这几天学习了docker相关的教程,做个笔记,可以日后查看。
第一节课docker前戏
购买了一台腾讯云的服务器。首先进行了服务器的系统更新:

yum update 

  
  
    
    
    
    
  • 1

第二步,更新内核

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install  kernel-ml-devel kernel-ml -y
cat  /boot/grub2/grub.cfg 
grub2-set-default  'CentOS Linux (4.20.13-1.el7.elrepo.x86_64) 7 (Core)'

  
  
    
    
    
    
  • 1
  • 2
  • 3
  • 4
  • 5

第三步,内核更新完成。进行重启:

reboot

  
  
    
    
    
    
  • 1

通过 uname -r 查看系统的最新版本。

安装挂载磁盘
通过 命令查看系统盘和磁盘:

fdisk  -l

  
  
    
    
    
    
  • 1

docker部署教程_第3张图片
第二步,格式化硬盘 ;

fdisk /dev/vdb

  
  
    
    
    
    
  • 1

接着 执行 n p 1; wq
docker部署教程_第4张图片
3.创建分区

mkfs.ext4 /dev/vdb1

  
  
    
    
    
    
  • 1

4.将数据盘挂载
命令:

mkdir/data

  
  
    
    
    
    
  • 1
mount /dev/vdb1 /data

  
  
    
    
    
    
  • 1

第五步:写入硬盘启动信息,下次启动后自动挂载数据盘

echo /dev/vdb1 /data ext4 defaults 0 0 >> /etc/fstab

  
  
    
    
    
    
  • 1

docker部署教程_第5张图片

第二课docker安装及注意事项
接下来就是在购买的云服务器上进行docker的安装。具体步骤如下:
创建一个docker 文件夹: mkdir docker
第一步:下载一个工具类

yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

  
  
    
    
    
    
  • 1
  • 2
  • 3

第二步:添加docker源

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

  
  
    
    
    
    
  • 1
  • 2
  • 3

第三步,安装docker

yum install  -y docker-ce

  
  
    
    
    
    
  • 1

安装完docker之后,就要启动docker服务了。

systemctl start docker

  
  
    
    
    
    
  • 1

可以通过以下命令,查看docker服务开启的状态

systemctl status  docker

  
  
    
    
    
    
  • 1

让dokcer服务开启自动启动

systemctl enable docker

  
  
    
    
    
    
  • 1

查看docker的信息

docker info

  
  
    
    
    
    
  • 1

查看信息的时候,会发现有报错。如下:

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

  
  
    
    
    
    
  • 1
  • 2

解决办法,编辑

vim /etc/sysctl.conf

  
  
    
    
    
    
  • 1

文件增加下面两行配置

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

  
  
    
    
    
    
  • 1
  • 2

然后执行命令:

sysctl -p

  
  
    
    
    
    
  • 1

查看信息的时候,如果出现报错,如下:

WARNING: IPv4 forwarding is disabled

  
  
    
    
    
    
  • 1

解决办法,编辑

vim /etc/sysctl.conf

  
  
    
    
    
    
  • 1

添加一行配置文件

net.ipv4.ip_forward=1

  
  
    
    
    
    
  • 1

重启docker的命令:

systemctl daemon-reload
systemctl restart docker

  
  
    
    
    
    
  • 1
  • 2

下载安装docker -compose。
第一步,下载一个compose上传到服务器,或者使用该地址下载

curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

  
  
    
    
    
    
  • 1

网速慢,用百度云:链接:https://pan.baidu.com/s/1Dxz-QnxECHW3fLFQjsndag
提取码:uumo
复制这段内容后打开百度网盘手机App,操作更方便哦
docker部署教程_第6张图片
第二步:给docker-compose添加可执行权限

chmod +x /usr/local/bin/docker-compose

  
  
    
    
    
    
  • 1

第三步:

docker-compose --version

  
  
    
    
    
    
  • 1

如何卸载 docker -compose

rm /usr/local/bin/docker-compose

  
  
    
    
    
    
  • 1

第三课docker安装 open
https://docs.docker.com/compose/install/
创建 open文件夹 mkdir open
在data挂载盘,进行编辑配置文件

vim   docker-compose.yml

  
  
    
    
    
    
  • 1
version: '2'  
services:  
  open:
    cap_add:
     - NET_ADMIN
    image: kylemanna/open
    container_name: open
    ports:
     - "1194:1194/udp"
    restart: always
    volumes:
     - /data/open:/etc/open 

  
  
    
    
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

cd 到 open路径下

docker-compose run --rm open o_genconfig -u udp://129.211.130.142

  
  
    
    
    
    
  • 1

初始化

docker-compose run --rm open o_initpki

  
  
    
    
    
    
  • 1

这些是提示的输入

Enter PEM pass phrase: 输入123456(你是看不见的)  
Verifying - Enter PEM pass phrase: 输入123456(你是看不见的)  
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:回车一下  
Enter pass phrase for /etc/open/pki/private/ca.key:输入123456 ```

  
  
    
    
    
    
  • 1
  • 2
  • 3
  • 4

// 开启 open服务

docker-compose up -d open

  
  
    
    
    
    
  • 1

创建一个客户端用户

docker-compose run --rm open easyrsa build-client-full virtuousOne nopass
Enter pass phrase for /etc/open/pki/private/ca.key:输入123456

  
  
    
    
    
    
  • 1
  • 2

把证书导入到virtuousOne.o中
在open中创建文件夹: mkdir cliento

docker-compose run --rm open o_getclient virtuousOne > /data/open/cliento/virtuousOne.o 

  
  
    
    
    
    
  • 1

同时,去云服务控制台开启端口
docker部署教程_第7张图片
win客户端下载一个openVPN的连接工具:地址 https://open.net/index.php/open-source/downloads.html
同时,我们把证书下载下来,放到安装在win的conf目录下
docker部署教程_第8张图片

docker部署教程_第9张图片
查看哪些是正常启动的:

docker ps -a

  
  
    
    
    
    
  • 1

第四课–docker实战-安装mysql、redis
在data目录下创建mysql: mkdir mysql
然后再里面创建配置文件,配置好配置文件

vim my.cnf

  
  
    
    
    
    
  • 1
[mysqld]
default-time-zone = '+8:00'
max_connections = 1200
thread_cache_size = 100
character_set_server = utf8mb4
#default-storage-engine=INNODB
#init_connect='SET NAMES utf8'
max_allowed_packet=1024M
skip-name-resolve
[mysql]
#default-character-set=utf8
[client]
#default-character-set=utf8

  
  
    
    
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

安装mysql

docker run  --restart=always --name mysql  \
 -v /data/docker/mysql/data:/var/lib/mysql  -v /data/docker/mysql:/etc/mysql/conf.d  \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD='123456' -d mysql:5.7.25  --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

  
  
    
    
    
    
  • 1
  • 2
  • 3
  • 4

设置mysql的版本
docker部署教程_第10张图片
将安装到docker的mysql,设置到open的网络中

docker network connect open_default  mysql

  
  
    
    
    
    
  • 1

查看mysql在该容器中的 网络IP

docker exec mysql cat /etc/hosts

  
  
    
    
    
    
  • 1

查看open的网络IP

docker exec open cat /etc/hosts

  
  
    
    
    
    
  • 1

docker部署教程_第11张图片
本地计算机开启openVPN GUI
docker部署教程_第12张图片
然后就可以远程连接mysql.
docker部署教程_第13张图片
在mysql中查看设置的配置连接池:
show VARIABLES like ‘%max_connections%’;
安装redis

在data目录下,创建redis文件夹。mkdir redis

docker run  --restart=always   --name  redis -p 6379:6379 -v /data/redis/data:/data  -d redis  --appendonly yes

  
  
    
    
    
    
  • 1

安装完成,进行配置redis的open

docker network connect open_default  redis

  
  
    
    
    
    
  • 1

查看redis在open对应的IP

docker exec redis cat /etc/hosts

  
  
    
    
    
    
  • 1

查看docker对应的open对应的IP

docker exec open cat /etc/hosts

  
  
    
    
    
    
  • 1

docker部署教程_第14张图片
成功连接后,即可表示安装完成!
docker部署教程_第15张图片

第五课–docker实战-安装nginx,配置https
首先创建 mdkir nginx 。然后继续
在nginx文件夹下创建三个文件建

1.mkdir conf.d
2.mkdir cert
3. mkdir www

  
  
    
    
    
    
  • 1
  • 2
  • 3

下一步,在www目录下编辑index.html

cd www
vim index.html

  
  
    
    
    
    
  • 1
  • 2

在nginx中 创建 nginx.conf文件

vim nginx.conf

  
  
    
    
    
    
  • 1

编辑的内容是:

#user  nobody;
user  root;
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 {
    use epoll; 
    worker_connections  20480;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
#下面三行是nginx解决跨域问题
  #add_header Access-Control-Allow-Origin *;
 # add_header Access-Control-Allow-Headers X-Requested-With;
  #add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
   #关闭显示nginx版本号
    server_tokens off;
    include /etc/nginx/conf.d/*.conf;
}
  • 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

在 conf.d中创建 docker.virtuousone.cn.conf文件,编辑的内容为:

server
    {
        listen  443   ssl  http2 default_server ;
        server_name   docker.virtuousone.cn;
        index index.html index.htm ;
        root  /usr/share/nginx/html;        
        ssl on;
        ssl_certificate /etc/nginx/cert/fullchain.pem;
        ssl_certificate_key  /etc/nginx/cert/privkey.pem;
        ssl_protocols TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_session_timeout 10m;
        ssl_session_cache builtin:1000 shared:SSL:10m; #SSL 会话缓存类型和大小
        ssl_buffer_size 1400; # 1400 bytes to fit in one MTU
        add_header Strict-Transport-Security max-age=15768000;
        ssl_stapling on;
        ssl_stapling_verify on;
        #如果使用这个AES256+EECDH:AES256+EDH:!aNULL   当nginx开启http2的时候,浏览器会访问不了,chrome浏览器报错内容ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY
         #http://www.chinaz.com/web/2016/0323/515111.shtml 参考这个
        #ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;
        #强烈推荐使用下面这个
        ssl_ciphers         EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
   # location / {
          
      #      proxy_pass  http://127.0.0.1:5250;
    #        proxy_set_header   Host             $host;
    #        proxy_set_header   X-Real-IP        $remote_addr;  
     #       proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;        
    #}
    #access_log  /home/wwwlogs/access.log;
    location ~*  \.(jpg|jpeg|png|gif|ico|css|js|mp3)$ {
               expires 30d;
    }

}

  • 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

复制文件

cp docker.virtuousone.cn.conf api.virtuousone.cn.conf.bak
docker.virtuousone.cn.conf test.virtuousone.cn.conf.bak

 
 
   
   
   
   
  • 1
  • 2

生成证书:

docker run --name certbot -p 443:443 -p 80:80 -v /data/certbot/letsencrypt:/etc/letsencrypt -d  certbot/certbot  certonly --standalone --agree-tos  --non-interactive --email [email protected]  -d docker.virtuousone.cn -d api.virtuousone.cn  -d test.virtuousone.cn

 
 
   
   
   
   
  • 1

这个证书的有效期是90天,到期之后,可以更新证书:

docker run --name certbot -p 443:443 -p 80:80 -v /data/docker/certbot/letsencrypt:/etc/letsencrypt -d  certbot/certbot  certonly  renew --force-renew

 
 
   
   
   
   
  • 1

在域名网站开启二级域名以及 开通443和80端口
进入到cerbot下。的 letsencrypt的live的目录下

 cd certbot
 ls
 cd letsencrypt
ls
cd live
ls
cd docker.virtuousone.cn
ls

 
 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

复制生成的证书 到cert中

cp fullchain.pem privkey.pem /data/nginx/cert

 
 
   
   
   
   
  • 1

进入到cert目录下

cd /data/nginx/cert
ls
cd ..

 
 
   
   
   
   
  • 1
  • 2
  • 3

查看 .conf文件

cat conf.d/docker.virtuousone.cn.conf 

 
 
   
   
   
   
  • 1

拉取并启动 nginx

docker run --net host --restart=always  --name nginx -e TZ="Asia/Shanghai"   -v /data/nginx/nginx.conf:/etc/nginx/nginx.conf -v /etc/localtime:/etc/localtime:ro    -v /data/nginx/conf.d:/etc/nginx/conf.d   -v /data/nginx/cert:/etc/nginx/cert  -v /data/nginx/www:/usr/share/nginx/html -d nginx

 
 
   
   
   
   
  • 1

在 conf.d中的 docker.virtuousone.cn.conf中
添加一个Server配置

server {
listen 80;
server_name docker.virtuousone.cn ;
#return 301 https://docker.virtuousone.cn$request_uri;
#【这是 nginx 最新支持的写法】
return 301 https://$server_name$request_uri;
#rewrite ^(.*) https://docker.virtuousone.cn$1 permanent;
}

 
 
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

重启nginx服务

docker restart nginx

 
 
   
   
   
   
  • 1

在浏览器中输入二级域名,就可以看到nginx配置成功的了。

docker部署教程_第16张图片
同时,可以在https://www.sslshopper.com/ssl-checker.html
进行检测配置的https的安全级别。

第六课 docker实战-spring boot项目docker容器化的部署
周末学习了下如何在docker中部署spring boot项目。
第一步,是打包。
docker部署教程_第17张图片
在data目录下,创建 api文件夹和 test文件夹

mkdir api test

 
 
   
   
   
   
  • 1

进入api,创建一个Dockerfile文件夹
进行编辑:

vim Dockerfile

 
 
   
   
   
   
  • 1

里面的内容为:

FROM java:8
MAINTAINER virtuousone <[email protected]>
VOLUME /tmp
ADD docker-0.0.1-SNAPSHOT.jar app.jar
#RUN bash -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar --spring.profiles.active=prod" ]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

同理,在test中的Dockerfile中编辑内容:

[root@virtuousOne test]# cat Dockerfile 
FROM java:8
MAINTAINER virtuousone <[email protected]>
VOLUME /tmp
ADD docker-0.0.1-SNAPSHOT.jar app.jar
#RUN bash -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar --spring.profiles.active=test" ]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

将打包的spring boot项目,传到api文件夹中。
复制一份,到test中

cp docker-0.0.1-SNAPSHOT.jar  ../test/

 
 
   
   
   
   
  • 1

修改在nginx中的nginx.conf的配置:

vim /data/nginx/conf.d/api.virtuousone.cn.conf 

 
 
   
   
   
   
  • 1

修改nginx对应的转发配置(方式一):是根据宿主主机映射端口,进行访问。

server
    {
        listen  443  ssl  http2;
        #listen 80;
        server_name   test.virtuousone.cn;
        index index.html index.htm ;
        root  /usr/share/nginx/html;
    ssl_certificate /etc/nginx/cert/fullchain.pem;
    ssl_certificate_key  /etc/nginx/cert/privkey.pem;
    ssl_protocols TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_timeout 10m;
    ssl_session_cache builtin:1000 shared:SSL:10m; #SSL 会话缓存类型和大小
    ssl_buffer_size 1400; # 1400 bytes to fit in one MTU
    add_header Strict-Transport-Security max-age=15768000;
    ssl_stapling on;
    ssl_stapling_verify on;
    #如果使用这个AES256+EECDH:AES256+EDH:!aNULL   当nginx开启http2的时候,浏览器会访问不了,chrome浏览器报错内容ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY
     #http://www.chinaz.com/web/2016/0323/515111.shtml 参考这个
    #ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;
    #强烈推荐使用下面这个
    ssl_ciphers         EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

   location / {

            proxy_pass  http://127.0.0.1:10001;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
    #access_log  /home/wwwlogs/access.log;
    location ~*  \.(jpg|jpeg|png|gif|ico|css|js|mp3)$ {
               expires 30d;
    }

}

  • 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

docker部署教程_第18张图片

改变端口号,就可以写到test中
docker部署教程_第19张图片
修改nginx对应的转发配置(方式二):根据容器的IP端口映射访问
1.通过该命令,查询下该项目对应的ID

docker ps -a

 
 
   
   
   
   
  • 1

在这里插入图片描述
2.通过该ID,查询在docker容器中的IP:

docker exec 378cc5f1bee1  cat /etc/hosts

 
 
   
   
   
   
  • 1

docker部署教程_第20张图片
3,修改conf.d里面的配置文件的IP

vim /data/nginx/conf.d/test.virtuousone.cn.conf 

 
 
   
   
   
   
  • 1

docker部署教程_第21张图片
这样就可以了。另一个环境的也是同理这样解决!
以上两种修改conf.d路径下的test.virtuousone.cn.conf的方式,选择一种即可。
第三步,在docker镜像中执行打包上去的项目:
执行api环境中的:

docker build -t  virtuousone/docker-api-springboot:1.0  .

 
 
   
   
   
   
  • 1

执行test环境中的:

docker build -t   virtuousone/docker-test-springboot:1.0  .

 
 
   
   
   
   
  • 1

分别运行两个环境的项目:
api环境

docker run   --restart=always   --name docker-springboot  -p 10000:8080 -d  virtuousone/docker-api-springboot:1.0

 
 
   
   
   
   
  • 1

test环境

docker run   --restart=always   --name docker-test-springboot  -p 10001:8080 -d  virtuousone/docker-test-springboot:1.0

 
 
   
   
   
   
  • 1

重启nginx容器:

docker restart nginx

 
 
   
   
   
   
  • 1

查看nginx中的日志:

 docker logs -f nginx

 
 
   
   
   
   
  • 1

如果日志显示正常,就说明已经发布部署城里了。我们可以进行访问了。
docker部署教程_第22张图片

删除容器和文件夹,才能删掉我们删掉的安装程序。
删除容器具体命令:

docker rm -f 容器名称或容器id

 
 
   
   
   
   
  • 1

删除文件夹命令:

rm -rf  文件夹

 
 
   
   
   
   
  • 1

第七课 基于docker的nginx进行集群部署
基于上一课,这次主要讲解基于nginx的集群部署。
查看之前的容器:

docker ps -a

 
 
   
   
   
   
  • 1

基于之前放上去的springboot的项目的容器,再进行一个实例化。

docker run --restart=always  --name docker-product-springboot -p 10002:8080 -d virtuousone/docker-api-springboot:1.0

 
 
   
   
   
   
  • 1

可以查看该容器在docker中的ip:

docker exec 70708b55281c  cat /etc/hosts

 
 
   
   
   
   
  • 1

docker部署教程_第23张图片
修改nginx中的配置(配置机制一:按照轮询的机制):

cd /data/nginx/conf.d/
vim api.virtuousone.cn.conf

 
 
   
   
   
   
  • 1
  • 2

修改内容如下:

upstream api{
server 127.0.0.1:10000;
server 127.0.0.1:10002;

}

同时,将location中的 proxy_pass 修改为:
proxy_pass http://api;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

docker部署教程_第24张图片
修改ngxin的配置(基于权重的方式进行配置:)

upstream api{
server 127.0.0.1:10000 weight=1;
server 127.0.0.1:10002 weight=2;

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

docker部署教程_第25张图片

其他配置一样,这是第二种配置的方式。
重启ngxin之后,就可以了。集群部署多个项目到此完成了!
进行验证:
可以关闭其中的一个

docker stop 70708b55281c

 
 
   
   
   
   
  • 1

docker部署教程_第26张图片
当关闭两个后,就502报错了。没法访问了。验证完成。

第八课 docker实战-安装rabbitmq及其使用
在docker目录下创建一个rabbitmq

mkdir rabbitmq

 
 
   
   
   
   
  • 1

rabbitmq的安装比较简单。
执行命令

docker run  --restart=always  --name rabbitmq  -e RABBITMQ_DEFAULT_USER=admin \
-e TZ="Asia/Shanghai"   -e RABBITMQ_DEFAULT_PASS=virtuousone \
-v /data/docker/rabbitmq/rabbitmq-data/:/var/lib/rabbitmq  \
-v /etc/localtime:/etc/localtime:ro  -d  rabbitmq:management

 
 
   
   
   
   
  • 1
  • 2
  • 3
  • 4

将其网络添加到open中,就可以进行内网使用了。

docker network connect open_default  rabbitmq

 
 
   
   
   
   
  • 1

查看rabbitmq在open对应的IP

docker exec rabbitmq cat /etc/hosts

 
 
   
   
   
   
  • 1

打开open,就可以先查看Web管理的rabbitmq,即可表示安装成功了。
docker部署教程_第27张图片

                                

你可能感兴趣的:(LINUX,docker教程)