• 云原生Java架构实战Docker原理说明及使用+idea使用docker插件一键部署(一篇就够了)


    中文说明文档

    https://www.yuque.com/leifengyang/oncloud/mbvigg

    官网

    https://www.docker.com/

    Docker安装(建议使用centos8以下7以上的版本,8很多坑)

    移除以前docker相关包

    sudo yum remove docker*
    
    • 1

    配置yum源

    sudo yum install -y yum-utils
    sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    • 1
    • 2
    • 3
    • 4

    安装docker

    sudo yum install -y docker-ce docker-ce-cli containerd.io
    
    • 1

    启动docker容器

    systemctl enable docker --now
    
    • 1

    配置阿里云加速

    这里额外添加了docker的生产环境核心配置cgroup

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "100m"
      },
      "storage-driver": "overlay2"
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    “registry-mirrors”:
    [“https://82m9ar63.mirror.aliyuncs.com”]这里需要替换成自己的加速器地址

    在这里插入图片描述

    在这里插入图片描述

    Docker镜像商店

    https://hub.docker.com/
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    docker基本命令

    查看下载的镜像
    docker images
    
    • 1

    在这里插入图片描述

    删除镜像

    docker rmi 容器的IMAGE ID (如果id相同则以REPOSITORY:TAG代替容器的IMAGE ID)
    在这里插入图片描述

    查看正在运行的容器命令
    docker ps -a
    
    • 1
    运行镜像命令
    docker run --help :查看帮助
    docker run 容器的IMAGE ID
    
    • 1
    • 2

    —name:为运行的容器自定义名称 如 docker run --name myXXXXX 容器的IMAGE ID
    -d :后台运行 如 docker run --name myXXXXX -d 容器的IMAGE ID
    –restart=always :开启自启,如服务器宕机后重启,docker内的服务也会重启
    docker run --name myXXXXX -d --restart=always 容器的IMAGE ID

    如果最开始没有设置开机重启那么可以使用命令对镜像启动进行修改

    docker update 容器的IMAGE ID --restart=always
    -p :端口映射,如将主机的88端口映射到镜像的80端口上,那么通过公网ip:88即可访问容器中的80端口
    docker run --name myXXXXX -d --restart=always -p 88:80 容器的IMAGE ID

    容器停止后再启动需要先删除停止的镜像才可以启动
    docker ps -a
    docker rm 容器的IMAGE ID
    
    • 1
    • 2
    强制通知正在运行的镜像
    docker rm -f 容器的IMAGE ID
    
    • 1
    停止镜像
    docker ps
    docker stop 容器的IMAGE ID
    
    • 1
    • 2
    再次启动镜像
    docker ps -a
    docker start 容器的IMAGE ID
    
    • 1
    • 2
    进入容器内部
    docker ps
    docker exec -it 容器的IMAGE ID /bin/bash
    
    • 1
    • 2

    在这里插入图片描述

    将修改后的镜像提交
    dcoker commit --help
    
    • 1

    在这里插入图片描述

    -a:作者信息
    -c:将Dockerfile指令应用于创建的映像
    -m:修改后的内容备注
    -p:提交期间暂停容器(默认为true)

    如:dcoker commit -a “作者XXX” -m “修改了XXX” 容器的IMAGE_ID 自定义镜像名(字母必须小写)
    在这里插入图片描述
    再次启动直接启动提交后的镜像即可

    镜像保存压缩包
    docker save -o xxxx.tar  镜像id
    
    • 1

    在这里插入图片描述

    加载镜像压缩包
    docker load -i xxx.tar
    
    • 1
    指定容器中的文件复制到服务器中
    docker cp 容器的IMAGE ID:/etc/nginx/nginx.conf(需要复制到服务器的文件路径) /usr/local/nginx/nginx.conf(复制到服务器的路径)
    
    • 1
    指定服务器中的文件复制到容器中
    docker cp /usr/local/nginx/nginx.conf(服务器的文件路径) 容器的IMAGE ID:/etc/nginx/nginx.conf(容器的文件路径)
    
    • 1
    镜像推送至docker hub

    首先需要注册https://hub.docker.com/ 账号密码
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    首先将镜像打包:docker tag 镜像名:版本号 1309832337/docke(这里为你创建仓库的地址):版本号
    在这里插入图片描述
    然后使用命令在服务器中登录docker hub并推送

    docker login
    docker push 1309832337/docker:v1.0
    
    • 1
    • 2

    在这里插入图片描述
    在这里插入图片描述
    登出docker hub命令:

    docker logout
    
    • 1
    拉取自己仓库中的私有镜像

    在这里插入图片描述
    注:如果设置仓库是私有的那么在拉取时需要登录docker hub:docker login
    删除在docker hub上创建的仓库

    在这里插入图片描述
    在这里插入图片描述

    查看容器的运行日志
    docker logs 容器的IMAGE ID
    
    • 1

    docker挂载数据到外部使用

    这里需要注意一点挂载方式类似于覆盖的方式,就是将容器内的指定目录文件挂载到镜像外部也就是服务器中,比如nginx的conf文件,将容器内的conf文件挂载到服务器中的文件夹中的/usr/local/nginx,这里需要保证/usr/local/nginx文件夹下需要有一个这样的conf文件,否则容器内的文件将会不存在

    指定容器中的文件复制到服务器中

    docker cp 容器的IMAGE ID:/etc/nginx/nginx.conf(需要复制到服务器的文件路径) /usr/local/nginx/nginx.conf(服务器的路径)
    
    • 1

    挂载前关掉需要挂载的镜像保证docker ps -a没有需要挂载的镜像的进程,然后使用docker run启动镜像命令:

    docker run --name myXXXXX -d --restart=always -p 88:80 -v /usr/local/nginx:/etc/nginx/nginx.conf:ro 容器的IMAGE ID
    
    • 1

    -v 挂载到服务器的哪个目录下:容器内需要挂载的哪个文件:ro(镜像容器内该文件不能更改,rw为可以更改)

    将应用打包成镜像(DockerFile)

    编写Dockerfile并将项目打包

    #指定镜像jdk版本
    FROM openjdk:8-jdk-alpine
    #指定作者名
    LABEL maintainer=ys
    
    #将target下的jar文件更名为app.jar
    COPY target/*.jar /app.jar
    
    #jar包启动命令
    ENTRYPOINT ["java","-jar","/app.jar"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    将项目中的这两个文件上传到服务器 target文件夹中只需包含jar文件即可
    在这里插入图片描述
    在这里插入图片描述
    在该目录下执行命令(这里的 . 代表在当前目录下执行):

    docker build -t pay:v1.0 .
    
    • 1

    在这里插入图片描述
    使用docker run 命令启动即可

    docker安装redis

    redis使用自定义配置文件启动命令

    docker pull redis
    mkdir /data/redis
    touch redis.conf
    docker run -v /data/redis/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data -d -p 10999:6379 --name myredis redis redis-server /etc/redis/redis.conf
    
    • 1
    • 2
    • 3
    • 4

    设置redis密码:redis.conf (添加密码:requirepass 123456789,持久化:appendonly yes)
    重启redis镜像即可

    springboot项目docker一键部署

    修改Dokcer 允许远程连接

    vi /usr/lib/systemd/system/docker.service
    
    • 1

    1:将ExecStar属性修改为
    2:8849 为连接开放端口,根据个人情况修稿

    ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
    
    • 1

    在这里插入图片描述
    重新读取配置文件

    systemctl daemon-reload
    
    • 1

    重新启动Docker

    systemctl restart docker
    
    • 1

    注:建议指定ip不要使用0.0.0.0否则服务器会判定你在做挖矿,会自动关闭你的服务器

    IDEA 安装Docker 插件

    在这里插入图片描述

    IDEA 配置远程连接Docker

    在这里插入图片描述
    pom.xml 添加配置

    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>1.0.0</version>
    
        <!--将插件绑定在某个phase执行-->
        <executions>
            <execution>
                <id>build-image</id>
                <!--将插件绑定在package这个phase上。也就是说,
                用户只需执行mvn package ,就会自动执行mvn docker:build-->
                <phase>package</phase>
                <goals>
                    <goal>build</goal>
                </goals>
            </execution>
        </executions>
    
        <configuration>
            <!--指定生成的镜像名,这里是我们的项目名-->
            <imageName>${project.artifactId}</imageName>
            <!--指定标签 这里指定的是镜像的版本,我们默认版本是latest-->
            <imageTags>
                <imageTag>latest</imageTag>
            </imageTags>
            <!-- 指定我们项目中Dockerfile文件的路径-->
            <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
    
            <!--指定远程docker 地址-->
            <dockerHost>http://ip地址:2375(端口号)</dockerHost>
    
            <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
            <resources>
                <resource>
                    <targetPath>/</targetPath>
                    <!--jar包所在的路径  此处配置的即对应项目中target目录-->
                    <directory>${project.build.directory}</directory>
                    <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
                    <include>${project.build.finalName}.jar</include>
                </resource>
            </resources>
        </configuration>
    </plugin>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    在src/main/docker目录下创建Dockerfile文件
    在这里插入图片描述

    # 安装jdk8
    FROM java:8
    #因为这是Spring Boot应用程序默认为Tomcat创建工作目录的地方。效果是在“/var/lib/docker”下的主机上创建一个临时文件,并将其链接到“/ tmp”下的容器。
    #对于我们在此处编写的简单应用程序,此步骤是可选的,但如果需要在文件系统中实际编写,则对于其他Spring Boot应用程序可能是必需的。
    VOLUME /tmp
    # 版本
    LABEL version=V1.0
    # 作者
    MAINTAINER ys
    # jar包更名为app.jar
    ADD *.jar app.jar
    # docker端口号
    EXPOSE 2375
    # 启动jar 为了减少Tomcat的启动时间,我们添加了一个指向“/dev/urandom”的系统属性作为熵源。
    # 如果您使用Tomcat(或任何其他Web服务器)的“标准”版本,则不需要更新版本的Spring Boot。
    ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    如果没有出现这个窗口
    在这里插入图片描述
    创建容器,项目部署到docker
    我们在docker窗口中,找到我们刚才创建的镜像文件,鼠标右键,选择Create container,我们修改创建容器所需要的配置。
    在这里插入图片描述
    在Create Docker Configuration弹窗中修改Container name(容器名称) Bind ports(Ip和端口映射)

    我在这里添加9001:8080. 使用服务器的9001端口,去访问容器(服务)的8080
    在这里插入图片描述
    我们点击Run之后,就会自动创建容器并启动。
    我们可以看到在docker插件中,多出了一个容器,并且启动成功
    在这里插入图片描述
    再次打包后会替换
    在这里插入图片描述
    参考:
    idea 使用docker插件,实现一键自动化部署。

  • 相关阅读:
    奥特曼autMan机器人安装,开启插件市场+对接QQ、微信、公众号教程
    print语句的续行问题
    微信小程序分享一个视频给好友
    Layui自定义列表多选
    vue点击事件
    UML软件建模软件StarUML mac中文版软件介绍
    MATLAB 嵌套switch语句
    Lua Table(表)
    c++primer
    「Python条件结构」显示学号及提示信息
  • 原文地址:https://blog.csdn.net/pengxiaozhong/article/details/126832887