如今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 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 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的组成,再来了解一下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


第二步,格式化硬盘 ;

fdisk /dev/vdb
  • 1

接着 执行 n p 1; wq

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安装及注意事项
接下来就是在购买的云服务器上进行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-compose添加可执行权限

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

第三步:

docker-compose --version
  • 1

如何卸载 docker -compose

rm /usr/local/bin/docker-compose
  • 1

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

vim   docker-compose.yml
  • 1
version: '2'
services:  openvpn:cap_add:- NET_ADMINimage: kylemanna/openvpncontainer_name: openvpnports:- "1194:1194/udp"restart: alwaysvolumes:- /data/openvpn:/etc/openvpn
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

cd 到 openvpn路径下

docker-compose run --rm openvpn ovpn_genconfig -u udp://129.211.130.142
  • 1

初始化

docker-compose run --rm openvpn ovpn_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/openvpn/pki/private/ca.key:输入123456 ```
  • 1
  • 2
  • 3
  • 4

// 开启 openvpn服务

docker-compose up -d openvpn
  • 1

创建一个客户端用户

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

把证书导入到virtuousOne.ovpn中
在openvpn中创建文件夹: mkdir clientovpn

docker-compose run --rm openvpn ovpn_getclient virtuousOne > /data/openvpn/clientovpn/virtuousOne.ovpn
  • 1

同时,去云服务控制台开启端口

win客户端下载一个openVPN的连接工具:地址 https://openvpn.net/index.php/open-source/downloads.html
同时,我们把证书下载下来,放到安装在win的conf目录下


查看哪些是正常启动的:

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的mysql,设置到openvpn的网络中

docker network connect openvpn_default  mysql
  • 1

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

docker exec mysql cat /etc/hosts
  • 1

查看openvpn的网络IP

docker exec openvpn cat /etc/hosts
  • 1


本地计算机开启openVPN GUI

然后就可以远程连接mysql.

在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的openvpn

docker network connect openvpn_default  redis
  • 1

查看redis在openvpn对应的IP

docker exec redis cat /etc/hosts
  • 1

查看docker对应的openvpn对应的IP

docker exec openvpn cat /etc/hosts
  • 1


成功连接后,即可表示安装完成!

第五课–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 MTUadd_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 2812927266@qq.com  -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 certbotlscd 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配置成功的了。


同时,可以在https://www.sslshopper.com/ssl-checker.html
进行检测配置的https的安全级别。

第六课 docker实战-spring boot项目docker容器化的部署
周末学习了下如何在docker中部署spring boot项目。
第一步,是打包。

在data目录下,创建 api文件夹和 test文件夹

mkdir api test
  • 1

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

vim Dockerfile
  • 1

里面的内容为:

FROM java:8
MAINTAINER virtuousone <2812927266@qq.com>
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 <2812927266@qq.com>
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 MTUadd_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

改变端口号,就可以写到test中

修改nginx对应的转发配置(方式二):根据容器的IP端口映射访问
1.通过该命令,查询下该项目对应的ID

docker ps -a
  • 1


2.通过该ID,查询在docker容器中的IP:

docker exec 378cc5f1bee1  cat /etc/hosts
  • 1


3,修改conf.d里面的配置文件的IP

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


这样就可以了。另一个环境的也是同理这样解决!
以上两种修改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 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


修改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


修改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

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

docker stop 70708b55281c
  • 1


当关闭两个后,就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

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

docker network connect openvpn_default  rabbitmq
  • 1

查看rabbitmq在openvpn对应的IP

docker exec rabbitmq cat /etc/hosts
  • 1

打开openvpn,就可以先查看Web管理的rabbitmq,即可表示安装成功了。

                                </div>

docker部署教程相关推荐

  1. 码神之路博客部署教程【完整版】|基于Linux的Docker部署教程|非常详细

    说明 前记:最近跟着哔站码神之路做了一个SpringBoot练手项目,第一次操作碰到了很多困难和问题,尤其是在部署部分,走了很多弯路,这里写下自己的部署过程,供大家参考,也欢迎大家提出宝贵的意见. 哔 ...

  2. 码神之路博客部署教程【完整版】基于Linux的Docker部署教程非常详细

    说明 前记:最近跟着哔站码神之路做了一个SpringBoot练手项目,第一次操作碰到了很多困难和问题,尤其是在部署部分,走了很多弯路,这里写下自己的部署过程,供大家参考,也欢迎大家提出宝贵的意见. 哔 ...

  3. docker部署springboot工程

    #springboot工程 docker部署教程 服务器环境 192.168.2.157 centos7 docker jdk8 部署步骤 登陆服务器,创建属于自己的账户,如gddxsjy(添加用户命 ...

  4. docker 部署_Nginx K8s + Docker 部署 ,虚拟机部署教程。

    Nginx K8s + Docker 部署 ,虚拟机部署教程! Linux 虚拟机 部署 1.下载nginx: http://nginx.org/download/ 2.选择一个版本进行下载: wge ...

  5. Docker系列之RabbitMQ安装部署教程

    Docker系列之RabbitMQ安装部署教程 因为学习RabbitMQ需要,需要安装RabbitMQ,网上找资料,RabbitMQ官方提供了window版.Linux版.Docker版的管理页面,为 ...

  6. un直连服务器教程,unRAID下使用Docker部署iCloud直连相片备份服务

    作者:高丽肠 鉴于有很多朋友不喜欢看一堆叨逼叨的文字 , 伸手党和时间管理大师们可以直接从 " 部署步骤 " 开始看 . 碎碎念 自从 2018 年左右上车买了一台星际蜗牛之后 , ...

  7. Docker部署Redis 图文教程

    快过年了,这里老王提前和大家说声新年快乐~ 年末项目收尾工作比较多,有段时间没有更新,今天和大家分享下使用docker部署redis,为大家在自己的服务器上做一些redis相关的功能开发时,提供服务支 ...

  8. docker部署(使用docker-compose)手把手教程

    此文章需要有一定的docker知识基础上,进行docker线上部署. 一.docker一些基础命令 docker build -t ubuntu:15.10 . -t表示 tag .表示当前文件doc ...

  9. 宝塔面板Docker部署Bitwarden密码管理器 - 保姆级教程

    本文作者: 南风 文章标题:宝塔面板Docker部署Bitwarden密码管理器 原文地址:https://www.nfxwblog.com/archives/40.html 版权说明:若无注明,本文 ...

最新文章

  1. 经验原石_行家第一次入手翡翠原石并不是为了一夜暴富
  2. Oracle 9i和10g安装后的基本环境与服务
  3. Oracle ORA-01033: ORACLE initialization or shutdown in progress 错误解决办法Windows版(手贱强制重启电脑的后果)...
  4. java 坦克大战 教程_马士兵老师/坦克大战/java基础/网络编程 (9.1G)视频教程下载...
  5. 打开.class文件
  6. 高拍仪是否支持TWAIN方式的测试方法
  7. 形容java工作者的句子_形容工作态度的句子
  8. 笔记-项目人力资源管理-制订人力资源计划-矩阵图
  9. 计算机笔记本有wife但显示未连接怎么办,电脑无线网络显示未连接怎么办
  10. 给语音识别文本加上标点符号
  11. windows下hadoop安装时出现error Couldn‘t find a package.json file in “D:\\hadoop\hadoop-2.7.7\\sbin“问题
  12. 亚马逊平台的优势有哪些?
  13. java非必传参数怎么处理_SpringBoot 设置传入参数非必要的操作
  14. Service ‘Jenkins‘ (Jenkins) failed to start. verify that you have sufficient privileges to start
  15. 在中断程序里修改全局变量的童鞋注意啦~(C中的volatile作用 )
  16. A - Eddy‘s AC难题(C语言)
  17. 多层感知器的基本特征
  18. ibm服务器电脑维修部电话,ibm有哪些电脑维修点 ibm电脑维修方法及维修点介绍【图文】...
  19. 100个python算法超详细讲解:双色球
  20. C语言初级:Hello world、数据类型、变量常量、字符串、转义字符、注释、选择语句、循环语句

热门文章

  1. 2021-11-13
  2. 微信公众号python_wechat: 微信 Python SDK,支持微信公众号以及企业号的上行消息及 OAuth 接口...
  3. 公司庆典活动策划方案怎么写?需要把握6个方面
  4. EverBox开发笔记-2-iCloud-KeyValueStore
  5. 和腾讯面试官聊了一个小时人生后,我竟意外的收到Java的offer
  6. 用js 在页面上,设置多个按钮,点击当前按钮时,当前按钮文字变为“哈哈”,其他未点击的按钮文字变为“呜呜”。
  7. Xilinx HLx 2017.1 与VS 2017兼容问题解决
  8. 开放源码易语言摄像头拍照自动重命名拍学籍照和证件照
  9. word计算机二级视频教程,计算机二级Office入门及上机实践视频教程之Word篇
  10. 2016/10/31 宝贝儿蛋,万圣节快乐。