Docker

当大家点开这篇博客的时候,相信大家对docker多多少少也有些认识了,最近学习docker这门技术,略微有些心得,写篇文章记录一下学习过程并帮大家跳过一些坑。

docker的核心有两个,一个是容器,一个是镜像。

镜像:可以理解为是只读的文件,我个人理解为是应用程序,例如tomcat,mysql,redis等

容器:可以理解为迷你的linux系统,是由docker创建的,镜像就是运行在容器中,容器之间也是彼此隔离的,比如我可以在docker中运行几个mysql服务

理解docker的核心概念之后我们进入实战

Dokcer实战

安装Docker

安装Docker很简单,windows系统安装的是Docker Desktop 点击下载(这是从官网扒下来的链接大家放心下载,也可以直接去官网下 Docker官网)

安装过程也很简单,没有多余的配置,一直下一步就可以了,这里就不放安装过程截图了_

装好docker之后,启动docker desktop,然后在命令提示符中输入,docker version,出现

  1. C:\Users\10419>docker version
  2. Client:
  3. Cloud integration: 1.0.14
  4. Version: 20.10.6
  5. API version: 1.41
  6. Go version: go1.16.3
  7. Git commit: 370c289
  8. Built: Fri Apr 9 22:49:36 2021
  9. OS/Arch: windows/amd64
  10. Context: default
  11. Experimental: true
  12. Server: Docker Engine - Community
  13. Engine:
  14. Version: 20.10.6
  15. API version: 1.41 (minimum version 1.12)
  16. Go version: go1.13.15
  17. Git commit: 8728dd2
  18. Built: Fri Apr 9 22:44:56 2021
  19. OS/Arch: linux/amd64
  20. Experimental: false
  21. containerd:
  22. Version: 1.4.4
  23. GitCommit: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
  24. runc:
  25. Version: 1.0.0-rc93
  26. GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
  27. docker-init:
  28. Version: 0.19.0
  29. GitCommit: de40ad0

说明docker已经安装好了

利用docker安装tomcat

进入docker官网查找需要安装的镜像,这里直接安装tomcat

  1. C:\Users\10419>docker pull tomcat
  2. Using default tag: latest
  3. latest: Pulling from library/tomcat
  4. bd8f6a7501cc: Pull complete
  5. 44718e6d535d: Pull complete
  6. efe9738af0cb: Pull complete
  7. f37aabde37b8: Pull complete
  8. b87fc504233c: Pull complete
  9. 8bf93eef8c9e: Pull complete
  10. 8d33b4df10ef: Pull complete
  11. 2d77aa1a5442: Pull complete
  12. baa04cc4071d: Pull complete
  13. a3a752513415: Pull complete
  14. Digest: sha256:0509684774ac53d8b152f4a50dd92889218a8633c0feddb4b35d092e55cd215d
  15. Status: Downloaded newer image for tomcat:latest
  16. docker.io/library/tomcat:latest

如果下载速度慢的话,可以换成国内的下载镜像

然后我们可以使用命令查看docker的镜像:docker images (images就是docker镜像的意思)

  1. C:\Users\10419>docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. tomcat latest c0e850d7b9bb 2 weeks ago 667MB
  4. hello-world latest d1165f221234 2 months ago 13.3kB

启动tomcat

启动tomcat只需要输入命令:docker run -p 8000:8080 tomcat

(-p 8000:8080 的意思就是tomcat在容器内启动的端口是8080,把8080这个端口映射到 windows的8000端口上)

C:\Users\10419>docker run -p 8000:8080 tomcat

Tomcat 404报错解决

启动成功之后访问localhost:8000,报错404

这里有个坑,先使用命令docker ps 查看当前运行的容器

  1. C:\Users\10419>docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 54f85f2559cd tomcat "catalina.sh run" 6 minutes ago Up 6 minutes 0.0.0.0:8000->8080/tcp, :::8000->8080/tcp silly_morse

找到container ID,这个是容器的ID,是我们和容器交互的标识,使用命令docker exec -it <container ID> /bin/bash 就可以进入容器

root@0be1774e1e5e:/usr/local/tomcat#

使用命令 ls查看当前文件夹目录

C:\Users\10419>docker exec -it 54f85f2559cd /bin/bash

  1. root@54f85f2559cd:/usr/local/tomcat# ls
  2. BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
  3. CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work

注意这里有两个文件夹 webapps和webapps.dist

使用命令ls -1 webapps 发现文件夹为空

root@b375a81f10ca:/usr/local/tomcat# ls -1 webapps

使用ls -1 webapps.dist发现原本webapps中的文件全在webapps.dist中

  1. root@54f85f2559cd:/usr/local/tomcat# ls -1 webapps.dist
  2. ROOT docs examples host-manager manager

解决办法就是把webapps.dist合并到webapps中

  1. root@54f85f2559cd:/usr/local/tomcat# mv webapps.dist/* webapps/
  2. root@54f85f2559cd:/usr/local/tomcat# rm -rf webapps.dist/

但是这样并不能一劳永逸,重启之后还是会报错404,tomcat还是会有webapps.dist这个文件夹

使用命令docker ps记下刚刚修改好的tomcat的容器id

  1. C:\Users\10419>docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 54f85f2559cd tomcat "catalina.sh run" 3 minutes ago Up 3 minutes 0.0.0.0:8000->8080/tcp, :::8000->8080/tcp silly_morse

解决办法:把修改好webapp的tomcat镜像提交一个新的本地镜像

  1. C:\Users\10419>docker commit -m="修复404" -a="fengzeng" 54f85f2559cd new-tomcat:1.0
  2. sha256:99efe959f94c616aad213fc4c4b899cd1d16faac7511834ee5942fbd6693e8c6

(-m 是本次提交的内容, -a是提交的作者, 54f85f2559cd是修改好的tomcat的容器id, new-tomcat是新的镜像名称,:1.0是版本号)

提交完成后,查看我们的镜像仓库docker images

  1. C:\Users\10419>docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. new-tomcat 1.0 99efe959f94c 33 seconds ago 672MB
  4. tomcat latest c0e850d7b9bb 2 weeks ago 667MB

就能看到我们刚刚提交的new tomcat了。

然后我们启动它,docker run -p 8000:8080 99efe959f94c(也可以写成new-tomcat:1.0,注意一定要带上版本号,不然默认的是latest)

再次访问localhost:8000

访问成功!!!

在docker部署自己的html页面

随便建一个文件夹,在里面放两个文件,一个是需要部署到tomcat webapps上的文件,一个是Docker的自定义镜像文件



在docker-web文件夹中新建一个index.html 在里面写上<h1>hello world</h1>就ok

然后在上一级目录新建一个Dockerfile文件,不能有任何后缀

在里面写上

  1. #使用new-tomcat:1.0部署这个文件
  2. From new-tomcat:1.0
  3. #等同于命令 cd /usr/local/tomcat/webapps
  4. WORKDIR /usr/local/tomcat/webapps
  5. #ADD用于复制本地文件到镜像中
  6. ADD docker-web ./docker-web

然后使用命令 docker build -t fengsir/mydocker:1.0 C:\Users\10419\Desktop\mydocker

注:-t是为添加的新镜像赋予一个名称,:1.0是版本号,C:\Users\10419\Desktop\mydocker 这是刚刚创的文件夹的目录,直接复制进来,docker会自动加载里面的Dockerfile文件。

出现以下提示代表新镜像构建成功!!!

  1. [+] Building 0.3s (8/8) FINISHED
  2. => [internal] load build definition from Dockerfile 0.0s
  3. => => transferring dockerfile: 234B 0.0s
  4. => [internal] load .dockerignore 0.0s
  5. => => transferring context: 2B 0.0s
  6. => [internal] load metadata for docker.io/library/new-tomcat:1.0 0.0s
  7. => [1/3] FROM docker.io/library/new-tomcat:1.0 0.1s
  8. => [internal] load build context 0.0s
  9. => => transferring context: 72B 0.0s
  10. => [2/3] WORKDIR /usr/local/tomcat/webapps 0.0s
  11. => [3/3] ADD docker-web ./docker-web 0.0s
  12. => exporting to image 0.1s
  13. => => exporting layers 0.0s
  14. => => writing image sha256:700c6b5c8df50f797b8978476376f63d7f9df11fd636b1d8342e28457bd1894c 0.0s
  15. => => naming to docker.io/fengsir/mydocker-web:1.0 0.0s
  16. Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

接着使用命令docker images查看当前镜像

  1. C:\Users\10419>docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. fengsir/mydocker-web 1.0 700c6b5c8df5 16 seconds ago 672MB
  4. new-tomcat 1.0 99efe959f94c 7 minutes ago 672MB
  5. tomcat latest c0e850d7b9bb 2 weeks ago 667MB

运行新创建的镜像docker run fengsir/mydocker-web:1.0

注:一定要带上版本号,或者替换成IMAGE ID docker run 700c6b5c8df5

启动成功,访问localhost:8000/docker-web

总结

docker 常用命令

命令 用法
查看镜像 docker images
查看运行中的容器 docker ps
停止容器运行 docker stop (CONTAINER ID)
重启容器 docker restar CONTAINER ID 用于容器stop后
进入容器 docker exec -it (CONTAINER ID) /bin/bash
运行镜像 docker run (CONTAINER ID
删除容器 docker rm CONTAINER ID 删除镜像需要先删除容器
删除镜像 docker rmi (IMAGE ID)

还学到一个新的linux命令

mv webapps.dist/* webapps 把webapps.dist目录下所有文件移动到webapps目录中

嘿嘿,暂时就这么一点心得,后续再见啦

谢谢你这么好看还给我点赞

Docker入门(windows版),利用Docker创建一个Hello World的web项目的更多相关文章

  1. 创建一个简单的 Springboot web项目

    1.点击Project 2.点击 Next 3.项目名 4.web 项目 4.确认 5.pom.xml <?xml version="1.0" encoding=" ...

  2. Docker入门详解——安装docker并利用docker搭建lnmp

    首先我们需先安装docker环境,这个比较简单,以centos7为例 docker在centos7上安装需要系统内核版本3.10+,可以通过uname -r查看内核版本号,如果版本不符请自行查阅资料更 ...

  3. Docker入门之 - 如何安装Docker CE

    原文:Docker入门之 - 如何安装Docker CE 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012055638/article/det ...

  4. 【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World

    操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service doc ...

  5. docker:(2)通过Dockerfile构建镜像并发布web项目

    上一篇讲解了docker的基本使用 http://www.cnblogs.com/xiaochangwei/p/8204511.html 虽然通过修改获取到的镜像可以达到使用目的,但是多操作几次就会发 ...

  6. 使用eclipse创建一个简单的Java Web应用程序

    关于Java JDK/JRE.Tomcat的配置等等都没什么好说的,主要记录一下使用Eclipse创建web工程时的一些点以及说一说自己用IDEA的创建失败的过程(IDEA没运行成功...暂时不想弄了 ...

  7. SharePoint创建一个简单的Visio Web部件图

    SharePoint创建一个简单的Visio Web部件图 Visio有很多强大的Mash-up混聚功能,使它能够轻松集成到SharePoint 2010中. 1. 打开Visio 2010,创建新的 ...

  8. webstorm创建nodejs + express + jade 的web 项目

    webstorm创建nodejs + express + jade 的web 项目 前简单了解过nodejs,觉得用nodejs来做个网站也太麻烦了,要自己拼html的字符串返回,这能做网站嘛? 最近 ...

  9. 创建以mybatis为基础的web项目(2)mabitis中的一对一关系项目实战

    mabitis中的一对一关系项目实战: 1.首先根据创建以mybatis为基础的web项目(1)中的流程将web项目部署好 打开IDE,建立web工程 在lib下面粘贴mybatis的jar,log4 ...

随机推荐

  1. LOTO新型号支持串口蓝牙示波器

    LOTO串口/蓝牙示波器面世 LOTO一直专注在虚拟示波器领域,以USB虚拟示波器为基础,扩展了很多功能模块,可以把Windows示波器,信号源,逻辑分析仪,频谱分析,数据记录,安卓手机平板支持,隔离 ...

  2. 【数据库】SQL 语句大全

    数据操作 SELECT --从数据库表中检索数据行和列 INSERT --向数据库表添加新数据行 DELETE --从数据库表中删除数据行 UPDATE --更新数据库表中的数据 数据定义 CREAT ...

  3. XML与HTML的主要区别

    XML 与 HTML 的主要差异 XML 不是 HTML 的替代. XML 和 HTML 为不同的目的而设计: XML 被设计为传输和存储数据,其焦点是数据的内容. HTML 被设计用来显示数据,其焦 ...

  4. Net中事件的用法之二

    1.委托与事件的区别 事件对权限做了控制 1.委托可以直接调用 事件不可以直接调用 2.委托允许外面直接赋值 事件不允许外面直接赋值 2.事件与委托的实例比较 using System; using ...

  5. TCP | 你真的懂 HTTP 吗?

    前言 Hello 大家好,我是 Sam Zhang. HTTP 相信是每个 Web 开发者都耳熟能详的名词了.但是,新手开发者想要完全理解 HTTP 协议却需要时间.这期视频,我就来带大家入门 HTT ...

  6. Python:range、np.arange和np.linspace

    1. range range是python内置的一个类,该类型表示一个不可改变(immutable)的数字序列,常常用于在for循环中迭代一组特殊的数,它的原型可以近似表示如下: class rang ...

  7. 基于Spring Cache实现二级缓存(Caffeine+Redis)

    一.聊聊什么是硬编码使用缓存? 在学习Spring Cache之前,笔者经常会硬编码的方式使用缓存. 我们来举个实际中的例子,为了提升用户信息的查询效率,我们对用户信息使用了缓存,示例代码如下: @A ...

  8. CF1481X Codeforces Round #699

    C Fence Painting(构造) 有用的刷子贪心刷,没用的刷子填在后续的有用/已存在的位置(用个栈记一下就行) D AB Graph(图上构造) 把边当做三种类型,aa bb ab m为奇数时 ...

  9. 怎么让一个div消失在视野里

    怎么让一个div消失在视野里 视野内隐藏 1.设置高度宽度为0 div { height: 0; width: 0; } 2.设置透明度为0 div { opacity: 0; } 3.设置displ ...

  10. linux管理用户(组)与相关问题处理

    相关联文件如下: /etc/passwd/etc/shadow/etc/group ================================= [切换当前用户为root]sudo -i [创建 ...