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:\Users\10419>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:\Users\10419>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:\Users\10419>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:\Users\10419>docker run -p 8000:8080 tomcat

Tomcat 404報錯解決

啟動成功之后訪問localhost:8000,報錯404

這里有個坑,先使用命令docker ps 查看當前運行的容器

C:\Users\10419>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:\Users\10419>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:\Users\10419>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:\Users\10419>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:\Users\10419>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:\Users\10419\Desktop\mydocker
注:-t是為添加的新鏡像賦予一個名稱,:1.0是版本號,C:\Users\10419\Desktop\mydocker 這是剛剛創的文件夾的目錄,直接復制進來,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:\Users\10419>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目錄中

嘿嘿,暫時就這么一點心得,后續再見啦

謝謝你這么好看還給我點贊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM