docker & idea 集成开发环境搭建

1. 官网安装教程

  • Uninstall old versions

    sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine

     

  • SET UP THE REPOSITORY

    sudo yum install -y yum-utils
    sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
  • INSTALL DOCKER ENGINE

    sudo yum install docker-ce docker-ce-cli containerd.io

 

2. 配置docker

  • vim /etc/docker/daemon.json
    
    {"exec-opts":["native.cgroupdriver=systemd"],"registry-mirrors":["https://docker.mirrors.ustc.edu.cn/"],"insecure-registries":["172.17.0.8"]}
    
    # native.cgroupdriver:k8s的kubelet使用的是systemd驱动。如果要搭建k8s这里需要配置下,修改kubelet配置也可以,相对麻烦点;
    # registry-mirrors:镜像下载地址,修改为国内地址,加速镜像下载速度;
    # insecure-registries:docker私有仓库默认是通过https访问的,配置为非安全模式,可以通过http的方式访问私有仓库
    
    #重启docker守护进程
    sudo systemctl daemon-reload
    sudo systemctl restart docker

     

3. docker常用操作

  • docker build 根据dockerfile构建镜像
    docker search imageName 搜索镜像(模糊搜索)
    docker pull imageName 拉取镜像
    docker rmi [-f] imageId/imagename 删除镜像
    docker image ls 查看镜像
    docker image inspect imageId/imagename 查看镜像的详细信息
  • docker 非交互式启动容器 如 docker run -v /demo/logs:/demo/logs --name register --net host devops_register
    docker 交互式启动容器 docker run -it devops_register /bin/bash
    docker rm [-f] containerId/containerName 删除容器
    docker ps 查看所有运行的容器
    docker container ls [-a] 查看运行的容器 :-a 查看所有容器
    docker container inspect  containerId/containerName 查看容器的详细信息
  • docker network create networkName 创建网络
    docker network connect containerId/containerName networkId/networkName 把容器连接到指定网络上
    docker network inspect networkId/networkName 查看网络的详细信息
    docker network ls 查看网络
  • docker cp source target 把容器中的配置文件拷到宿主机上。然后通过-v 与容器中的文件映射。
    通常通过自定义配置文件装软件的时候需要这种操作(不用自定义配置文件的话,可以直接通过docker run -e指定环境变量)

4. 修改启动服务支持远程tcp连接

  •     find / -name docker.service
  • vim /usr/lib/systemd/system/docker.service
    找到ExecStart参数, 修改为 /usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 (默认2375,本人服务器上2375端口有问题)

5. idea 连接远程docker

  • 把service窗口添加到工具栏
  • 添加docker配置并配置docker,配置好后,双击Docker 或者右键connect 连接远程docker

6. 项目使用docker部署(通过docker启动项目)

  • 新建springboot项目(略)并配置dockerfile,内容如下
    FROM mcr.microsoft.com/java/jdk:8u272-zulu-centos # jdk环境,最好是提前准备好
    ENV JAVA_OPTIONS=""                               # jvm参数
    ADD target/*.jar /app.jar                         # 运行jar包,ADD 后的jar路径与dockerfile文件路径有关,是相对dockerfile的路径
    HEALTHCHECK --interval=60s --timeout=30s --start-period=60s --retries=3 CMD curl -f http://localhost/check/heart || exit 1            # 健康检查
    CMD java $JAVA_OPTIONS -jar /app.jar              # 主应用启动命令
    # 后面只发布不运行的话,需要在服务端执行下面命令启动容器
    docker run -d -p 8889:8888 \
              -e "JAVA_OPTIONS=-Xmx1024m -Djava.security.egd=file:/dev/./urandom" \ #配置jvm参数
              -e "SPRING_PROFILES_ACTIVE=dev" \ # 配置spring应用环境
              -v /data/logs/framework:/app/logs # 日志映射到宿主机
              --name register register          # 前一个register是容器名,后面那个是镜像名

     

  • docker启动配置
  • 本地测试通过后,保证target目录下生成部署jar包(项目如果有修改重启项目,jar包不会更新,所以发布前最好用idea上的maven打个包),dockerfile构建容器会用到

7. 通过docker-maven-plugin直接部署镜像到docker,除了共用一个dockerfile外跟6中的内容没有任何关系。
6中直接构建镜像并启动容器,此处只构建镜像并部署到docker,如果要启动容器需要到docker 所在服务器通过docker run 启动
双击package后可以切到service窗口只有镜像没有容器(考虑到网络问题部署到云端docker的话可能会有点慢,耐心点就可以看到理想结果,单机或者本地虚拟机会很快看到结果)

        <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <executions>
                    <execution>
                        <id>build-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!--指定生成的镜像名-->
                    <imageName>register</imageName>
                    <!--指定标签-->
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <!-- 指定 dockerfile 路径,与6中的是同一个dockerfile -->
                    <dockerDirectory>${project.basedir}</dockerDirectory>
                    <!--指定远程 docker 暴露的地址-->
                    <dockerHost>http://ip:2376</dockerHost>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>

8. 记录下写这篇文章遇到的坑

docker 默认远程端口(2375)不可用(内网可以,外网死活用不了)。
尝试了tracerout 跟踪请求,telnet 端口,tcpdump抓包,修改腾讯云安全组的入站策略。添加TCP:2375 通过 通通没用
最后实在没办法直接换成了2376端口,问题解决了。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值