Docker学习详细笔记-后续不断更新

目录

    • 一、 Docker概述
    • 二、Docker安装
      • 1.先查看环境:
      • 2.安装
        • 2.1 卸载旧版本
        • 2.2安装需要的安装包
        • 2.3设置镜像的仓库
        • 2.4安装docker
        • 2.5启动Docker
        • 2.6测试HelloWorld
        • 2.7查看一下下载的这个hello-word镜像
        • 2.8了解卸载镜像
        • 2.9配置阿里云镜像加速
      • 3.run的运行流程:
      • 4.底层原理
      • 5.Docker为什么比虚拟机快
    • 三、Docker命令
      • 帮助命令
      • 1.镜像命令
        • 1.1docker images 查看所有本地的主机上的镜像
        • 1.2docker search搜索镜像
        • 1.3docker pull下载镜像
        • 1.4docker rmi删除镜像(rm是Linux下的删除命令,i指镜像)
      • 2.容器命令
        • 2.1新建容器并启动
        • 2.2查询所有正在运行的容器
        • 2.3退出容器
        • 2.4删除容器
        • 2.5启动和停止容器的操作
      • 3.操作命令
        • 3.1后台启动容器
        • 3.2查看日志
        • 3.3查看容器中的进程信息
        • 3.4查看镜像的元数据
        • 3.5进入当前正在运行的容器
        • 3.6从容器内拷贝文件到主机上
        • 3.7常用命令小结
    • 练习
      • 1.用docker安装Nginx
    • SpringBoot微服务打包Docker镜像
      • 1.构建springboot项目
      • 2.打包应用
      • 3.编写dockerfile
      • 4.将jar包和dockerfile文件放到docker容器中
      • 5.构建镜像
      • 6.发布运行
    • 四、Docker镜像
    • 五、容器数据卷
    • 六、DockerFile(!)
    • 七、Dockert网络原理
    • 八、IDEA整合Docker
    • 九、Docker Compose(集群)
    • 十、Docker Swarm(集群)
    • 十一、Doc

一、 Docker概述

二、Docker安装

1.先查看环境:

uname -r: 显示正在使用的内核版本

#系统内核是3.10以上版本
[root@VM-0-17-centos /]# uname -r
3.10.0-514.26.2.el7.x86_64
#系统版本(买阿里云服务器的时候可以看到)
[root@VM-0-17-centos ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

2.安装

去看Docker的帮助文档:https://docs.docker.com/engine/install/
Docker学习详细笔记-后续不断更新_第1张图片

2.1 卸载旧版本
#1、卸载旧的版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

卸载结果:
Docker学习详细笔记-后续不断更新_第2张图片
Docker学习详细笔记-后续不断更新_第3张图片

2.2安装需要的安装包
#2、需要的安装包
yum install -y yum-utils

安装结果:
安装好安装包
出现Nothing to do 说明原来有了。

2.3设置镜像的仓库
#3、设置镜像的仓库
yum-config-manager \
	--add-repo \
	#默认是国外的,使用起来非常慢,建议使用国内的镜像地址。
	https://download.docker.com/linux/centos/docker-ce.repo

yum-config-manager \
	--add-repo \
	http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
	#阿里云的镜像地址

设置结果:
Docker学习详细笔记-后续不断更新_第4张图片

2.4安装docker
#4、安装docker
#docker-ce社区版的 docker-ee企业版的
yum install docker-ce docker-ce-cli containerd.io

在安装之前,先clear,然后更新软件包索引,使用 yum makecache fast命令
Docker学习详细笔记-后续不断更新_第5张图片
安装好之后:
在这里插入图片描述

2.5启动Docker
#5、启动Docker
systemctl start docker

安装成功的结果:
Docker学习详细笔记-后续不断更新_第6张图片

2.6测试HelloWorld
docker run hello -world
2.7查看一下下载的这个hello-word镜像
[root@VM-0-17-centos ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        7 months ago        13.3kB
2.8了解卸载镜像
#1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#2.删除资源(/var/lib/docker  为docker的默认工作路径)
rm -rf /var/lib/docker
2.9配置阿里云镜像加速

登录阿里云–>找到镜像加速器–>
Docker学习详细笔记-后续不断更新_第7张图片

#配置使用
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://j6swlks2.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker学习详细笔记-后续不断更新_第8张图片

3.run的运行流程:

Docker学习详细笔记-后续不断更新_第9张图片

4.底层原理

Docker学习详细笔记-后续不断更新_第10张图片

5.Docker为什么比虚拟机快

1.docker有比虚拟机更少的抽象层

2.docker利用的是宿主主机的内核,vm需要是Guest OS。
所以说,新建一个容器的时候,docket不需要虚拟机一样重新加载一个操作系统内核,避免引导操作。虚拟机加载Guest OS是分钟级别的,而docker是利用宿主主机的操作系统,省略了这个复杂的过程,启动是秒级的。
Docker上面可以直接运行App Bins/Libs这些程序,不用先构建虚拟机。
Docker学习详细笔记-后续不断更新_第11张图片
Docker学习详细笔记-后续不断更新_第12张图片

Docker学习详细笔记-后续不断更新_第13张图片
Docker学习详细笔记-后续不断更新_第14张图片
学习完毕所有的命令,再回头看这段理论,会更清晰。

三、Docker命令

帮助命令

docker version	  #显示docker的版本信息
docker info       #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令

帮助文档的地址:https://docs.docker.com/reference/

1.镜像命令

1.1docker images 查看所有本地的主机上的镜像
[root@VM-0-17-centos ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        7 months ago        13.3kB
#解释
REPOSITORY 镜像的仓库源
TAG        镜像的标签
IMAGE ID   镜像的id
CREATED    镜像的创建时间
SIZE       镜像的大小
#可选项
 -a, --all      #列出所有的镜像
 -f     		#不常用
 -q, --quiet    #只显示镜像的id

运行结果:
在这里插入图片描述

1.2docker search搜索镜像
#搜素命令
[root@VM-0-17-centos ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   9790                [OK]                
mariadb                           MariaDB is a community-developed fork of MyS…   
3572                [OK]      
#可选项,通过收藏来过滤
--filter=STARS=3000   #搜索出收藏大于3000的
          

Docker学习详细笔记-后续不断更新_第15张图片
Docker学习详细笔记-后续不断更新_第16张图片
搜索出收藏大于3000的或大于5000的结果:
在这里插入图片描述

1.3docker pull下载镜像
docker pull --help
#下载镜像docker pull镜像名[:tag]
[root@VM-0-17-centos ~]# docker pull mysql
Using default tag: latest  #如果不写tag,则默认是latest(最新的)
latest: Pulling from library/mysql
6ec8c9369e08: Pull complete   #分层下载,docker images的核心 
177e5de89054: Pull complete 
ab6ccb86eb40: Pull complete 
e1ee78841235: Pull complete 
09cd86ccee56: Pull complete 
78bea0594a44: Pull complete 
caf5f529ae89: Pull complete 
cf0fc09f046d: Pull complete 
4ccd5b05a8f6: Pull complete 
76d29d8de5d4: Pull complete 
8077a91f5d16: Pull complete 
922753e827ec: Pull complete 
Digest: sha256:fb6a6a26111ba75f9e8487db639bc5721d4431beba4cd668a4e922b8f8b14acc #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址

#以下两个命令是等价的
docker pull mysql
docker pull docker.io/library/mysql:latest

#指定版本下载


Docker学习详细笔记-后续不断更新_第17张图片
在这里插入图片描述

1.4docker rmi删除镜像(rm是Linux下的删除命令,i指镜像)

删除时,可以通过镜像的id,将其删除,或者通过镜像的名字将其删除。

docker rmi -f #镜像id/镜像名字          #删除指定镜像
docker rmi -f #镜像1id 镜像2id 镜像3id   #删除多个镜像
docker rmi -f $(docker images -aq)    #删除全部镜像

运行结果:
Docker学习详细笔记-后续不断更新_第18张图片

2.容器命令

说明:有了镜像才能创建容器,因为学了linux,所以我们下载一个centos镜像来测试学习。(在docker里面再装一个容器,来充当虚拟机。)

docker pull centos  #不加版本号,默认为下载最新版本的
2.1新建容器并启动
docker run [可选参数] image  

#参数说明
--name="Name" 		      #容器名字,来区分容器  如:tomcat01、tomcat02
-d             		      #后台方式运行
-it                       #使用交互方式,进入容器查看内容
-p  容器端口 	          #指定容器的端口如: -p 8080
-p	主机端口:容器端口	      #主机映射(常用,如:-p 8080:8080)
-p 主机ip:主机端口:容器端口  #主机端口
-P (大写P)                 #随机指定端口

#测试,启动并进入容器
[root@VM-0-17-centos ~]# docker run -it centos /bin/bash
[root@0a0e5f10a104 /]# 
[root@70a08da8dfcd /]# ls    #查看容器内部的centos,基础版本,里面很多命令是不完善的
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

#从容器中退回主机
[root@70a08da8dfcd /]# exit 
exit
[root@VM-0-17-centos ~]# ls
1.jpg  index.html

上述命令运行结果:
在这里插入图片描述
在这里插入图片描述

2.2查询所有正在运行的容器
#docker ps 命令
    	    #列出当前正在运行的容器
-a  	    #列出当前正在运行的容器+历史运行的容器
-n=容器个数  #显示最近创建的容器
-q          #只显示容器的编号

运行结果:
Docker学习详细笔记-后续不断更新_第19张图片

2.3退出容器
exit #直接停止容器并退出
Ctrl + P+ Q #容器不停止,直接退出

运行结果:
在这里插入图片描述

2.4删除容器
docker rm 容器id			       #删除指定容器,不能删除正在运行的容器,如果要强制删除,用 rm -f
docker rm -f $(docker ps -aq)  #删除所有容器(查出所有容器的id,然后递归删除)
docker ps -a -q|xargs docker rm #删除所有的容器

Docker学习详细笔记-后续不断更新_第20张图片
Tip:使用管道操作符“|”可以把一个命令的标准输出传送到另一个命令的标准输入中,连续的|意味着第一个命令的输出为第二个命令的输入,第二个命令的输入为第一个命令的输出,依次类推。

2.5启动和停止容器的操作
docker start 容器id   #启动容器
docker restart 容器id #重启容器
docker stop 容器id    #停止一个正在运行的容器
docker kill 容器id    #暴力删除(杀掉)一个容器

3.操作命令

3.1后台启动容器
#命令docker run -d 镜像名
docker run -d centos
#发现docker ps 发现centos停止了。
#常见的问题,docker容器使用后台运行,就必须要有一个前台进程,dockert发现没有应用,就会自动停止。
nginx,容器启动后发现自己没有提供服务,就会立刻停止,就是没有程序了。
3.2查看日志
docker logs --help 				 					     #查看日志相关的指令

docker logs -f -t --tail  日志条数( 想要显示的)  容器id    #查看指定容器的日志

在查询后发现没有日志,可进行如下操作:
#自己写一段shell脚本
[root@VM-0-17-centos ~]# docker run -d centos /bin/sh -c "while true;do echo labixiaoxin;sleep 1;done"
#查找写入脚本的容器id
[root@VM-0-17-centos ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
680eb45241f5        centos              "/bin/sh -c 'while t…"   6 seconds ago       Up 5 seconds                            gallant_poitras
28ab8b7d5be1        centos              "/bin/bash"              23 minutes ago      Up 23 minutes                           competent_carson
#显示日志
-tf               #显示日志
--tail number     #显示日志条数

运行结果:
Docker学习详细笔记-后续不断更新_第21张图片

3.3查看容器中的进程信息
docker top --help #帮助文档
docker top 容器id  #查看指定容器中的进程信息

运行结果:
Docker学习详细笔记-后续不断更新_第22张图片
Tip:以后查杀进程的时候就可以用此命令,先将进程查出来,然后有针对性的进行查杀。

3.4查看镜像的元数据
docker inspect --help #帮助文档
docker inspect 容器id

Docker学习详细笔记-后续不断更新_第23张图片
Docker学习详细笔记-后续不断更新_第24张图片
Docker学习详细笔记-后续不断更新_第25张图片

3.5进入当前正在运行的容器
#我们通常容器都是使用后台方式运行的,如果我们需要进入容器,修改一些配置,就可以以下的方法
#方式一(进入容器后开启一个新的终端,可以在里面操作)(常用)
docker exec -it 容器id bashshell  #命令格式
#测试
[root@VM-0-17-centos ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
680eb45241f5        centos              "/bin/sh -c 'while t…"   2 days ago          Up 2 days                               gallant_poitras
28ab8b7d5be1        centos              "/bin/bash"              2 days ago          Up 2 days                               competent_carson
[root@VM-0-17-centos ~]# docker exec -it 680eb45241f5 /bin/bash
[root@680eb45241f5 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@680eb45241f5 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Aug05 ?        00:00:36 /bin/sh -c while true;do echo labixiaoxin;sleep 1;done
root     31793     0  0 15:37 pts/0    00:00:00 /bin/bash
root     31824     1  0 15:37 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root     31825 31793  0 15:37 pts/0    00:00:00 ps -ef

#方式二(进入容器中正在执行的终端,不会启动新的进程)
docker attach 容器id
#测试
[root@VM-0-17-centos ~]# docker attach  28ab8b7d5be1
3.6从容器内拷贝文件到主机上
docker cp 容器id:容器内的路径 目的主机的路径
#测试
#查看当前主机目录下
[root@VM-0-17-centos home]# ls
xuyao
[root@VM-0-17-centos home]# touch labixiaoxin.java
[root@VM-0-17-centos home]# ls
labixiaoxin.java  xuyao
[root@VM-0-17-centos home]# docker cp
"docker cp" requires exactly 2 arguments.
See 'docker cp --help'.

Usage:  docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
        docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
#进入docker容器内部
Copy files/folders between a container and the local filesystem
[root@VM-0-17-centos home]# docker attach 0059fcba8979
[root@0059fcba8979 /]# cd /home
[root@0059fcba8979 home]# ls
[root@0059fcba8979 home]# touch test.java 
[root@0059fcba8979 home]# exit
exit
[root@VM-0-17-centos home]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
680eb45241f5        centos              "/bin/sh -c 'while t…"   3 days ago          Up 3 days                               gallant_poitras
[root@VM-0-17-centos home]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
0059fcba8979        centos              "/bin/bash"              10 minutes ago      Exited (0) 32 seconds ago                         focused_lamarr
680eb45241f5        centos              "/bin/sh -c 'while t…"   3 days ago          Up 3 days                                         gallant_poitras
f49dae58a883        centos              "/bin/sh -c 'while t…"   3 days ago          Exited (0) 3 days ago                             brave_beaver
d20d877b8f4f        centos              "/bin/sh '-cwhile tu…"   3 days ago          Exited (2) 3 days ago                             dreamy_newton
c665202a1c02        centos              "/bin/sh '-Cwhile tu…"   3 days ago          Exited (2) 3 days ago                             recursing_cohen
20f235abf2a0        centos              "/bin/sh '-Cwhile tu…"   3 days ago          Exited (2) 3 days ago                             gifted_moser
acf68cb43378        centos              "/bin/bash"              3 days ago          Exited (0) 3 days ago 
#将这个文件拷贝出来到主机上
[root@VM-0-17-centos home]# docker cp acf68cb43378:/home/test.java /home
Error: No such container:path: acf68cb43378:/home/test.java
[root@VM-0-17-centos home]# docker cp 0059fcba8979:/home/test.java .home
[root@VM-0-17-centos home]# ls
labixiaoxin.java  xuyao     
#拷贝是一个手动过程,未来我们将通过-v(数据卷的技术)实现自动同步                    
3.7常用命令小结

Docker学习详细笔记-后续不断更新_第26张图片
docker中的命令特别多,上面写的那些是常用的。
在另一篇博客里面会有常用命令的总结,可以当帮助文档来看

练习

1.用docker安装Nginx

tip:Nginx 是一个高性能的HTTP和反向代理web服务器,也可以做负载均衡,同时也提供了IMAP/POP3/SMTP服务

$ docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx

步骤:

  • 1 搜索镜像 search (建议去docker hub上去找,上面有帮助文档)
  • 2 下载拉取镜像 pull
#1.寻找镜像
[root@VM-0-17-centos ~]# docker search nginx
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                              Official build of Nginx.                        13580               [OK]                
jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1857                                    [OK]
richarvey/nginx-php-fpm            Container running Nginx + PHP-FPM capable of…   782                                     [OK]
linuxserver/nginx                  An Nginx container, brought to you by LinuxS…   126                                     
bitnami/nginx                      Bitnami nginx Docker Image                      88                                      [OK]
tiangolo/nginx-rtmp                Docker image with Nginx using the nginx-rtmp…   86                                      [OK]
jc21/nginx-proxy-manager           Docker container for managing Nginx proxy ho…   76                                      
alfg/nginx-rtmp                    NGINX, nginx-rtmp-module and FFmpeg from sou…   72                                      [OK]
nginxdemos/hello                   NGINX webserver that serves a simple page co…   58                                      [OK]
jlesage/nginx-proxy-manager        Docker container for Nginx Proxy Manager        53                                      [OK]
nginx/nginx-ingress                NGINX Ingress Controller for Kubernetes         37                                      
privatebin/nginx-fpm-alpine        PrivateBin running on an Nginx, php-fpm & Al…   31                                      [OK]
schmunk42/nginx-redirect           A very simple container to redirect HTTP tra…   18                                      [OK]
nginxinc/nginx-unprivileged        Unprivileged NGINX Dockerfiles                  16                                      
nginx/nginx-prometheus-exporter    NGINX Prometheus Exporter                       14                                      
raulr/nginx-wordpress              Nginx front-end for the official wordpress:f…   13                                      [OK]
centos/nginx-112-centos7           Platform for running nginx 1.12 or building …   13                                      
centos/nginx-18-centos7            Platform for running nginx 1.8 or building n…   13                                      
blacklabelops/nginx                Dockerized Nginx Reverse Proxy Server.          13                                      [OK]
mailu/nginx                        Mailu nginx frontend                            7                                       [OK]
sophos/nginx-vts-exporter          Simple server that scrapes Nginx vts stats a…   7                                       [OK]
bitwarden/nginx                    The Bitwarden nginx web server acting as a r…   7                                       
bitnami/nginx-ingress-controller   Bitnami Docker Image for NGINX Ingress Contr…   6                                       [OK]
wodby/nginx                        Generic nginx                                   1                                       [OK]
ansibleplaybookbundle/nginx-apb    An APB to deploy NGINX  

#2.下载(拉取)镜像
[root@VM-0-17-centos ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
bf5952930446: Pull complete 
bf5952930446: Pull complete 
ba755a256dfe: Pull complete 
c57dd87d0b93: Pull complete 
d7fbf29df889: Pull complete 
1f1070938ccd: Pull complete 
Digest: sha256:36b74457bccb56fbf8b05f79c85569501b721d4db813b684391d63e02287c0b2
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

#3.检查镜像是否下载成功(第一行可以看到这里已经下载镜像成功)
[root@VM-0-17-centos ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              08393e824c32        4 days ago          132MB
centos              latest              831691599b88        7 weeks ago         215MB
hello-world         latest              bf756fb1ae65        7 months ago        13.3kB

#4.启动镜像
#可以用于映射的端口号范围:1024~65535
[root@VM-0-17-centos ~]# docker run -d --name nginx01 -p:8080:80 nginx
5888890df91ab5fb705b661d68d4d47bb8a24bd633d9acba33b2000c7a6dc8ff

#5.测试下看是否可以访问,进入容器
#-d:后台运行  --name:给容器命名  -p:宿主机端口:容器内部端口

[root@VM-0-17-centos ~]# docker run -d --name nginx01 -p:8080:80 nginx
5888890df91ab5fb705b661d68d4d47bb8a24bd633d9acba33b2000c7a6dc8ff
[root@VM-0-17-centos ~]# curl localhost:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

#6.进入容器
[root@VM-0-17-centos ~]# docker exec -it nginx01 /bin/bash
root@08393e824c32:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@08393e824c32:/# cd /etc/nginx
root@08393e824c32:/etc/nginx#  ls
conf.d  fastcgi_params  koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params  uwsgi_params  win-utf

从公网访问nginx web服务器成功:
Docker学习详细笔记-后续不断更新_第27张图片
端口暴露的概念:
Docker学习详细笔记-后续不断更新_第28张图片
目前存在的问题:每次改动nginx配置文件,都需要进入容器内部,比较麻烦。
解决办法:在容器外部提供一个映射路径,达到在容器内徐IG艾文静哀鸟鸣,容器内部可以自动修改。
可以在容器外部文件,容器内部就可以自动

SpringBoot微服务打包Docker镜像

1.构建springboot项目
2.打包应用
3.编写dockerfile
4.构建镜像

docker build -t 镜像名 .

5.发布运行
使用了Docker之后,将项目打包成镜像发布到公有云上就可,给别人交付的就是一个镜像。

1.构建springboot项目

2.打包应用

打完jar包之后可以在cmd中先进行测试,如下则测试成功:
Docker学习详细笔记-后续不断更新_第29张图片

3.编写dockerfile

Docker学习详细笔记-后续不断更新_第30张图片

FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

4.将jar包和dockerfile文件放到docker容器中

然后将jar包和dockerfile文件放到你的docker容器中自己创建的目录下
图中我是在root下面创建了一个dockerDome的目录,然后把jar包和dockerfile文件两个文件都放在了这下面:
Docker学习详细笔记-后续不断更新_第31张图片

5.构建镜像

docker build -t 镜像名 .

6.发布运行


[root@VM-0-17-centos ~]# docker rm -f $(docker ps -qa)
e541c242d707
0b7f86792ec1
5888890df91a
680eb45241f5
[root@VM-0-17-centos ~]# clear
[root@VM-0-17-centos ~]# ls
1.jpg  dockerDome  index.html
[root@VM-0-17-centos ~]# cd dockerDome
[root@VM-0-17-centos dockerDome]# ls
Dockerfile  example-0.0.1-SNAPSHOT.jar
[root@VM-0-17-centos dockerDome]# ll
total 16152
-rw-r--r-- 1 root root      112 Aug  9 19:21 Dockerfile
-rw-r--r-- 1 root root 16514158 Aug  9 18:12 example-0.0.1-SNAPSHOT.jar
[root@VM-0-17-centos dockerDome]# docker build -t xuyao11 .
Sending build context to Docker daemon  16.52MB
Step 1/5 : FROM java:8
 ---> d23bdf5b1b1b
Step 2/5 : COPY *.jar /app.jar
 ---> 528cdf2035cc
Step 3/5 : CMD ["--server.port=8080"]
 ---> Running in de567df4c4f8
Removing intermediate container de567df4c4f8
 ---> b486cdec42d0
Step 4/5 : EXPOSE 8080
 ---> Running in 7801040c4fc6
Removing intermediate container 7801040c4fc6
 ---> a0b4c73e2ba0
Step 5/5 : ENTRYPOINT ["java","-jar","/app.jar"]
 ---> Running in e2cf0220926f
Removing intermediate container e2cf0220926f
 ---> 18b03ae0e280
Successfully built 18b03ae0e280
Successfully tagged xuyao11:latest
[root@VM-0-17-centos dockerDome]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
xuyao11             latest              18b03ae0e280        42 seconds ago      660MB
<none>              <none>              41d33a4a30a6        37 minutes ago      643MB
nginx               latest              08393e824c32        4 days ago          132MB
centos              latest              831691599b88        7 weeks ago         215MB
hello-world         latest              bf756fb1ae65        7 months ago        13.3kB
java                8                   d23bdf5b1b1b        3 years ago         643MB
[root@VM-0-17-centos dockerDome]# docker run -d -p --name xuyao-springboot-web xuyao11
docker: invalid publish opts format (should be name=value but got '--name').
See 'docker run --help'.
[root@VM-0-17-centos dockerDome]# docker run -d -P --name xuyao-springboot-web xuyao11
67e7a4b3eb074dec2c7274688ebf1199a35ecb3d4f970d4df689322bfac6eb83
[root@VM-0-17-centos dockerDome]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
67e7a4b3eb07        xuyao11             "java -jar /app.jar …"   14 seconds ago      Up 13 seconds       0.0.0.0:32768->8080/tcp   xuyao-springboot-web

Docker学习详细笔记-后续不断更新_第32张图片
在cmd中测试看是否成功:
Docker学习详细笔记-后续不断更新_第33张图片
在IDEA中创建Dockerfile文件,写脚本:
Docker学习详细笔记-后续不断更新_第34张图片
成功将jar包打包成镜像:
在这里插入图片描述

tips:如果有多个镜像,如何处理维护? 解决方法:Docker Compose(docker 编排服务) Docker Swarm(集群部署 )CI/CD之Jenkins

四、Docker镜像

五、容器数据卷

六、DockerFile(!)

七、Dockert网络原理

八、IDEA整合Docker

九、Docker Compose(集群)

十、Docker Swarm(集群)

十一、Doc

你可能感兴趣的:(docker,centos,运维)