輕量級的虛擬機html
VMware
完整虛擬一臺計算機,全部的硬件、底層系統資源都須要虛擬出來java
Docker
充分利用宿主的硬件和系統資源,本身虛擬的東西很是少linux
Docker是開發運維一體化(DevOps)的核心工具web
虛擬機的一組磁盤文件,能夠任意分發、複製、下載redis
# 查看鏡像列表 docker images # 刪除鏡像 docker rmi hello-world docker rmi aaa bbb ccc ddd docker rmi id1 id2 id3 # 若是存在容器,不能直接刪除鏡像,能夠加 -f 參數強制刪除鏡像 docker rmi -f hello-world
鏡像名稱:
鏡像名:標籤
標籤:通常是部署的應用的版本,或系統環境.若是不知道標籤,默認標籤是latest
spring
從鏡像運行啓動的虛擬機docker
# 從 tomcat 鏡像,運行啓動容器 # 參數i: 交互 參數t: 終端 docker images docker run -it tomcat # 查看容器 docker ps # 查看全部容器,包括已關閉的容器 docker ps -a # 中止或重啓容器 docker stop 532 docker start 532 docker restart 532
容器啓動後運行的應用:
鏡像中設置了默認啓動的應用shell
# 查看鏡像中設置的默認應用 docker history tomcat docker history redis docker history mariadb
若是不想執行鏡像指定的默認命令m\,yekeyi本身指定任意命令apache
docker run -it tomcat ls docker run -it tomcat top docker run -it tomcat bash docker ps -a
刪除容器centos
docker rm 8021 # 不能直接刪除正在運行的容器,能夠加 -f 強制刪除 docker rm 532 # 清理全部已經退出的容器 docker container prune
啓動容器的參數: -d、--rm、--name、--restart=always
-d 後臺運行,不佔用控制檯 docker run -d --name tomcat docker ps # 查看容器內部日誌 docker logs cat1 # --rm 容器關閉時,自動刪除容器 docker run -it --rm tomcat top # ctrl + c 退出後,容器自動關閉,自動刪除,查看容器列表是看不到容器的 docker ps -a # --restart=always 容器老是自動啓動 docker run -d --name cat2 --restart=always tomcat docker ps # 重啓docker系統服務,cat2也會自動重啓,cat1不會自動啓動 systemctl restart docker docker ps
進入容器,在容器內執行命令
docker exec -it cat2 pwd docker exec -it cat2 ps docker exec -it cat2 touch f1.txt docker exec -it cat2 ls docker exec -it cat2 bash
# -v /usr/app:/opt/app # - v 宿主機目錄:容器中的路徑 docker run \ -d \ --name cat1 \ -v /usr/app:/opt/app tomcat # 進入cat1容器,在/opt/app/ 目錄下建立文件 docker exec -it cat1 bash cd /opt/app/ echo 11111111111 > f1.txt ls cat f1.txt exit cat /usr/app/ ls cat f1.txt
# 建立數據卷 docker volume create my-vol # 查看數據卷 docker volume ls # 查看數據卷詳情 /var/lib/docker/volumes/my-vol/_data docker inspect my-vol # 把my-vol 數據卷掛載到容器 docker run \ -d --name cat2 \ --rm \ -v my-vol:/opt/app \ tomcat # 在容器 cat2 的 /opt/app/ 下建立文件 docker exec -it cat2 echo touch /opt/app/f2.txt docker exec -it cat2 ls /opt/app/ # 在宿主機 my-vol 數據卷的目錄下查看文件 cd /var/lib/docker/volumes/my-vol/_data ls
# 清理容器 docker rm -f cat1 cat2 # 建立tomcat 容器,映射到宿主機的80端口 docker run \ -d --name cat1 \ --restart=always \ -p 80:8080 \ tomcat # 訪問 http://192.168.64.150
# 在宿主機建立/opt/web/index.html mkdir /opt/web/ cat <<EOF >/opt/web/index.html <h1>Hello docker!!!</h1> EOF # 啓動容器 cat2 docker run -d --name cat2 \ --restart=always \ -v /opt/web:/usr/local/tomcat/webapps/ROOT \ -p 8088:8080 \ tomcat
# 建立網絡 docker network create my-net # 查看網絡 docker network ls # 查看網絡詳情 docker inspect my-net #查看宿主機上新建的虛擬網卡 ifconfig # 啓動容器 app1,鏈接到my-net網絡 docker run -dit --name app1 \ --net my-net \ centos:7 # 啓動容器 app2,鏈接到my-net網絡 docker run -dit --name app2 \ --net my-net \ centos:7 # 查看容器描述,能夠看到得到的ip地址 docker inspect app1 docker inspect app2 # 從宿主機ping app1和app2的ip ping 172.18.0.2 ping 172.18.0.3 # 進入 app1,ping宿主機和app2 docker exec -it app1 ping 172.18.0.1 docker exec -it app1 ping 172.18.0.3 docker exec -it app1 ping app2
# 新建文件夾 tomcat7 cd ~/ mkdir tomcat7 # 生成 Dockerfile 文件 cd tomcat7 cat <<EOF > Dockerfile FROM centos:7 ADD jdk-8u212-linux-x64.tar.gz /opt/ ADD apache-tomcat-7.0.96.tar.gz /usr/ RUN mv /usr/apache-tomcat-7.0.96 /usr/tomcat ENV JAVA_HOME=/opt/jdk1.8.0_212 \ CATALINA_HOME=/usr/tomcat \ PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/bin EXPOSE 8080 ENTRYPOINT /usr/tomcat/bin/startup.sh && tail -F /usr/tomcat/logs/catalina.out # 上傳 jdk 和 tomcat7 的壓縮文件到 /root/tomcat7/ # 完成構建,末尾的點,是當前目錄(/root/tomcat7/) docker build -t tomcat:7 . # 查看鏡像列表 docker images # 從 tomcat:7 鏡像,運行啓動容器 docker run -d --name cat3 \ -p 8089:8080 \ tomcat:7 docker logs cat3 http://192.168.64.150:8089
# 準備文件 cd ~/ mkdir eureka cd eureka # 上傳文件 jdk 和 eureka 的 jar 文件到 /root/eureka/ 文件夾 # jdk文件: 課前資料/docker/tomcat7/ # java -jar /opt/sp05-eureka-0.0.1-SNAPSHOT.jar # --spring.profiles.active=eureka1 --server.port=2001 cat <<EOF >Dockerfile FROM centos:7 ADD jdk-8u212-linux-x64.tar.gz /opt/ COPY sp05-eureka-0.0.1-SNAPSHOT.jar /opt/ ENV JAVA_HOME=/opt/jdk1.8.0_212 \ PATH=$PATH:/opt/jdk1.8.0_212/bin ENTRYPOINT ["java","-jar","/opt/sp05-eureka-0.0.1-SNAPSHOT.jar"] CMD ["--spring.profiles.active=eureka1","--server.port=2001"] EOF docker build -t eureka:v1 . #啓動 eureka 容器 docker run -d --name eureka1 \ --restart=always \ -p 2001:2001 \ eureka:v1 docker logs eureka1 http://192.168.64.150:2001