如果不指定版本號的話,那麼會默認下載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/nginxdocker安裝tomcatdocker 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