轻量级的虚拟机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