当前位置:   article > 正文

Docker_docker jdk8

docker jdk8

安装Docker

  1. [root@localhost /]# cat /etc/os-release
  2. #查看系统版本信息
  3. NAME="CentOS Linux"
  4. VERSION="7 (Core)"
  5. ID="centos"
  6. ID_LIKE="rhel fedora"
  7. VERSION_ID="7"
  8. PRETTY_NAME="CentOS Linux 7 (Core)"
  9. ANSI_COLOR="0;31"
  10. CPE_NAME="cpe:/o:centos:centos:7"
  11. HOME_URL="https://www.centos.org/"
  12. BUG_REPORT_URL="https://bugs.centos.org/"
  13. CENTOS_MANTISBT_PROJECT="CentOS-7"
  14. CENTOS_MANTISBT_PROJECT_VERSION="7"
  15. REDHAT_SUPPORT_PRODUCT="centos"
  16. REDHAT_SUPPORT_PRODUCT_VERSION="7"

安装

Install Docker Engine | Docker Documentation

  1. #下载环境所需要的安装包
  2. yum install -y yum-utils
  3. #设置镜像仓库
  4. $ sudo yum-config-manager \
  5.    --add-repo \
  6.   https://download.docker.com/linux/centos/docker-ce.repo#这个仓库是国外的,十分慢
  7. #使用阿里云镜像地址
  8. $ sudo yum-config-manager \
  9.    --add-repo \
  10. http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#国内阿里云镜像地址
  11. #安装docker引擎
  12. yum install docker-ce docker-ce-cli containerd.io
  13. #启动docker
  14. systemctl start docker
  15. #查看版本
  16. docker version
  17. #hello world
  18. docker run hello-world
  19. #卸载docker
  20. #卸载引擎
  21. yum remove docker-ce docker-ce-cli containerd.io
  22. #清楚资源目录
  23. rm -rf /var/lib/docker

配置阿里云镜像加速

 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

  1. #登录阿里云找到容器服务 每个人都不一样
  2. https://cr.console.aliyun.com/cn-hangzhou/instances/repositories
  3. ------》
  4. sudo mkdir -p /etc/docker
  5. sudo tee /etc/docker/daemon.json <<-'EOF'
  6. {
  7.  "registry-mirrors": ["https://a7bcnywy.mirror.aliyuncs.com"]
  8. }
  9. EOF
  10. sudo systemctl daemon-reload
  11. sudo systemctl restart docker

docker镜像命令

镜像相当于一个模板,就像java中的class一样

  1. #查看镜像
  2. docker images
  3. #帮助命令
  4. docker 命令 --help
  5. #搜索镜像命令
  6. docker search ..
  7. #下载镜像
  8. docker pull ..
  9. docker pull 镜像名[tag版本]
  10. #删除镜像
  11. docker rmi -f 镜像名||镜像id

docker容器命令

容器:我们有了镜像之后才可以创建容器,容器就相当于对象,一个镜像可以创建出多个容器

docker run [可选参数] 镜像名字

  1. #下载一个镜像
  2. docker pull centos
  3. #创建一个容器
  4. docker run [可选参数] 镜像名字
  5. #参数说明
  6. --name   给容器取个名字
  7. -d       后台运行
  8. -it       使用交互的方式运行,进入容器查看内容
  9. -P       将容器的端口和宿主机映射 -p 8080:8088 ,否则外部无法访问
  10. -p       随机指定端口
  11. #测试
  12. 启动并接入容器内部交互运行
  13. [root@localhost ~]# docker run -it centos /bin/bash
  14. [root@7f1d84721458 /]#
  15. #退出容器到主机
  16. exit

注意事项:

1、docker  run -it  --name rongqi cenos:7 /bin/bash 为交互式容器 ,exit 之后容器就会停止

2、通常使用 docker run -id --name rongqi1 cenos:7 为后台运行容器,exit后不会停止容器

3、进入容器:docker exec -it 容器名:版本号或者容器id 

docker ps列出运行容器

  1. #列出正在运行的容器
  2. docker ps
  3. #显示出正在运行的容器,也历史使用过的容器 ,up为正在运行的容器
  4. docker ps -a
  5. ​-n=? ?=1,2,3 显示最近创建的容器
  6. #显示当前运行的容器的所有id
  7. docker -ps -aq

docker rm 删除容器

  1. #删除指定的容器
  2. docker rm 容器id
  3. #删除所有容器
  4. docker rm -f $(docker ps -aq)
  5. 或者
  6. docker rm `docker ps -aq`

docker start 、restart

  1. docker start 容器id
  2. docker restart 容器id
  3. docker stop 容器id
  4. docker kill 容器id

数据卷映射 重要

Docker容器在删除之后,在容器中产生的数据也会被删除,为了避免这种情况,有了数据卷,就是宿主机的目录映射到容器的目录,宿主机和容器内的目录是同步的,多个容器可以绑定一个数据卷

数据卷的作用

1、容器数据持久化

2、外部机器和容器间接通信

3、容器之间数据交换

常用其他命令

  1. #查看日志
  2. docker logs -f --tail 容器
  3. #写一段shell脚本
  4. docker run -d centos /bin/bash -c"while true;do echo shilei;sleep 1;done"
  5. #查看容器的进程
  6. docker top 容器id
  7. #查看镜像源数据 显示所有信息
  8. docker inspect 容器id
  9. #进入正在运行的容器
  10. docker exec -it 容器id /bin/bash
  11. 或者可以通过docker attach
  12. #从容器内拷贝文件到主机上
  13. docker cp 容器id:容器内路径 目的主机路径
  14. [root@localhost home]# docker cp eaebdd3cfa0e:/home/test.java /home
  15. [root@localhost home]# ls
  16. app app.tar.gz shilei.java test.java
  17. [root@localhost home]#

docker部署nginx

  1. ------->
  2. #下载镜像
  3. docker pull nginx
  4. #查看镜像是否存在
  5. docker images
  6. #启动容器
  7. docker run -d --name nginx01 -p3344:80 nginx
  8. #查看容器是否正在启动
  9. docker ps
  10. ------
  11. #本机测试访问 测试地址
  12. curl localhost:3344
  13. #进入容器
  14. docker exec -it nginx01 /bin/bash
  15. #找到nginx的配置文件
  16. where is nginx
  17. cd /etc/nginx

思考问题:我们每次改动nginx配置文件,都需要进入容器内部?十分的麻烦

解决问题: 在容器外部提供一个映射路径,达到在容器外部修改文件名,容器内部就可以自动修改,用到的 -v数据卷

docker部署Tomcat

  1. #简化版,一步到位 docker run 就可以帮我们自动下载镜像
  2. #这里有个官方的坑,我们之前的启动都是后台,停止之后容器还在,用完即删,用于测试
  3. docker run -it --rm tomcat
  4. #不建议这样使用,按照我们的逻辑,先下载在使用
  5. docker pull tomcat
  6. docker run -d --name tomcat01 -p 3355:8080 tomcat
  7. #测试访问
  8. #如果在外网访问的话,没有界面,因为官方的tomcat是阉割版的,webapps目录是空的
  9. #进入容器
  10. docker exec -it tomcat01 /bin/bash
  11. #进入tomcat目录 将webapps.dist 拷贝到webapp就能访问,或者改名字
  12. cp  -r webapps.dist/* webapps
  13. #这样外部就可以访问了

思考问题: 如果每次部署项目,如果每次都进入容器是十分麻烦的,在外面映射 webapps,在外部放项目,就自动同步到内部就好了

解决问题:-v 数据卷

docker镜像原理(联合文件系统ufs 分层)

docker镜像是什么,镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,包含软件的所有东西,就是软件打包之后的轻量级软件包

所有的应用,直接打包docker镜像,就可以直接跑起来

如何得到镜像呢

第一种从远程仓库下载 ,别人拷贝给你 ,自己制作一个镜像DockerFile

UnionFS(联合文件系统)

UnionFS是一种分层,轻量级并且高性能的文件系统,支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同的目录挂载到同一个虚拟文件系统之下,如下载一次,在下高版本的,存在的就可以不用下载啦,这就是联合文件系统节省内存。

docker的底层 bootfs,是共用的底层,系统加载完底层之后就删掉了,这就是为什么在docker里的镜像会很小的原因

rootfs很小,只包含了一些最基本的命令和类库,就可以啦,由此可见不同版本的rootfs是一样的,所以可以共用rootfs

分层 通过基础镜像层去床架,每层之间是没有冲突的。

制作镜像

如何提交自己的镜像

  1. #容器改为镜像
  2. docker commit 容器id 目标镜像名:版本号
  3. #打包镜像压缩文件
  4. docker save -o 压缩文件名称 镜像名称 :版本号
  5. #加载镜像
  6. docker load -i 压缩文件名称

容器数据卷

容器数据卷,在容器中产生的数据保存到本地,如果容器丢失,则不会造成数据丢失,这就是卷技术(目录挂载,容器内挂载到容器外)

方式一 命 令挂载

  1. #使用数据卷
  2. docker run -it -v 主机目录:容器目录
  3. #目录挂载
  4. docker run -it -v /home/ceshi:/home tomcat /bin/bash
  5. #启动起来,查看容器信息,看是否挂载
  6. docker inspect 容器id

实战测试(mysql)

  1. #获取镜像
  2. docker pull mysql
  3. #创建容器 配置密码 目录挂载
  4. docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
  5. #测试连接端口号nervcat
  6. #这样就实现了数据库的持久化

多个mysql实现数据共享

  1. docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
  2. docker run -d -p 3310:3306  -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql
  3. ##这个时候就可以实现两个数据之间数据同步

具名和匿名挂载

  1. #匿名挂载
  2. -v 容器内路径
  3. docker run -d -p --name nginx01 -v /etc/nginx nginx
  4. #docker volume ls 查看所有的卷
  5. docker volume ls
  6. #会看到一堆数字,这就是挂载的目录
  7. #具名挂载
  8. docker run -d -p --name nginx02 -v juming_nginx:/etc/nginx nginx
  9. #推荐使用具名挂载
  10. #挂载
  11. 匿名  -v 容器内路径
  12. 具名 -v 卷名:容器内路径
  13. 指定路径挂载  -v 宿主机路径:容器内路径

拓展

  1. #通过-v 容器内路径:ro rw 改变读写权限
  2. ro 只读 rw 只写
  3. docker run -d -p --name nginx02 -v juming_nginx:/etc/nginx:ro nginx
  4. docker run -d -p --name nginx02 -v juming_nginx:/etc/nginx:rw nginx

DockerFile制作镜像

构建的步骤

  • 编写一个脚本文件

  • docker bulid 构建成为一个镜像

  • docker run 运行镜像

  • docker push 发布镜像(发布到DockerHub、阿里云镜像仓库!)

DockerFile是用来制作镜像

  1. #自己创建镜像
  2. #创建目录
  3. mkdir docker-test-volume
  4. #进入这个目录写脚本文件,通过这个脚本生成镜像
  5. vi dockerfile1
  6. --------------------------------------------------
  7. FROM centos                    #镜像以centos为基础
  8. VOLUME ["volume01","volume02"] #镜像挂载
  9. CMD echo "--end--"
  10. CMD /bin/bash                  #完毕之后打印---end--- 走的是bash
  11. --------------------------------------------------
  12. #构建镜像
  13. docker bulid -f /home/docker-test-volume/dockerfile1 -t shilei/centos .
  14. #查看自己的镜像
  15. docker images
  16. #dockerfile编写的命令
  17. FROM            #这个镜像的基础镜像是谁
  18. MAINTAINER      #镜像是谁写的 姓名+邮箱
  19. ADD             #步骤 tomcat镜像,这个tomcat压缩包就是要ADD的
  20. WORKDIR         #镜像的工作目录
  21. VOLUME          #挂载的位置
  22. EXPOSE          #暴露端口
  23. CMD             #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
  24. ENTRYPOINT      #指定这个容器启动的时候要运行的命令,可以追加命令
  25. ONBULID         #当构建的时候,就会触发这个指令
  26. ENV             #构建的时候设置环境目录
  27. RUN             #想让他干点啥

实战测试(Docker Hub中百分之九十九的镜像都是从整个基础镜像来的 FROM scratch)

  1. #创建自己的centos
  2. vi mycentos
  3. -------------------------------------
  4. FROM centos
  5. MAINTAINER shilei<1483642069@qq.com>
  6. ENV MYPATH /user/local
  7. WORKDIR $MYPATH
  8. RUN yum -y insatll vim
  9. RUN yum -y insatll net-tools
  10. EXPOSE 80
  11. CMD echo $MYPATH
  12. CMD echo "--end--"
  13. CMD /bin/bash
  14. ------------------------------------
  15. docker build
  16. #tomcat 镜像 准备镜像文件 tomcat压缩包 jdk压缩包
  17. ---------------------------------------
  18. FROM centos
  19. MAINTAINER shilei<1483642069@qq.com>
  20. COPY readme.txt /user/local/readme.txt
  21. ADD jdk-8ull-linux-x64.tar.gz /user/local                     #加入jdk压缩包
  22. ADD apache-tomcat-9.0.22.tar.gz /user/local                   #加入tomcat压缩包    
  23. RUN yum -y insatll vim                                        #加入vim命令
  24. ENV MYPATH /user/local                                        #以下是tomcat和jdk的环境变量配置
  25. WORKDIR $MYPATH
  26. ENV JAVA_HOME /user/local/jdk1.8.0_11
  27. ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  28. ENV CATALINA_HOME /user/local/apache-tomcat-9.0.22
  29. ENV CATALINA_BASE /user/local/apache-tomcat-9.0.22
  30. ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
  31. EXPOSE 8080
  32. CMD /user/local/apache-tomcat-9.0.22/bin/startup.sh&& tail -F /url/local/apache-tomcat-9.0.22/bin/logs/catalina.out
  33. -------------------------------------------
  34. #构建镜像
  35. docker build
  36. #发布镜像 注册自己的账号
  37. #先命令行登录
  38. docker login -u 账号 -p 密码
  39. docker push 镜像名
  40. #发布到阿里云镜像仓库
  41. #登录阿里云 找到镜像服务,创建命名空间,创建镜像仓库
  42. docker login --username=122555 registry.cn-beijing.aliyuncs.com 输入密码登录成功
  43. docker push

dockerfile是面向开发的,我们要发布项目,作镜像,就需要编写dockerfile文件,这个文件十分简单!Docker镜像已经成为企业交付的标准,开发 部署 运维

  • Dockerfile:构建文件,编写代码的步骤在这里

  • Docker 镜像:通过Dockerfile构建生成的镜像,最终发布和运行的产品

  • Dockerr 容器:容器就是镜像运行起来提供的服务器

Docker网络

理解docker网络,清空所有镜像

  1. #查看地址
  2. ip addr 看到几个网卡

问题:docker是如何处理容器网络访问的? 比如tomcat要访问数据库,要输什么呢

  1. #启动tomcat
  2. docker run -d -p --name tomcat01 tomcat
  3. #进入容器找到网卡
  4. docker exec -it tomcat01 ip addr
  5. #发现docker会给容器分配一个地址enth,linux可以ping通容器内部,同一个网段是可以ping通的
  6. #我们发现容器带来的网卡,都是一对对的
  7. #evth-pair 就是一堆的虚拟接口设备,他们是承兑出席那,彼此相连,桥接模式,正式因为有这个,evth-pair充当一个桥梁,连接各种设备
  8. #openStac,Docker,ovs容器之间的连接,都是使用的evth-pair技术

--link(容器连接)

  1. #我们编写一个服务,项目不重启,而数据库的ip换掉了,怎么办,
  2. #两个容器之间,不用通过地址和网络,直接ping通
  3. docker run -d -p --name tomcat03 --link tomcat02 tomcat
  4. #这样tomcat03可以ping通tomcat02,但是反向不可以

我们通常不使用docker网桥,我们自定义网络互联

  1. #查看所有的docker网络
  2. docker network ls
  3. #网络模式
  4. bridge :桥接 (docker默认)
  5. none: 不配置网络
  6. host: 和宿主机共享网络
  7. container:容器网络连通
  8. #我们直接启动的命令 --ner bridge 不写也是默认的
  9. ##自定义网络
  10. docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

springboot打包docker镜像

  1. #首先构建一个spring boot项目
  2. Dockerflie
  3. FROM java:8
  4. COPY *.jar /app.jar
  5. CMD ["--server.port=8080"]
  6. EXPOSE 8080
  7. ENTRYPOINT ["java","-jar","/app.jar"]
  8. #写一个服务

Docker Compose

Dockers Compose 来轻松管理容器,定义发布多个容器,容器编排

官方介绍

可以使用yml文件配置你的应用服务,可以使用single command 命令有哪些

使用步骤

  • 还是需要有dockerfile

  • 写yml文件 docker-compose.yml

  • docker-compose up

自己理解

compose是官方的开源项目,需要安装,dockerfile让程序在任何地方运行,如果有个web服务,tomcat redis nginx。。。

安装

  1. sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  2. #授权
  3. sudo chmod +x /usr/local/bin/docker-compose
  4. #查看安装成功
  5. [root@localhost bin]# docker-compose version
  6. docker-compose version 1.26.2, build eefe0d31
  7. docker-py version: 4.2.2
  8. CPython version: 3.7.7
  9. OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

docker-compose.yml 需要dockerFile做好所有镜像进行容器编排

示例 部署微服务docker compose

  1. version: "3.8"
  2. networks:
  3. edu:
  4. services:
  5. # 定义服务名字,只要不冲突即可
  6. gateway:
  7. # 镜像名字
  8. image: gateway:1.0
  9. # 自定义容器名字
  10. container_name: gateway
  11. ports:
  12. - "8222:8222"
  13. # 网络模式
  14. networks:
  15. - edu
  16. service_acl:
  17. image: service_acl:1.0
  18. container_name: service_acl
  19. ports:
  20. - "8009:8009"
  21. networks:
  22. - edu
  23. service_cms:
  24. image: service_cms:1.0
  25. container_name: service_cms
  26. ports:
  27. - "8004:8004"
  28. networks:
  29. - edu
  30. service_edu:
  31. image: service_edu:1.0
  32. container_name: service_edu
  33. ports:
  34. - "8001:8001"
  35. networks:
  36. - edu
  37. service_msm:
  38. image: service_msm:1.0
  39. container_name: service_msm
  40. ports:
  41. - "8006:8006"
  42. networks:
  43. - edu
  44. service_order:
  45. image: service_order:1.0
  46. container_name: service_order
  47. ports:
  48. - "8007:8007"
  49. networks:
  50. - edu
  51. service_oss:
  52. image: service_oss:1.0
  53. container_name: service_oss
  54. ports:
  55. - "8002:8002"
  56. networks:
  57. - edu
  58. service_statistics:
  59. image: service_oss:1.0
  60. container_name: service_statistics
  61. ports:
  62. - "8008:8008"
  63. networks:
  64. - edu
  65. service_ucenter:
  66. image: service_ucenter:1.0
  67. container_name: service_ucenter
  68. ports:
  69. - "8160:8160"
  70. networks:
  71. - edu
  72. service_vod:
  73. image: service_vod:1.0
  74. container_name: service_vod
  75. ports:
  76. - "8003:8003"
  77. networks:
  78. - edud

命令总结

  1. #启动docker
  2. systemctl start docker [stop restart]
  3. #######镜像命令
  4. #当前系统镜像列表
  5. docker images                  
  6. #拉取镜像
  7. docker pull 镜像名[tag]        
  8. #删除镜像
  9. docker rmi -f 镜像名||镜像id    
  10. #保存加载镜像
  11. docker save 保存镜像jar
  12. docker load 加载刚刚保存的jar
  13. #搜索镜像
  14. doucker search 镜像名
  15. #######容器命令
  16. #创建容器
  17. docker run [可选参数] 镜像名字  
  18. --name   给容器取个名字
  19. -d       后台运行
  20. -it       使用交互的方式运行,进入容器查看内容
  21. -P       将容器的端口和主机映射 -p 8080:8088
  22. -p       随机指定端口
  23. -v 主机目录:容器目录
  24. #查看挂载详情
  25. docker inspect 容器id
  26. #进入容器
  27. docker exec -it 容器id /bin/bash
  28. #查看日志
  29. #查看日志
  30. docker logs -f 容器
  31. #删除容器
  32. docker rm 容器id
  33. #重启删除容器
  34. docker start 容器id
  35. docker restart 容器id
  36. docker stop 容器id
  37. docker kill 容器id
  38. #######自定义镜像
  39. # DockerFile
  40. --------------------------------------------------
  41. FROM centos                    #镜像以centos为基础
  42. VOLUME ["volume01","volume02"] #镜像挂载
  43. CMD echo "--end--"
  44. CMD /bin/bash                  #完毕之后打印---end--- 走的是bash
  45. --------------------------------------------------
  46. #dockerfile编写的命令
  47. FROM            #这个镜像的基础镜像是谁
  48. MAINTAINER      #镜像是谁写的 姓名+邮箱
  49. ADD             #步骤 tomcat镜像,这个tomcat压缩包就是要ADD的
  50. WORKDIR         #镜像的工作目录
  51. VOLUME          #挂载的位置
  52. EXPOSE          #暴露端口
  53. CMD             #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
  54. ENTRYPOINT      #指定这个容器启动的时候要运行的命令,可以追加命令
  55. ONBULID         #当构建的时候,就会触发这个指令
  56. ENV             #构建的时候设置环境目录
  57. RUN             #想让他干点啥
  58. #docker bulid 构建成为一个镜像 docker run 运行镜像 docker push 发布镜像(发布到DockerHub、阿里云镜像仓库!、私服)
  59. #######Docker Compose
  60. #Compose可以多容器快速部署
  61. version: '3'
  62. services:
  63. web:
  64.   build: . // 当前目录下的文件构建成一个镜像使用
  65.   ports:
  66.     - "5000:5000"
  67. redis:
  68.   image: "redis:alpine" // 镜像是来自仓库
  69. #运行compose文件
  70. docker-compose up
容器排布请详见本专栏k8s专栏

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/169012
推荐阅读
相关标签
  

闽ICP备14008679号