docker安裝Nginx和Tomcat

2022-01-13 一個狗運維的日常
docker安裝Nginx

如果不指定版本號的話,那麼會默認下載latest也就是最近、最新的nginx鏡像

[root@localhost ~]# docker imagesREPOSITORY    TAG       IMAGE ID       CREATED        SIZEnginx         latest    605c77e624dd   11 days ago    141MBhello-world   latest    feb5d9fea6a5   3 months ago   13.3kBcentos        latest    5d0da3dc9764   3 months ago   231MB

啟動Nginx服務

#docker run -d --name nginx11 -p 3388:80 nginx# run就是運行的意思 #-d就是後臺啟動容器並返回容器id#--name 給這個容器起一個名字 叫做nginx11 # -p 指定外部埠給容器裡80 (也可以理解把80埠映射為3388埠) 最後一個nginx就是容器的名字[root@localhost ~]# docker run -d --name nginx11 -p 3388:80 nginx9f435eb63bed278a0bf6e0c0c5500834ac416342c6b2e42d0e304f9dfbb11cb9#使用docker ps 查看一下啟動中的鏡像docker ps

可以看到ports下面顯示 0.0.0.0:3388->80/tcp, :::3388->80/tcp

就說明埠映射成功 並且nginx啟動成功、

那麼我們來輸入虛擬機的IP加上3388埠號。

http://192.168.0.219:3388/

可以看到,和我們正常安裝的nginx沒有什麼區別,無非就是埠號換了一下

這裡注意一下,如果時阿里雲ecs的話 記得把安全組開一下,都是淚。。。

[root@localhost ~]root@9f435eb63bed:/bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  varroot@9f435eb63bed:/nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginxroot@9f435eb63bed:/root@9f435eb63bed:/etc/nginxconf.d  fastcgi_params  mime.types  modules  nginx.conf  scgi_params  uwsgi_paramsroot@9f435eb63bed:/etc/nginx

docker安裝tomcat
docker run -it --rm tomcat:9.0#--rm 這裡代表的意思是用完即刪除 這裡刪除的是容器,但是鏡像還在# tomcat:9.0指定tomcat9.0的版本 不加就直接使用最新的tomcat

這個時候已經啟動了tomcat,ctrl+c停掉這個服務。查看下鏡像

看得到,我們這裡使用tomcat9.0的鏡像的,但是我們再用docker ps -a看一下

可以看到,啥也沒有,就是連記錄都沒得,所以這裡--rm刪除的只是容器不是鏡像。

docker run -d -p 4444:8080 --name tomcat03 tomcat[root@localhost ~]86e1b1a0e26ac0b07e0653580fe7562b58fb03a5286a0fb5fb0539715e87cca4docker: Error response from daemon: driver failed programming external connectivity on endpoint tomcat03 (2bfedcb0df62fa13af388339859018320178196111ef89206bb29ac739e43f85):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9999 -j DNAT --to-destination 172.17.0.3:8080 ! -i docker0: iptables: No chain/target/match by that name. (exit status 1)).

docker容器的底層原理:在啟動docker的時候會自動在iptables中註冊一個鏈,通過防火牆的鏈也可以找到其註冊的信息,主要註冊這些鏈,是docker中的容器為了暴露埠而使用的

具體原因是你刪除了iptables中的鏈刪除連結的方式有很多種

重啟firewalld防火牆即可對其清除,firewalld是centos7以上,iptables是centos6以下都會有,而firewalld的底層是涉及在iptables上的,在啟動firewalld的時候會自動刪除iptables鏈的相關連結直接重啟docker就好。

重啟過後就可以正常運行了。

但是這裡我們直接訪問的話是報404,原因是因為tomcat裡面的webapps是空的 。

我們進入容器看一下

[root@localhost ~]root@14bd56032674:/usr/local/tomcatBUILDING.txt     LICENSE  README.md      RUNNING.txt  conf  logs            temp     webapps.distCONTRIBUTING.md  NOTICE   RELEASE-NOTES  bin          lib   native-jni-lib  webapps  workroot@14bd56032674:/usr/local/tomcatroot@14bd56032674:/usr/local/tomcat/webappsroot@14bd56032674:/usr/local/tomcatroot@14bd56032674:/usr/local/tomcat/webapps.distROOT  docs  examples  host-manager  managerroot@14bd56032674:/usr/local/tomcat/webapps.dist

我們可以看到,webapps是空的,在webapps裡面是有真正的文件。那麼我們把webapps文件複製過去

root@14bd56032674:/usr/local/tomcat/webapps.distroot@14bd56032674:/usr/local/tomcatcp: -r not specified; omitting directory 'webapps.dist/ROOT'cp: -r not specified; omitting directory 'webapps.dist/docs'cp: -r not specified; omitting directory 'webapps.dist/examples'cp: -r not specified; omitting directory 'webapps.dist/host-manager'cp: -r not specified; omitting directory 'webapps.dist/manager'root@14bd56032674:/usr/local/tomcatroot@14bd56032674:/usr/local/tomcatroot@14bd56032674:/usr/local/tomcat/webappsbash: syntax error near unexpected token `;'root@14bd56032674:/usr/local/tomcat/webapps# lsROOT  docs  examples  host-manager  managerroot@14bd56032674:/usr/local/tomcat/webapps#

這裡拷貝的時候提示要加-r 加一下就好

這個時候 我們再次訪問一下9999埠看一下。

正常訪問沒得問題。

最後奉上點docker常用命令

docker 的常用命令

docker pull docker images docker image ls docker save docker load target.tar docker search image docker inspect image:tags docker inspect -f {{".Size"}} redis:6.0.9 -f 可以直接篩選自己可以想看到的信息docker rmi image:tags docker image rm image:tags docker history image:tags docker tag image:tags target:tags 這一塊需要注意,經過測試如果tag 複製一份別名的鏡像如果存在name + tag 相同的情況時,會直接將之前的給覆蓋不會報錯。docker run -it docker run -it 訪問到容器中的服務,docker run -it -p 綁定docker容器和主機的埠映射,不能衝突 -i 交互式啟動 -t 給予一個偽端 -d 後臺執行啟動 不能與rm搭配使用docker logs -f 滾動列印docker ps -a 查詢包含不運行的容器docekr rm container -f 強制刪除容器docker start container docker stop container docker restart container docker create -it docker exec docker kill

相關焦點

  • 從rm命令來認識docker容器的刪除
    例如:我們以tomcat為例,tomcat被安裝在linux伺服器上的/usr/local/tomcat文件夾下,那麼要刪除tomcat,命令就應該是「rm -rf /usr/local/tomcat」,在這裡-rf 是指以遞歸的形式刪除tomcat文件夾以及其下的文件。
  • Dockerfile企業實戰教程
    一、dockerfile語法詳解Dockerfile 是一個用來構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明。基於Dockerfile構建鏡像可以使用docker build命令。,這邊只是切換後續命令執行的用戶(用戶和用戶組必須提前已經存在)。
  • Spring Boot 2.0(五):Docker Compose+Spring Boot+Nginx+Mysql 實踐
    felling 。 30d; alias /app/static; }}這塊內容比較簡單,配置請求轉發,將80埠的請求轉發到服務 app 的8080埠。其中 proxy_pass http://app:8080這塊的配置信息需要解釋一下,這裡使用是 app而不是 localhost,是因為他們沒有在一個容器中,在一組 compose 的服務通訊需要使用 services 的名稱進行訪問。
  • 使用Docker(Mac)搭建 Nginx/Openresty - Kafka - kafkaManager
    1.安裝Docker(Mac)官網:https://docs.docker.com/docker-for-mac/install/1.1 下載 Docker for Mac地址:https://store.docker.com
  • 12個docker常用命令!以tomcat為例
    的學習,以下總結了docker常用的一些命令和操作從docker命令使用出發,梳理出如下命令結構圖:冒號後面的是指定版本,如果不知道版本號,直接去掉冒號和後面的,默認會下載最新版本3:查看當前鏡像$ docker images# 如過太多,可以加管道$ docker images
  • SAST Weekly | Docker--新興的虛擬化技術
    (如果需要註冊可以註冊一個自己的帳戶)2.2 Linux系統安裝Docker2.2.1 Ubuntu安裝Docker可以使用官方安裝腳本一鍵安裝curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun或者國內的daocloud一鍵安裝:curl -sSL
  • Docker用法
    注意:這裡建議安裝在CentOS7.x以上的版本,在CentOS6.x的版本中,安裝前需要安裝其他很多的環境而且Docker很多補丁不支持更新。
  • 雲計算核心技術Docker教程:解決Windows下docker埠映射問題
    在Windows系統下安裝docker並嘗試在其中運行Nginx服務,在映射完畢之後在主機的瀏覽器中,打開localhost:port無法訪問對應的服務。
  • Docker操作必看,原來這才是正確打開Docker的新方式!
    / ,輸入你要拉取的鏡像名稱,如下圖所示,我們拉取一個 Nginx 進行安裝。使用 docker rmi 命令,如下圖所示:docker rmi nginxdocker rmi 鏡像名稱 / docker rm 鏡像ID
  • Docker - 常用命令
    鏡像管理# 查看所有鏡像$ docker images# 搜索鏡像$ docker search nginx
  • 新手入門系列之-React / Vue 應用持續集成Docker 化
    /package.json /web/package.json# 安裝依賴RUN yarn# 將代碼複製到Docker容器中的Web目錄COPY .react-docker 可以替換為你要為鏡像命名的任何值。docker build -t react-docker .
  • 學習Docker就應該掌握的dockerfile語法與指令
    原有指令 MAINTAINER 已經放棄使用,用 LABEL maintainer="hogwarts@testing-studio.com" 替代。USER:指定運行容器時的用戶名或 UID,後續 RUN 也會使用指定用戶。RUN:RUN 命令是 Dockerfile 執行命令的核心部分。它接受命令作為參數並用於創建鏡像。
  • 再見Docker Desktop,你好 Minikube!
    當然還包括Kubernetes集群和kubectl二進位(除非你有單獨部署)。如果你沒有使用Homebrew,那麼就需要相應地卸載這些工具。Hyperkit仍然是在Mac上本地運行Kubernetes集群的一個可行的選擇,我們先來安裝它。
  • Docker命令大整理,附示例!
    :latest以後臺模式啟動一個名為mynginx的容器,其中將容器外8080埠映射到容器內,主機目錄 /data 映射到容器內/datadocker run --name mynginx -d -p 8080:80 -v /data:/data nginx:latest  docker run -it nginx:latest /bin/bash  # 以交互式命令啟動一個容器
  • 初探Docker的網絡模式
    bridge模式是docker的默認網絡模式,此模式會為每一個容器設置network namespace、ip地址等,在docker啟動時候,就會在主機上創建一個名為docker0的虛擬網橋,在該主機上啟動的docker容器都會連接到這個虛擬網橋上,這樣就可以和同一宿主機上橋接模式的其它容器進行通信啦。
  • 編寫Dockerfiles最佳實踐(Docker 18.09) | 附PDF下載
    此功能要求在運行dockerbuild命令的主機上安裝git。要排除與構建無關的文件(不重構源倉庫),請使用.dockerignore文件。 此文件支持類似於.gitignore文件的排除模式。有關創建的信息,請參閱.dockerignore文件。多階段構建允許您大幅減小最終鏡像的大小,而無需減少中間層和文件的數量。
  • Dockerfile 最佳實踐
    避免安裝不必要的包為了降低複雜性、減少依賴、減小文件大小和構建時間,應該避免安裝額外的或者不必要的軟體包。例如,不要在資料庫鏡像中包含一個文本編輯器。一個容器只專注做一件事情應該保證在一個容器中只運行一個進程。將多個應用解耦到不同容器中,保證了容器的橫向擴展和復用。
  • Nginx,最好的 2 套視頻,全網巔峰!!
    第1套:《Nginx由淺入深》地址https://www.bilibili.com
  • Docker Hub鏡像中首次發現名為Graboid的加密挖礦蠕蟲病毒
    由於多數傳統端點防護軟體都不檢測容器內的數據和活動,因此很難發現這一類型的惡意活動。攻擊者首先通過不安全的Docker Daemon站穩腳跟,然後在受感染的主機上安裝一個Docker鏡像並運行。惡意軟體從C2伺服器上下載並部署完畢後,便開始挖礦尋找門羅幣。此外,惡意軟體會定期從C2伺服器搜索新的帶有漏洞的主機,然後隨機選擇下一個目標進行傳播。
  • 老大:用腳本實現Nginx日誌每天切分的功能?我:脫了褲子放屁!
    Linux系統默認安裝logrotate工具,它默認的配置文件在:/etc/logrotate.conf/etc/logrotate.d/logrotate.conf 才主要的配置文件,logrotate.d 是一個目錄,該目錄裡的所有文件都會被主動的讀入/etc/logrotate.conf中執行。