Docker

流程图

在这里插入图片描述

Docker 是什么?

Docker 属于 Linux 容器的一种封装(容器
仓库: 别人做好的现成的镜像,都放在仓库里
镜像: 自己要用哪个镜像,就先拉到本地来。镜像就相当于还没激活的容器。
容器: 容器就是跑起来的镜像,就是一个完整的工作环境
在这里插入图片描述

Docker 的主要用途?

(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。

(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。

(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

(可在普通服务器上建立上百个docker实例)

Docker 的安装?

Docker入门教程

容器与虚拟机比较?

在这里插入图片描述

什么是Docker仓库?

(1)仓库是集中存放镜像的场所
(2)仓库注册服务器上往往放着多个仓库,每个仓库又包含多个镜像,每个镜像 有不同的标签,仓库分为公开仓库(public)和私有仓库(private)
(3)push镜像到仓库,从仓库pull镜像
在这里插入图片描述

CentOS 上安装 Docker

yum -y update   //更新yum资源
yum install docker -y   //安装 Docker
systemctl start docker.service  //启动 Docker
systemctl status docker.service    //查看docker的状态,看到那个 active 就表示已经在运行啦
yum install iproute ftp bind-utils net-tools wget -y   //围绕 Docker 的正常使用,还需要安装一些配套工具。

Docker在开发部署流程中的应用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

提交镜像到仓库的步骤

参考的博主地址

  1. 注册账号
    仓库位于 hub.docker.com 上,为了提交新的镜像,肯定要有账号才行,所以第一步是注册账号。
    比如我就注册了名为lgc的账号。

注意: 这里命名很重要,因为在提交镜像的时候,由于不是官方的,必须在提交的时候用 : lgc/tmall 这样的命名格式,而不能简单地命名为tmall 。(标准化命名)

  1. 登录
    这里说的登录,不是在 hub.docker.com 网站上,而是在 docker 后台进行登录。
docker login     //后台登录docker

然后输入账号密码就行了。注意,账号不是邮箱地址哦,是lgc

  1. 将本地容器打包成本地镜像
    (1)当是从仓库pull下来的镜像,并跑过环境时,在docker run()的时候会创建和命名一个容器-------->即是有容器名的情况是执行下面代码
docker commit 容器名  镜像仓库名:镜像标签名    //打包镜像放到本地(commit,对容器做了修改后,把改动后的容器,再次转换为镜像)
docker images      //可以查看到你打包到本地镜像
docker tag 本地镜像仓库名(或用镜像id):本地镜像标签名   远程仓库名名:远程镜像标签名   //改成标准化名字
docker commit how2jtmall how2j/tmall:latest
docker images 
docker tag how2j/tmall:latest how2j/tmall:now    //改了标签名
docker images //再次查看本地镜像,发现已打包好镜像

在这里插入图片描述
这里的how2j相当于我的账号lgc,how2j只是用来演示,实际中要改成lgc

(2)当不知容器名时,执行下面的代码:

docker build -t how2j/webapp  //使用docker build来编译镜像
                                //-t 用于给镜像做标签,/ 给容器做标签
docker images                //再次查看本地镜像,发现已打包好镜像
docker login
docker tag cbe52807fcad lgc/webapp:latest        //用tag改成用户名lgc否则拒绝访问,cbe52807fcad是镜像id
docker push lgc/webapp:latest   // 推送镜像到仓库  
  1. 推送镜像到仓库 (push)
docker push how2j/tmall:now

若用我的账号lgc

docker push lgc/tmall:now

从仓库Pull镜像,并跑起来

  1. 配置dns
    DNS设置是什么?有什么作用?

dns只是用作域名解析的,即把你输入的网址解析成为ip地址,然后通过ip地址去访问。

其实你设置的DNS地址也是个服务器.上面存储了好多网站名字和具体的IP地址对应关系.设置了DNS你就可以直接从服务器那里获取你要访问的网站的IP地址,否则,你要上网站,你的电脑就会找不到你要的站,当然也上不了.

nslookup www.baidu.com   //发现它使用的域名服务器地址是192.168.84.2

这样是不行的,后面 docker 运行会出问题。
所以我们把它改为公用的域名服务器地址,这里选用腾讯的公共DNS地址119.29.29.29

vi /etc/resolv.conf 
# Generated by NetworkManager
search www.tendawifi.com
nameserver 119.29.29.29
nameserver 182.254.116.116
nslookup www.baidu.com   //可以看到此时域名服务器地址已经是 119.29.29.29 了

在这里插入图片描述

  1. 配置镜像加速器
    hub.docker.com 在国外,要拉到本机会比较卡。为了提高网络速度,我们需要配置镜像加速器。
    直接运行如下代码:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://hvmf8r55.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker        //重启docker

然后通过如下命令查看 daemon.json 是否已经生效了

tail /etc/docker/daemon.json
  1. 拉取镜像
docker pull how2j/tmall      //从 hub.docker.com 上拉下来镜像
  1. 运行镜像
docker run -dit --privileged -p21:21 -p80:80 -p8080:8080 -p30000-30010:30000-30010 --name how2jtmall how2j/tmall:latest /usr/sbin/init

这个命令看着长,其实不难,我挨个挨个来给大家分解:
(1)docker run 表示运行一个镜像
(2)-dit 是 -d -i -t 的缩写。 -d ,表示 detach,即在后台运行。 -i 表示提供交互接口,这样才可以通过 docker 和 跑起来的操作系统交互。 -t 表示提供一个 tty (伪终端),与 -i 配合就可以通过 ssh 工具连接到 这个容器里面去了
(3)–privileged 启动容器的时候,把权限带进去。 这样才可以在容器里进行完整的操作
(4)-p21:21 第一个21,表示在CentOS 上开放21端口。 第二个21 表示在容器里开放21端口。 这样当访问CentOS 的21端口的时候,就会间接地访问到容器里了
(5)-p80:80 和 21一个道理
(6)-p8080:8080 和21 一个道理,在本例里,访问的地址是 http://192.168.84.128:8080/tmall/, 这个 192.168.84.128 是CentOS 的ip地址,8080是 CentOS 的端口,但是通过-p8080:8080 这么一映射,就访问到容器里的8080端口上的 tomcat了
(7)-p30000-30010 和21也是一个道理,这个是ftp用来传输数据的
(8)–name how2jtmall 给容器取了个名字,叫做 how2jtmall,方便后续管理
(9)how2j/tmall:latest how2j/tmall就是镜像的名称, latest是版本号,即最新版本
(10)/usr/sbin/init: 表示启动后运行的程序,即通过这个命令做初始化

  1. 检查端口
netstat -anp|grep 8080   //可以发现8080端口被启动了,而且是交给了 docker 在使用~~~

在这里插入图片描述

  1. 访问项目地址
    http://192.168.84.128:8080/tmall/
ip address        //获取ip地址(看ens33)

跑起来之后,只有图片,没有数据,研究了一下。。。发现是容器里数据库起慢了导致的,需要重启tomcat才可以解决。 解决步骤:
(1)先进入容器(就是进入启动的 运行Tomcat的Linux)

docker exec -it 容器名 主目录名
docker exec -it how2jtmall /bin/bash

使用 attach会卡死,所以用exec。。。
在这里插入图片描述

(2)然后重启 tomcat

/usr/local/tomcat8/bin/shutdown.sh      //注意所在目录
/usr/local/tomcat8/bin/startup.sh
exit    //退出容器

容器的常用操作

docker ps -a            //查询所有的容器
docker rm how2jtmall      //删除容器,how2jtmall是容器名

网络恢复

虚拟机一旦重启,或者关机过,那么就会出现可以访问 Linux,但是无法访问里面的 Docker的情况。 可以在 CentOS里做如下事情:

vi /etc/sysctl.conf
或者
vi /usr/lib/sysctl.d/00-system.conf
添加如下代码:
net.ipv4.ip_forward=1
重启network服务
systemctl restart network
查看是否修改成功
sysctl net.ipv4.ip_forward
如果返回为“net.ipv4.ip_forward = 1”则表示成功了

在这里插入图片描述
在这里插入图片描述
喜欢的朋友可以关注我的个人公众号,后台回复java资料可免费领取资源。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值