• Docker入门(windows版),利用Docker创建一个Hello World的web项目


    Docker

    当大家点开这篇博客的时候,相信大家对docker多多少少也有些认识了,最近学习docker这门技术,略微有些心得,写篇文章记录一下学习过程并帮大家跳过一些坑。
    docker的核心有两个,一个是容器,一个是镜像。
    镜像:可以理解为是只读的文件,我个人理解为是应用程序,例如tomcat,mysql,redis等
    容器:可以理解为迷你的linux系统,是由docker创建的,镜像就是运行在容器中,容器之间也是彼此隔离的,比如我可以在docker中运行几个mysql服务
    理解docker的核心概念之后我们进入实战

    Dokcer实战

    安装Docker

    安装Docker很简单,windows系统安装的是Docker Desktop 点击下载(这是从官网扒下来的链接大家放心下载,也可以直接去官网下 Docker官网)
    安装过程也很简单,没有多余的配置,一直下一步就可以了,这里就不放安装过程截图了_
    装好docker之后,启动docker desktop,然后在命令提示符中输入,docker version,出现

    C:Users10419>docker version
    Client:
     Cloud integration: 1.0.14
     Version:           20.10.6
     API version:       1.41
     Go version:        go1.16.3
     Git commit:        370c289
     Built:             Fri Apr  9 22:49:36 2021
     OS/Arch:           windows/amd64
     Context:           default
     Experimental:      true
    
    Server: Docker Engine - Community
     Engine:
      Version:          20.10.6
      API version:      1.41 (minimum version 1.12)
      Go version:       go1.13.15
      Git commit:       8728dd2
      Built:            Fri Apr  9 22:44:56 2021
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.4.4
      GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
     runc:
      Version:          1.0.0-rc93
      GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
     docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0
    

    说明docker已经安装好了

    利用docker安装tomcat

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

    C:Users10419>docker pull tomcat
    Using default tag: latest
    latest: Pulling from library/tomcat
    bd8f6a7501cc: Pull complete
    44718e6d535d: Pull complete
    efe9738af0cb: Pull complete
    f37aabde37b8: Pull complete
    b87fc504233c: Pull complete
    8bf93eef8c9e: Pull complete
    8d33b4df10ef: Pull complete
    2d77aa1a5442: Pull complete
    baa04cc4071d: Pull complete
    a3a752513415: Pull complete
    Digest: sha256:0509684774ac53d8b152f4a50dd92889218a8633c0feddb4b35d092e55cd215d
    Status: Downloaded newer image for tomcat:latest
    docker.io/library/tomcat:latest
    

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

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

    C:Users10419>docker images
    REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
    tomcat        latest    c0e850d7b9bb   2 weeks ago    667MB
    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:Users10419>docker run -p 8000:8080 tomcat

    Tomcat 404报错解决

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

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

    C:Users10419>docker ps
    CONTAINER ID   IMAGE     COMMAND             CREATED         STATUS         PORTS                                       NAMES
    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:Users10419>docker exec -it 54f85f2559cd /bin/bash

    root@54f85f2559cd:/usr/local/tomcat# ls
    BUILDING.txt     LICENSE  README.md      RUNNING.txt  conf  logs            temp     webapps.dist
    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中

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

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

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

    但是这样并不能一劳永逸,重启之后还是会报错404,tomcat还是会有webapps.dist这个文件夹
    使用命令docker ps记下刚刚修改好的tomcat的容器id

    C:Users10419>docker ps
    CONTAINER ID   IMAGE     COMMAND             CREATED         STATUS         PORTS                                       NAMES
    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镜像提交一个新的本地镜像

    C:Users10419>docker commit -m="修复404" -a="fengzeng" 54f85f2559cd new-tomcat:1.0
    sha256:99efe959f94c616aad213fc4c4b899cd1d16faac7511834ee5942fbd6693e8c6
    

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

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

    C:Users10419>docker images
    REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
    new-tomcat   1.0       99efe959f94c   33 seconds ago   672MB
    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文件,不能有任何后缀
    在里面写上

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

    然后使用命令 docker build -t fengsir/mydocker:1.0 C:Users10419Desktopmydocker
    注:-t是为添加的新镜像赋予一个名称,:1.0是版本号,C:Users10419Desktopmydocker 这是刚刚创的文件夹的目录,直接复制进来,docker会自动加载里面的Dockerfile文件。
    出现以下提示代表新镜像构建成功!!!

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

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

    C:Users10419>docker images
    REPOSITORY             TAG       IMAGE ID       CREATED          SIZE
    fengsir/mydocker-web   1.0       700c6b5c8df5   16 seconds ago   672MB
    new-tomcat             1.0       99efe959f94c   7 minutes ago    672MB
    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目录中

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

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

  • 相关阅读:
    LVM
    作业
    软件工程随笔
    woj1005-holding animals-01pack woj1006-Language of animals-BFS
    woj1002-Genesis woj1003-birthofnoah woj1004-noah's ark
    C++ new delete malloc free
    centos7+腾讯云服务器搭建wordpress
    C++ inline与operator
    next v5升级到next v7需要注意的地方
    python = 赋值顺序 && C++ side effect
  • 原文地址:https://www.cnblogs.com/Fzeng/p/14741766.html
Copyright © 2020-2023  润新知