• Docker入门开发


    1. Docker安装
      1. 1、登录root,更新yum
      2. yum update
      3. 2、安装过旧版本先卸载旧版本
      4. yum remove docker docker-common docker-selinux docker-engine
      5. 3、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
      6. yum install -y yum-utils device-mapper-persistent-data lvm2
      7. 4、设置yum源
      8. yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
      9. 5,安装最新版本的Docker
      10. yum install docker-ce docker-ce-cli containerd.io
      11. 6,启动Docker并设置开机启动
      12. systemctl start docker
      13. systemctl enable docker
      14. 7,验证Docker
      15. docker version
    2. 配置阿里云镜像
       https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

       
      1. {
      2. "registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
      3. }
    3. Docker基本命令
      1. 1.启动Docker:systemctl start docker
      2. 2.停止Docker:systemctl stop docker
      3. 3.重启Docker:systemctl restart docker
      4. 4.开机启动Docker:systemctl enable docker
      5. 5.查看Docker概要信息:docker info
      6. 6.查看Docker帮助文档:docker --help
      7. 7.查看Docker版本信息:docker version
    4.  Docker镜像与容器命令
      1. 1.镜像搜索、下载、查看、删除多个、删除所有
      2. 搜索网址:https://hub.docker.com
      3. docker pull 镜像名称:[TAG]
      4. docker images
      5. docker rmi -f 镜像ID1 镜像ID2
      6. docker rmi -f $(docker images -qa)
      7. 2.镜像ID 启动容器
      8. 交互式启动(启动后进入容器路径):docker run -it --name 别名 镜像ID
      9. 守护式启动(启动后留在Centos路径):docker run -id --name 别名 镜像ID
      10. 执行命令启动:docker run -it --name 别名 镜像ID 命令
      11. 端口映射启动;docker run -it -p 8888:8080 --name 别名 镜像ID
      12. 3.容器ID 启动、停止、重启、删除多个、删除所有
      13. docker start、stop、restart 容器ID
      14. docker rm -f 容器ID1 容器ID2
      15. docker rm -f $(docker ps -qa)
      16. 4.查看容器
      17. 运行的:docker ps
      18. 停止的:docker ps -f status=exited
      19. 所有的:docker ps -a
      20. 最近创建的2个:docker ps -n 2
      21. 容器日志(Centos路径下):/var/lib/docker/containers
      22. 5.进入、退出容器
      23. 进入:docker exec -it 容器ID /bin/bash
      24. 退出:exit(容器停止运行)、ctrl+P+Q(容器不停止运行)
      25. 6.文件、目录复制
      26. docker cp Centos文件 容器ID:容器目录
      27. docker cp 容器ID:容器目录 Centos目录
      28. 7.文件、目录挂载
      29. docker run -it -v /Centos目录1:/容器目录1 -v /Centos目录2:/容器目录2 镜像ID
      30. Centos与容器关联只读:docker run -it -v /Centos目录:/容器目录:ro 镜像ID
    5. Docker镜像备份

      1. 1.容器打包为本地镜像:docker commit -a='作者' -m='备注' 容器ID 新镜像名称:[TAG]
      2. 2.镜像备份到hub服务器(1756357751/mytomcat为hub服务器中创建的仓库位置):
      3. 注册账号:https://hub.docker.com/
      4. 登录hub服务器:docker login
      5. 镜像打标签:docker tag 镜像ID 1756357751/mytomcat
      6. 镜像上传:docker push 1756357751/mytomcat
      7. 3.镜像从hub服务器下载(1756357751/mytomcat为hub服务器中创建的仓库位置):
      8. 登录hub服务器:docker login
      9. 镜像下载:docker push 1756357751/mytomcat:[TAG]
      10. 4.镜像备份到阿里云
      11. 登录阿里云:https://cr.console.aliyun.com
      12. 创建命名空间/仓库:1756357751/mytomcat
      13. $ docker login --username=用户名 registry.cn-hangzhou.aliyuncs.com
      14. $ docker tag [镜像ID] registry.cn-hangzhou.aliyuncs.com/1756357751/mytomcat:[TAG]
      15. $ docker push registry.cn-hangzhou.aliyuncs.com/1756357751/mytomcat:[TAG]
      16. 5.镜像从阿里云下载(1756357751/mytomcat为阿里云创建的仓库位置):
      17. $ docker pull registry.cn-hangzhou.aliyuncs.com/1756357751/mytomcat:[TAG]
    6. Docker安装Tomcat

      1. 1.下载镜像
      2. docker pull 镜像名称:[TAG]
      3. 2.镜像ID运行容器(无挂载启动)
      4. docker run -it -p 8888:8080 --name 容器别名 镜像ID
      5. 3.Centos创建挂载目录/home/docker/tomcat
      6. 4.复制容器/usr/local/tomcat/conf、/usr/local/tomcat/webapps到挂载目录
      7. docker cp 容器ID:/usr/local/tomcat/conf /home/docker/tomcat/
      8. docker cp 容器ID:/usr/local/tomcat/webapps /home/docker/tomcat/
      9. 5.删除无挂载运行的容器
      10. docker rm -f 容器ID
      11. 6.镜像ID运行容器(挂载启动)
      12. docker run -d --name 容器别名 -p 8888:8080 -v /home/docker/tomcat/conf/:/usr/local/tomcat/conf/ -v /home/docker/tomcat/webapps/:/usr/local/tomcat/webapps/ -v /home/docker/tomcat/logs/:/usr/local/tomcat/logs/ 镜像ID
      13. 7.配置tomcat:/home/docker/tomcat/conf/server.xml添加如下标签(请求路径省去项目名称)
      14. "" docBase="/usr/local/tomcat/webapps/war包名" debug="0" reloadable="true"/>
      15. 8.修改tomcat配置后重启容器
      16. docker restart 容器ID
    7. Docker安装Mysql

      1. 1.下载镜像
      2. docker pull 镜像名称:[TAG]
      3. 2.镜像ID运行容器(无挂载启动)
      4. docker run -it -p 3306:3306 --name 容器别名 -e MYSQL_ROOT_PASSWORD=123456 镜像ID
      5. 3.Centos创建挂载目录/home/docker/mysql
      6. 4.复制容器/etc/mysql/conf.d、/var/log、/var/lib/mysql到挂载目录
      7. docker cp 容器id:/etc/mysql/conf.d /home/docker/mysql/
      8. docker cp 容器id:/var/log /home/docker/mysql/
      9. docker cp 容器id:/var/lib/mysql /home/docker/mysql/
      10. 5.删除无挂载运行的容器
      11. docker rm -f 容器ID
      12. 6.镜像ID运行容器(挂载启动)
      13. docker run -it -p 3306:3306 --name 容器别名 -v /etc/mysql/conf.d/:/home/docker/mysql/conf/ -v /var/log:/home/docker/mysql/log/ -v /var/lib/mysql/:/home/docker/mysql/mysql/ -e MYSQL_ROOT_PASSWORD=123456 镜像ID
      14. 7.Mysql客户端连接docker里的数据库(root:123456
      15. 8.注意:如果Centos已经安装过Mysql,镜像ID运行容器时将报错3306端口被占用,容器虽然可以成功创建但是无法启动,可以换个端口启动(3306:3306改为3307:33063308:3306。。。)
    8.  DockerFile构建镜像
      https://pan.baidu.com/s/1cf32DySXipd0D5GtkS37Gw?pwd=0h54
      1. 构建命令(注意结尾句号):
      2. docker build -f DockerFile路径 -t 镜像别名:镜像版本 .
      1. # DockerFile构建Centos
      2. FROM centos:7
      3. MAINTAINER changwq<1756357751@qq.com>
      4. LABEL name="My CentOS Image" \
      5. build-date="20220818"
      6. ENV WORKPATH /home/centos
      7. WORKDIR $WORKPATH
      8. RUN yum -y install net-tools
      9. RUN yum -y install vim
      10. EXPOSE 80
      11. CMD /bin/bash
      1. # DockerFile构建Tomcat
      2. # 使用centos:7基础镜像启动构建流程
      3. FROM centos:7
      4. # 声明镜像维护者信息
      5. MAINTAINER changwq
      6. # 镜像描述元信息
      7. LABEL name="My Tomcat Image" \
      8. build-date="20220818"
      9. # 将Centos的文件复制到容器,ADD命令时tar类型文件会自动解压
      10. COPY copyright.txt /home/copyright.txt
      11. ADD server-jre-8u151-linux-x64.tar.gz /home/
      12. ADD apache-tomcat-8.5.37.tar.gz /home/
      13. # 从Centos进入容器时的工作目录
      14. ENV WORKPATH /home/apache-tomcat-8.5.37/
      15. WORKDIR $WORKPATH
      16. # 配置环境变量
      17. ENV JAVA_HOME /home/jdk1.8.0_151
      18. ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
      19. ENV CATALINA_HOME /home/apache-tomcat-8.5.37/
      20. ENV CATALINA_BASE /home/apache-tomcat-8.5.37/
      21. ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
      22. # 容器对外暴露的端口
      23. EXPOSE 8080
      24. # 执行Tomcat启动命令
      25. CMD ["/home/apache-tomcat-8.5.37/bin/catalina.sh","run"]
      1. # DockerFile挂载测试
      2. FROM centos:7
      3. # 将容器/home/v1、/home/v2两个目录挂载到Centos
      4. VOLUME ["/home/v1","/home/v2"]
      5. # 启动容器后启动bash(docker中必须要保持一个进程的运行)
      6. CMD /bin/bash
      7. # =======================================================================================
      8. # 查看容器挂载详情:
      9. docker inspect 容器ID
      10. # =======================================================================================
      11. # Source和Destination为Centos和容器对应的挂载目录(对应Centos目录为自动生成,无法指定,不推荐)
      12. "Mounts": [
      13. {
      14. "Type": "volume",
      15. "Name": "cfdaad333ba455c7dc447ab11d45e12bf3ced61f43cae385f7340ba9f956a7ba",
      16. "Source": "/var/lib/docker/volumes/cfdaad333ba455c7dc447ab11d45e12bf3ced61f43cae385f7340ba9f956a7ba/_data",
      17. "Destination": "/home/v1",
      18. "Driver": "local",
      19. "Mode": "",
      20. "RW": true,
      21. "Propagation": ""
      22. },
      23. {
      24. "Type": "volume",
      25. "Name": "b653857d51ffb9ebf5e50b313121009f98c81ca3a7ce8e78b129f77570dc13a6",
      26. "Source": "/var/lib/docker/volumes/b653857d51ffb9ebf5e50b313121009f98c81ca3a7ce8e78b129f77570dc13a6/_data",
      27. "Destination": "/home/v2",
      28. "Driver": "local",
      29. "Mode": "",
      30. "RW": true,
      31. "Propagation": ""
      32. }
      33. ]
      34. # =======================================================================================
      35. CMD 语法;
      36. CMD ["执行命令","param1","param2"](执行命令并提供参数)
      37. CMD ["param1","param2"](ENTRYPOINT执行命令后通过CMD为ENTRYPOINT追加参数)
      38. ENTRYPOINT 语法;
      39. ENTRYPOINT ["执行命令", “param1”, “param2”] (推荐)
      1. # 镜像构建问题分析
      2. # =======================================================================================
      3. docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "/home/apache-tomcat-8.5.37/bin/catalina.sh": stat /home/apache-tomcat-8.5.37/bin/catalina.sh: no such file or directory: unknown.
      4. 分析:压缩命令中使用了绝对路径tar -zcvf apache-tomcat-8.5.37.tar.gz /home/docker/dockerfile/apache-tomcat-8.5.37,导致压缩包复制到容器解压后目录结构为/home/docker/dockerfile/apache-tomcat-8.5.37,容器启动时执行catalina.sh命令无法找到
      5. #========================================================================================
      6. docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "/home/apache-tomcat-8.5.37/bin/catalina.sh": permission denied: unknown.
      7. 分析:tomcat压缩包解压后catalina.sh可执行文件没有可执行权限,需要添加可执行权限后重新压缩
      8. # =======================================================================================
      9. Caused by: java.lang.IllegalArgumentException: The main resource set specified [/usr/local/tomcat/webapps/MyWeb] is not valid
      10. at org.apache.catalina.webresources.StandardRoot.createMainResourceSet(StandardRoot.java:748)
      11. at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:706)
      12. at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
      13. ... 9 more
      14. 分析:tomcat压缩包解压后webapps放入了自己的项目MyWeb,server.xml中配置了<Context path="" docBase="/usr/local/tomcat/webapps/war包名" debug="0" reloadable="true"/>,其中docBase未根据DockerFile中指定的工作目录ENV WORKPATH /home/apache-tomcat-8.5.37/重新指定
    9.  Docker私有仓库
      1. 1.拉取私有仓库镜像
      2. docker pull registry
      3. 2.守护式启动私有仓库(启动后留在Centos路径)
      4. docker run -id -p 5000:5000 --name=my_registry registry
      5. 3.访问测试
      6. http://192.168.1.239:5000/v2/_catalog
      7. 4.etc/docker 修改daemon.json,让docker信任私有仓库地址
      8. "insecure-registries": ["192.168.1.239:5000"]
      9. 第五步:修改配置后重启docker;
      10. systemctl restart docker
      11. 第一步:标记此镜像为私有仓库的镜像
      12. docker tag tomcat:7 192.168.1.112:5000/mytomcat7
      13. 第二步:上传镜像到私有仓库
      14. docker push 192.168.1.112:5000/mytomcat7
      15. 第三步:删除192.168.1.112:5000/mytomcat7本地仓库镜像
      16. docker rmi -f 192.168.1.112:5000/mytomcat7
      17. 第四步:从私有仓库拉取192.168.1.112:5000/mytomcat7镜像,并运行;
      18. docker run -it -p 8080:8080 192.168.1.112:5000/mytomcat7
      19. 第五步:浏览器运行 http://192.168.1.112:8080测试

    https://blog.csdn.net/caoli201314?type=blog

  • 相关阅读:
    ES & Kibana 简介
    python网络爬虫笔记15:使用js验证获取网页的请求头信息和请求参数
    企业微信开发教程一:添加企微应用流程图解以及常见问题图文说明
    制造业进销存管理怎么做?
    力扣记录:Hot100(7)——207-240
    [2023 java毕业设计源码]基于SpringBoot的在线交友系统包运行成功]
    logback--进阶--02--Logger,Appenders 和 Layouts
    Find My头盔|苹果Find My技术与头盔结合,智能防丢,全球定位
    C++面向对象编程(3)——常用关键字介绍(TODO)
    事务管理需要了解的前置知识
  • 原文地址:https://blog.csdn.net/tongxin_tongmeng/article/details/126363506