docker 从安装到使用

今天把我遇到的关于使用docker的一些磕磕绊绊记录一下,以后可以回过头来再复习复习,如果能帮得到各位,那也是好的嘛.
因为本篇文档介绍的是从安装到部署,再到采坑.可能篇幅比较长,您可以挑着有用的看
首先从安装docker开始, 我这边用的centos7先贴一下我的环境

Linux  3.10.0-957.27.2.el7.x86_64 #1 SMP Mon Jul 29 17:46:05
UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

这是我的环境,话不多说 开始干
我这里使用的是yum 安装的docker
执行:
yum update

安装docker

  • 安装docker 执行:yum install docker

  • 设置docker 的开机自启动 并启动docker
    systemctl enable docker
    service docker start

  • 这样我们的docker 基本就完成了,接下来修改镜像资源地址,改成阿里的,这样下载地址会快一些
    路径为/etc/docker/这个 下面有的文件是 daemon.json
    打开之后添加这么一行

    {
    "registry-mirrors": ["https://2rxr73g1.mirror.aliyuncs.com"]
    }
    注意:这里的里面的地址是我注册了阿里云之后的我自己的,您可以也尝试注册一下,这里就不赘述了

    重新加载 systemctl daemon-reload


镜像

关于镜像,其实就是可以理解为我们平时用各软件的时候的安装包.但我们安装完之后,就可以使用它的功能,或者按照我们面向对象的概念来说就是:镜像就是一个个的类,而容器就是一个个的类实例
这里我是拉取了redis镜像和tomcat镜像

 redis : docker pull redis 
 tomcat : docker pull tomcat 
 这样就把这两个镜像拉取下来了,这里注意的是如果不指定版本,会默认下载最新的也就是latest版本

查看目前拥有的镜像:docker images 就可以列出来了
接下来我们启动一下 这两个镜像:

  • 启动redis

执行:docker run -d -p 6379:6379 --name myredis f7302e4ab3a8
解释一下这个命令: -d 是后台运行 -p是端口映射 主机端口:容器端口
后面的- -name 是给容器起个名字 最后面是我的镜像id

当我们执行完run 之后,容器就起来了
我们可以通过docker ps 查看 已经启动的容器, 通过docker ps -a 查看所有容器,包括停止的容器

这样,redis就已经可以使用了,假设说您需要一个带有密码的redis 那么创建容器的时候就应该这样写命令:docker run -d -p 6379:6379 --name myredis f7302e4ab3a8 --requirepass "123456"
这样就是一个带有密码的redis 密码为123456

  • 启动tomcat

和redis 一样 也是 执行这个命令
docker run -d -p 8080:8080 --name mytomcat 96c4e536d0eb
这样我们的 redis 和tomcat 就全部起来了,已经可以正常使用了
那么问题来了,我该怎么把我自己的war 或者一些静态html 放到tomcat 下然后让我访问呢???
这里介绍两种方式:
第一种: 把我们自己的war/或者文件 直接通过docker cp 的形式,拷贝到 tomcat/webapps下
重启容器,就跟我们正常使用tomcat 一样
命令如下:
查看tomcat的路径:docker exec -it 1170916773cf /bin/bash 1170916773cf 是容器id
结果是:/usr/local/tomcat
那么我们可以执行:docker cp app.war 1170916773cf :/usr/local/tomcat/webapps/
这样就把我们的war 包放到了容器的tomcat 里面了,重启一下容器, 完事!
第二种: 直接通过镜像运行我们自己的项目
比如我们创建一个文件夹 名称为tomcatfile
然后在这个文件下创建一个Dockerfile ,把我们的war 放到统计目录下
Dockerfile 内容为:

 from tomcat:latest
 copy app.war /usr/local/tomcat/webapps/

两行完事,然后在tomcatfile这个文件夹下,执行命令:

docker build -t mytomcat .
千万注意啊,后面有个点 ,完事就创建好了自己的镜像,然后可以和前面一样使用docker run 进行容器启动了

删除镜像:docker rmi 镜像id
想要删除镜像,必须是该镜像没有被任何容器使用,不管是启动的容器还是停止的容器

容器

刚刚说了镜像就像是我们java里面的类,而容器就是我们根据类new 出来的实例
上面说镜像的时候我们提到过: 可以通过docker ps 查看 已经启动的容器, 通过docker ps -a 查看所有容器,包括停止的容器
可以手动的启动容器/停止容器

   启动:docker start   容器名称或容器id
   停止:docker stop    容器名称或容器id
   重启:docker restart 容器名称或容器id
   删除容器:docker rm   容器名称或容器id

至此docker的安装 到使用就写完了,接下来我们部署一下springboot 项目

  1. 创建一个springboot 项目并且打包成jar
    我这里使用最简单的一个springboot项目,只是实现成功部署并且正常访问即可,文件目录特别简单什么都么有,只有一个启动类,一个页面
    在这里插入图片描述我们要的是部署完了之后可以正常跳转hello页面
    顺便贴一下hello.html 以便一会验证
    在这里插入图片描述

  2. 将以上项目进行打包 形成一个demo-0.0.1-SNAPSHOT.jar

  3. 在服务器上的创建一个文件夹 我的目录为:/dockerfiles/demo/ 你可以自行创建
    cd /dockerfiles/demo/ 切换到该目录
    touch Dockerfile 创建文件

  4. dockerfile 内容如下
    FROM frolvlad/alpine-oraclejdk8:slim
    copy demo-0.0.1-SNAPSHOT.jar app.jar
    EXPOSE 9001
    ENTRYPOINT [ "sh", "-c", "java -jar app.jar" ]
    就这么几行

  5. 上传我们刚刚打好的jar包到/dockerfiles/demo/文件夹下

  6. 现在这个文件夹下有两个东西,一个是我们的jar包.一个是Dockerfile文件

  7. 执行命令:docker build -t demo .

  8. 查看我们的镜像 docker images 就会发现会有一个我们刚刚创建的镜像,名称是demo

  9. 执行命令:docker run -d -p 9002:9002 --name demo demo/06c2691ebdb4说明一下:

    “- -name demo demo/06c2691ebdb4” --name 是给容器起得名称为demo(随意). 后面的demo 是镜像的名称
    06c2691ebdb4 是镜像的id,我们可以使用镜像名称或者镜像id 都可以

  10. 执行完改命令之后我们的容器就已经运行起来了,你可以使用docker ps 查看

  11. 通过网页访问:192.168.134.130 是我的服务器地址
    在这里插入图片描述
    这样我们自己的springboot项目就算是部署完成了,大功告成!


说一下防火墙的坑

  • 端口号开放问题

我们通过了端口映射之后, docker 会自动的将该端口的防火墙打开,但是当你执行命令,查看防火墙开启的端口号的时候,并没有存在于列表中
例如我刚刚的9002 端口,并没有开放,也是可以从页面访问的
在这里插入图片描述

  • 日志 No route to host 问题
    当我们的防火墙是开启的时候,正常部署完了之后你会发现,容器也启动了,但是访问的时候日志就报错了.关键词就是这样的 No route to host ,这个我百度了一下,大神们说执行完这个命令就行了

    nmcli connection modify docker0 connection.zone trusted
    systemctl stop NetworkManager.service
    firewall-cmd --permanent --zone=trusted --change-interface=docker0
    systemctl start NetworkManager.service
    nmcli connection modify docker0 connection.zone trusted
    systemctl restart docker.service
    结果确实好用

docker容器启动又停了的问题

  • 首先看你在执行 docker run 的时候有没有 -d 这个参数 没有的话需要加上

  • 通过查看docker容器的启动日志来检查是不是我们的程序在启动过程中报错了,导致没有启动成功

  • 查看日志的方法
    docker容器日志查看

     docker logs -f -t --tail 100 demo
     查看demo容器 指定2019-08-27之后的日志,只显示最后100行:
     docker logs -f -t --since="2019-08-27" --tail=100 demo
     查看demo容器最近10分钟的日志:
     docker logs --since 10m demo
     查看某时间之后的日志:
     docker logs -t --since="2019-08-27T14:00:00" demo
     查看指定时间段日志:
     docker logs -t --since="2019-08-27T14:00:00" --until "2019-08-27T15:00:00" demo
     将错误日志写入文件:
     docker logs -f -t --since="2019-08-27" demo | grep error >> demolog_error.txt
    
    

至此,基本上从安装到部署就完事了,如果哪里有不正确的地方还希望大神指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值