进度记录【Day3】docker命令/容器数据持久化/nginx架构

Day 3

一、docker常用命令

重启docker服务(有时候容器启动失败,需要重启docker)

systemctl restart docker

1. docker 信息

docker version

可以看到Client和Server的版本信息。

docker info

容器的数量和状态等信息。

docker run --help

查看 docker 启动容器命令的所有参数。

docker --help

查看 docker 的所有命令和解释。

2. 镜像操作

docker images

查询镜像仓库
docker镜像仓库
REPOSITORY 仓库
TAG 标签(版本,同一种镜像可能有多种版本,默认是latest)
IMAGE ID (镜像ID,唯一的)
CREATED (创建日期,上一次修改后的日期)
SIZE (镜像的大小)

docker images -q

查询所有镜像的ID

docker search 镜像名称[:TAG]

默认是在docker hub(官方的docker镜像仓库,国外速度较慢) 里面搜索
配置阿里云镜像加速器后,那么就是在阿里云镜像仓库中搜索

docker pull 镜像名称[:TAG]

不加TAG,默认下载latest

docker rmi 镜像名|镜像ID

删除镜像之前先把该镜像运行的容器都删掉

docker rmi $(docker images -q)

删除所有镜像,原理是查出所有镜像的ID作为删除命令的参数

3. 容器操作

docker run 镜像ID

运行一个镜像为容器(同一个镜像可以运行为多个容器,容器和容器之间是互相隔离的,就像Java中的一个类可以创建多个对象一样)
注意!docker run 命令后面又许多参数可选:
-d: 后台运行容器,并且返回容器ID
-i: 以交互式模式运行容器,通常与-t一起使用
-t: 为容器重新分配一个伪输入终端,通常与-i一起使用,直接-it就行
Linux和容器的终端
终端1: 是Linux的输入终端,这里输入命令是发给Linux系统的
终端2:是容器的伪输入终端,这是输入命令是发给容器的
使用exit可以退出容器的伪输入终端,回到Linux的输入终端
-p:指定端口映射,格式是(宿主机端口:容器内端口)
–name 容器名称:作用是为容器指定一个名称,如果不指定,会又默认名称
-e MYSQL_ROOT_PASSWORD=root:给容器设置一个环境变量

docker exec -it 容器ID bash

进入容器中查看和操作,此时会打开一个新的伪输入终端,与容器进行交互。

docker stop 容器ID

停止一个正在运行的容器

  • kill和stop的区别是:stop是安全退出,kill是强制退出。

docker start 容器ID

启动一个已经被停止运行的容器

docker restart 容器ID

重启一个容器(stop+start)

docker ps

查看正在运行的容器

docker ps -a

查询所有正在运行的容器和已经停止(历史运行过)的容器

docker ps -q

查看正在运行的容器ID

docker ps -a -q

查询所有正在运行的容器和已经停止(历史运行过)的容器的ID

docker kill 容器ID

杀死一个正在运行的容器

docker rm 容器ID

删除一个容器(要求容器必须处于停止状态)

docker rm -f 容器ID

删除一个容器(强制删除,容器可以是运行状态)

docker rm -f $(docker ps -a -q)

删除所有容器

4. 主机和容器之间的文件传输

docker cp 本地文件路径 容器ID全称:/容器路径

从本地复制文件到容器

docker cp 容器ID全称:/容器文件路径 本地路径

从容器复制文件到本地

docker inspect -f=’{{.Name}} {{.NetworkSettings.IPAddress}} {{.HostConfig.PortBindings}}’ $(docker ps -aq)

显示主机和容器的端口映射情况

二、docker容器数据持久化

  • 将容器内的数据存储在容器外面,即存储在容器所在的主机里面。

方式1:bind mount(绑定一个文件或者目录)

将主机的一个目录或文件绑定到容器,但是这种方式的缺点是可移植性差,因为不同操作系统文件结构是不一样的,例如Window和Linux目录结构有很大差别。

eg.使用方式

docker run -d -p 8080:8080 -v /root/docker/tomcat/:/usr/local/tomcat/webapps 容器ID
-v后面的主机路径必须写全路径,即从/根路径开始写
如果主机路径不存在,会自动创建
如果容器内路径不存在,也会自动创建
如果容器内路径已经有内容,主机路径目录下的内容会覆盖容器内的内容
用这个绑定目录或文件后,就不需要使用cp命令了,改了主机目录下的内容就等同于改了容器内的目录下的内容

进入容器中查看

docker exec -it 容器ID bash
cd /usr/local/tomcat/webapps
可以看到主机/root/docker/tomcat/目录里的内容了

方式2:volume,挂载卷

  • volume也是绕过容器的文件系统,直接将数据写到主机上面,只是volume是被docker管理的,docker里面所有volume都在主机的/var/lib/docker/volumes目录中。
  • volume挂载卷的优点:
    可移植性好;
    可以复用,多个容器可以共享一个挂载卷;
    挂载卷不会覆盖容器里面的内容,而是将容器里面的内容转移到挂载卷里面,后面容器内产生的数据都会写入挂载卷。

docker volume --help //查看volume如何使用

volume 使用帮助
create 创建一个挂载卷
inspect 显示一个或多个挂载卷的详细信息
ls 显示挂载卷的列表
prune 删除所有不被使用的挂载卷
rm 删除一个或多个挂载卷
eg.使用挂载卷方式

docker run -d -p 端口映射 -v 挂载卷name:目录 容器ID
docker run -d -p 3306:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root 容器ID

bind mount 和 volume 语法的区别

两者都是通过 -v 参数指定映射关系;
bind mount 后面跟的是主机的一个目录,且需要写全路径,从/开始写;
volume后面跟的是挂载卷名字;
如果-v后面没有/则认为是volume;
如果-v后面有/则认为是bind mount 挂载一个目录。

三、架构

一个tomcat最多只能150个并发量/秒,单节点tomcat适用于小型管理系统,大型互联网项目可以搭建集群。

1、基于docker搭建Nginx+tomcat+mysql集群方案

  • nginx代理服务器
    正向代理:用于爬长城
    反向代理:负载均衡
    对于用户来说,只有一个代理服务器。

  • 前提
    nginx镜像:做代理服务器
    tomcat镜像:做web服务器
    mysql镜像:做数据库服务器
    nginx配置文件

  • 步骤
    1、启动一个mysql数据库容器,并导入数据

docker volume create mysql_easybuy
docker run -d -p 3306:3306 -v mysql_easybuy:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root 镜像ID
用WinSCP吧sql数据库文件拷贝到mysql_easybuy这个提前创建好的volume中(步骤参考day 2 ,较麻烦,并且可能乱码);或用navicat直接新建easybuy数据库并导入sql文件

2、启动三个tomcat容器并绑定项目和mysql
将web项目文件提前准备好,放入虚拟机的tomcat1/2/3文件夹下;EasyBuy.war项目文件修改了主页标题,便于观察使用到的节点,并且修改了sql地址映射到虚拟机地址而不是localhost。

docker run -d -p 8080:8080 -v /root/docker/tomcat/tomcat1:/usr/local/tomcat/webapps 镜像ID
docker run -d -p 8081:8080 -v /root/docker/tomcat/tomcat2:/usr/local/tomcat/webapps 镜像ID
docker run -d -p 8082:8080 -v /root/docker/tomcat/tomcat3:/usr/local/tomcat/webapps 镜像ID

3、启动一个nginx容器并配置负载均衡

  • 拉取nginx镜像

docker search nginx
docker pull nginx
如果拉取镜像速度过慢或失败(从国外仓库/阿里云镜像仓库),可以用网易云仓库
docker pull hub.c.163.com/library/nginx:latest

  • 在docker目录下创建nginx目录并将配置文件nginx.conf拷贝进去

  • 启动的nginx容器没有挂载nginx.conf

docker run -d -p 80:80 nginx
docker exec -it nginx容器ID bash
此时/etc/nginx/目录下的nginx.conf配置文件还没有和主机里的nginx.conf文件绑定/挂载。
不能直接在容器里修改nginx.conf文件,因为伪终端里没有vim,需要安装。

  • 启动的nginx容器挂载nginx.conf

docker run -d -p 80:80 -v /root/docker/nginx/nginx.conf:/etc/nginx/nginx.conf nginx
docker exec -it nginx容器ID bash
此时主机上的nginx.conf覆盖了容器中的配置文件

  • 配置nginx(编辑nginx.conf配置文件)

vim nginx.conf
移动光标到最后一个大括号的上一行,按i进入编辑模式(192.168.87.101为主机ip地址,根据自己的修改)
注意配置代码每行之前的空格,美观,CSDN博客代码段没显示出来
upstream easybuy{
server 192.168.87.101:8080;
server 192.168.87.101:8081;
server 192.168.87.101:8082;
}
server{
listen 80;
server_name 192.168.87.101;
location /{
proxy_pass http://easybuy;
}
}
ese退出编辑模式,wq!退出并保存

  • 重启nginx容器

docker restart 容器ID

  • nginx的负载均衡算法
    轮询:依次从tomcat集群里面发送请求,即轮流询问。
    加权轮询:给tomcat节点加权重参数,可以设置某个节点获取访问的次数多或少,根据tomcat服务器性能来配置。
    加权轮询配置方法:在上面的nginx.conf文件中,
    upstream easybuy{
    server 192.168.87.101:8080 weight=xxx; (这里加上权重)
    server 192.168.87.101:8081 weight=xxx; (这里加上权重)
    server 192.168.87.101:8082 weight=xxx; (这里加上权重)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值