Docker的使用和基于Springboot项目部署学习记录

[TOC]

Docker架构

docker架构图

Client:Docker客户端

Images:Docker镜像

Containers:容器

Registry:存储镜像的仓库,类似Maven仓库保存jar包

个人理解:客户端操作的是容器,容器依赖镜像,镜像可以从仓库取,也可以自己创建镜像。

安装

-- 删除旧的docker
sudo yum -y remove docker-engine
sudo rm -rf /var/lib/docker
sudo yum -y remove docker
-- 设置Yum源
sudo yum install -y yum-utils
-- 阿里的docker源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum makecache fast
sudo yum install docker-ce docker-ce-cli
-- 启动Docker
sudo systemctl start docker
-- 验证是否安装正确
sudo docker run hello-world
-- 查看版本
docker version

常用命令

docker search java 搜索docker仓库的java镜像
docker pull java 下载镜像
docker pull java:8 下载指定版本镜像
docker rmi hello-world 删除镜像

docker run -d -p 8720:80 nginx:my 启动一个nginx的容器
-d 后台运行 -p端口映射 前一个端口是浏览器输入的端口,后一个端口是容器内启动的端口
docker run创建容器是会先检查本地是否有指定镜像没有的话会从docker仓库下载并启动

docker ps 列出启动的容器,查看所有容器 docker ps-a
docker stop 123123dqd1 停止容器
docker kill 112edqe1e 强制停止容器
docker start e213123 启动已经停止的容器
docker restart 重启容器
docker rm -f 5801a90f2161 强制删除容器

docker inspect --format "{{.State.Pid}}" 621a9c0a6df4 获取pid
nsenter --target 31165 --mount --uts --ipc --net --pid 进入容器
ctrl + d 退出容器

Dockerfile构建镜像

语法见:https://www.runoob.com/docker/docker-dockerfile.html

使用示例:

mkdir docker 现在本地创建一个文件夹 
cd docker
                 然后手动传一个jar包
mkdir Dockerfile 创建一个Dockerfile文件
vi Dockerfile 进入编辑

FROM java:8
VOLUME /tmp
ADD springbootchat-1.0-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["nohup","java","-jar","/app.jar","&"]

docker build -t springboot:test . 构建镜像
docker run -d -p 7970:7970 springboot:test 使用刚才的镜像启动容器

镜像推送到Docker Hub

hub.docker.com创建账号,创建一个仓库名称,我创建了chenqi_public

现在服务器里有一个镜像

REPOSITORY TAG IMAGE ID CREATED SIZE
chenqi_public springboot_chat d19c520e6cb3 15 hours ago 676MB

执行以下命令把这个镜像推送到docker hub

 -- 登录
docker login
-- 打标签 把刚才上面的chenqi_public:springboot_chat 这个镜像 打tag
-- 变成 chenxiaoqi/chenqi_public:springboot_chat
docker tag chenqi_public:springboot_chat chenxiaoqi/chenqi_public:springboot_chat 
-- 推送
docker push chenxiaoqi/chenqi_public:springboot_chat

这样就把

chenxiaoqi/chenqi_public:springboot_chat镜像推到docker公用仓库了

此时本地镜像会多一个

REPOSITORY TAG IMAGE ID CREATED SIZE
chenqi_public springboot_chat d19c520e6cb3 15 hours ago 676MB
chenxiaoqi/chenqi_public springboot_chat d19c520e6cb3 15 hours ago 676MB

搜索下DockerHub看看有没有刚才传的镜像

docker search chenxiaoqi
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
chenxiaoqiang/httpd docker run --name NAME -d mageedu/httpd 0
chenxiaoqiang/registry-exec 4 0
chenxiaoqi/chenqi_public 我的公共镜像 0

我们发现是可以查出来的

Maven构建镜像

创建Dockerfile文件

src-main-docker-Dockerfile:

FROM java:8
VOLUME /tmp
ADD springbootchat-1.0-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["nohup","java","-jar","/app.jar","&"]

修改pom.xml

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.4.13</version>
    <configuration>
        <imageName>chenxiaoqi/chenqi_public:0.0.2</imageName>
        <dockerHost>http://123.206.224.239:2375</dockerHost>
     <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
        <serverId>docker-hub</serverId>
    </configuration>
</plugin>

修改maven的配置文件settings.xml

<server>    
        <id>docker-hub</id>
        <username>dockername</username>
        <password>dockerpassword</password>
        <configuration>
        <email>xxx@xxx.net</email>
        </configuration>
</server>

把镜像推送到服务器和DockerHub仓库

 -- 不想推到DockerHub 不加-DpushImage
mvn clean package docker:build -DpushImage

开放docker2375端口

推送的时候会失败,连接不上服务,得开放docker2375端口号

vim /usr/lib/systemd/system/docker.service
#修改ExecStart这行
ExecStart=/usr/bin/dockerd  -H tcp://0.0.0.0:2375  -H unix:///var/run/docker.sock
#重新加载配置文件
systemctl daemon-reload    
#重启服务
systemctl restart docker.service 
#查看端口是否开启
netstat -nptl
#直接curl看是否生效
curl http://127.0.0.1:2375/info

重新执行命令,之后查看服务器docker images 多了一个刚才上传的镜像,DockerHub也有刚才传的镜像

镜像传好后可以通过Idea左下角Docker工具选择镜像然后启动容器。


2020.07.03更新
生产环境切记不要开放docker2375端口,我服务器因为开放了该端口被植入了挖矿病毒,这个很好解决,删掉对应docker服务,删掉镜像,杀掉进程,关闭端口OK

最后修改:2020 年 07 月 03 日 06 : 51 PM