轻量级的虚拟机html
VMwarejava
完整虚拟一台计算机,全部的硬件、底层系统资源都须要虚拟出来
Dockerlinux
充分利用宿主机的硬件和系统资源,本身虚拟的东西很是少
Docker是开发运维一体化(DevOps)的核心工具web
虚拟机的一组磁盘文件,能够任意分发、复制、下载redis
docker run hello-world 一、若是hello-world镜像不存在先从从库下载这个镜像 二、启动容器 三、在容器内,运行部署的应用 四、应用运行结束后,容器自动关闭
# 查看镜像列表 dockers images # 删除镜像 docker rmi hello-world docker rmi a b c 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 0c6 # 启动容器 docker start 0c6 # 从新启动容器 docker restart 0c6
容器启动后运行的应用:
镜像中设置了默认启动的应用apache
# 查看镜像中设置的默认应用 docker history tomcat docker history redis docker history mariadb
若是不想执行镜像指定的默认命令,也能够本身指定任意命令centos
docker run -it tomcat ls docker run -it tomcat top docker run -it tomcat bash docker ps -a
删除容器tomcat
docker rm 9aa f94 # 不能直接删除正在运行的容器,能够加 -f 强制删除 docker rm -f 0c6 # 清理全部已经退出的容器 docker container prune
启动容器的参数:-d、--rm、--name、--restart=always
# -d 后台运行,不占用控制台 # --name 给容器命名 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 bash
# -v /usr/app:opt/app # -v 宿主机目录:容器中的路径 # 宿主机目录不存在会自动建立 docker run \ -d \ --name cat1 \ -v /usr/app:opt/app \ tomcat # 进入cat容器,在/opt/app/目录下建立文件 docker exec -it cat1 bash cd /opt/app/ echo 11111111111 > f1.txt ls cat f1.txt # 退回到宿主机,查看保存在宿主机的文件 exit cd /usr/app/ ls cat f1.txt
# 建立数据卷 docker volume create my-vol # 查看数据卷详情 /var/lib/docker/volumes/my-vol/_data docker volume ls 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 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 # 建立 docker 容器,映射到宿主机的90端口 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 # 访问 http://192.168.64.150:8088
# 建立网络 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 EOF # 上传jdk和tomcat7的压缩文件到 /root/tocat7 # 完成构建,末尾的点,是当前目录(/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 \ CATALINA_HOME=/usr/tomcat \ 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 # 访问eureka http://192.168.64.150:2001/