Docker
轻量级的虚拟机
VMware
残缺虚构一台计算机,所有的硬件、底层系统资源都须要虚构进去
Docker
充分利用宿主的硬件和系统资源,本人虚构的货色非常少
Docker是开发运维一体化(DevOps)的外围工具
镜像
虚拟机的一组磁盘文件,能够任意散发、复制、下载
# 查看镜像列表docker images# 删除镜像docker rmi hello-worlddocker rmi aaa bbb ccc ddddocker rmi id1 id2 id3# 如果存在容器,不能间接删除镜像,能够加 -f 参数强制删除镜像docker rmi -f hello-world
镜像名称:
镜像名:标签
标签:个别是部署的利用的版本,或零碎环境.如果不晓得标签,默认标签是latest
容器
从镜像运行启动的虚拟机
# 从 tomcat 镜像,运行启动容器# 参数i: 交互 参数t: 终端docker imagesdocker run -it tomcat# 查看容器docker ps# 查看所有容器,包含已敞开的容器docker ps -a# 进行或重启容器docker stop 532docker start 532docker restart 532
容器启动后运行的利用:
镜像中设置了默认启动的利用
# 查看镜像中设置的默认利用docker history tomcatdocker history redisdocker history mariadb
如果不想执行镜像指定的默认命令m\,yekeyi本人指定任意命令
docker run -it tomcat lsdocker run -it tomcat topdocker run -it tomcat bashdocker ps -a
删除容器
docker rm 8021 # 不能间接删除正在运行的容器,能够加 -f 强制删除docker rm 532# 清理所有曾经退出的容器docker container prune
启动容器的参数: -d、--rm、--name、--restart=always
-d 后盾运行,不占用控制台docker run -d --name tomcatdocker 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 tomcatdocker ps# 重启docker零碎服务,cat2也会主动重启,cat1不会主动启动systemctl restart dockerdocker ps
进入容器,在容器内执行命令
docker exec -it cat2 pwddocker exec -it cat2 psdocker exec -it cat2 touch f1.txtdocker exec -it cat2 lsdocker exec -it cat2 bash
目录挂载
# -v /usr/app:/opt/app# -v 宿主机目录:容器中的门路docker run \-d \--name cat1 \-v /usr/app:/opt/apptomcat# 进入cat1容器,在/opt/app/ 目录下创立文件docker exec -it cat1 bashcd /opt/app/echo 11111111111 > f1.txtlscat f1.txtexitcat /usr/app/lscat f1.txt
数据卷挂载
# 创立数据卷docker volume create my-vol# 查看数据卷docker volume ls# 查看数据卷详情 /var/lib/docker/volumes/my-vol/_datadocker 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.txtdocker exec -it cat2 ls /opt/app/# 在宿主机 my-vol 数据卷的目录下查看文件cd /var/lib/docker/volumes/my-vol/_datals
端口映射
# 清理容器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.htmlmkdir /opt/web/cat <<EOF >/opt/web/index.html<h1>Hello docker!!!</h1>EOF# 启动容器 cat2docker 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 app1docker inspect app2# 从宿主机ping app1和app2的ipping 172.18.0.2ping 172.18.0.3# 进入 app1,ping宿主机和app2docker exec -it app1 ping 172.18.0.1docker exec -it app1 ping 172.18.0.3docker exec -it app1 ping app2
构建tomcat:7镜像
# 新建文件夹 tomcat7cd ~/mkdir tomcat7# 生成 Dockerfile 文件cd tomcat7cat <<EOF > DockerfileFROM centos:7ADD 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/tomcatENV JAVA_HOME=/opt/jdk1.8.0_212 \ CATALINA_HOME=/usr/tomcat \ PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/binEXPOSE 8080ENTRYPOINT /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:7docker logs cat3http://192.168.64.150:8089
构建eureka镜像
# 筹备文件cd ~/mkdir eurekacd 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=2001cat <<EOF >DockerfileFROM centos:7ADD 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/binENTRYPOINT ["java","-jar","/opt/sp05-eureka-0.0.1-SNAPSHOT.jar"]CMD ["--spring.profiles.active=eureka1","--server.port=2001"]EOFdocker build -t eureka:v1 .#启动 eureka 容器docker run -d --name eureka1 \--restart=always \-p 2001:2001 \eureka:v1docker logs eureka1http://192.168.64.150:2001