Docker从零开始

Docker简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 LinuxWindows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

docker文档:https://docs.docker.com

镜像:docker镜像就好比是一个可执行程序,可以启动这个程序进而启动服务,通过这个镜像可以创建多个容器。

容器:Docker利用容器技术,独立运行一个或者一组应用,通过容器来创建。把容器可以理解为一个简易的linux系统。

仓库:仓库就是存放镜像的地方。

Docker安装

1、创建虚拟机centos7

2、关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

3、关闭selinux

#临时关闭
setenforce 0
sed -i 's/SELINUX-enforcing/SELINUX=disabled/g'

#永久关闭
vim /etc/selinux/config
SELINUX=disabled

4、配置时间同步

#修改时区
timedatectl set-timezone Asia/Shanghai
#安装ntp
yum install -y ntp ntpdate
#时间同步ntp服务器
ntpdate cn.pool.ntp.org

5、安装基础软件包

需要的安装包yum install -y yum-utils
yum install -y wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack

6、安装docker-ce

  • 配置docker-ce国内yum源(阿里云)
yum-config-manager  --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 安装docker依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
  • 安装docker-ce
yum install docker-ce -y

7、启动docker服务

systemctl start docker && systemctl enable docker

systemctl status docker #看到running说明正常启动

8、开启包转发功能和修改内核参数

modprobe br_netfilter
进入/etc/sysctl.d目录创建docker.conf文件
    
执行如下命令
cat > /etc/sysctl.d/docker.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
    
让配置生效
sysctl -p /etc/sysctl.d/docker.conf

Docker命令

镜像命令

docker images 查看所有本地的主机上的镜像

[root@localhost zly]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    feb5d9fea6a5   19 months ago   13.3kB

#解释
REPOSITORY 镜像的仓库源
TAG 	   镜像的标签
IMAGE ID   镜像的ID
GREATED    镜像的创建时间
SIZE	   镜像的大小

# 可选项
    -a,-all 列出所有镜像
    -q,-quiet 只显示id

docker search 搜索镜像

[root@localhost zly]# docker search mysql
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                           MySQL is a widely used, open-source relation…   14091     [OK]
mariadb                         MariaDB Server is a high performing open sou…   5382      [OK]
phpmyadmin                      phpMyAdmin - A web interface for MySQL and M…   788       [OK]
percona                         Percona Server is a fork of the MySQL relati…   606       [OK]
bitnami/mysql                   Bitnami MySQL Docker Image                      85                   [OK]
    
#可选项 
    -f,--filter 搜索过滤

docker pull 下载镜像

[root@localhost zly]# docker pull mysql
Using default tag: latest #如果不写tag,默认就是最新
latest: Pulling from library/mysql
328ba678bf27: Pull complete		#分层下载(可共用)
f3f5ff008d73: Pull complete
dd7054d6d0c7: Pull complete
70b5d4e8750e: Pull complete
cdc4a7b43bdd: Pull complete
a0608f8959e0: Pull complete
5823e721608f: Pull complete
a564ada930a9: Pull complete
539565d00e89: Pull complete
a11a06843fd5: Pull complete
92f6d4aa041d: Pull complete
Digest: sha256:a43f6e7e7f3a5e5b90f857fbed4e3103ece771b19f0f75880f767cf66bbb6577		#签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest		#真实地址

#指定版本下载
docker pull mysql:5.7

docker rmi 删除镜像

[root@localhost zly]# docker rmi -f feb5d9fea6a5
Untagged: hello-world:latest
Untagged: hello-world@sha256:4e83453afed1b4fa1a3500525091dbfca6ce1e66903fd4c01ff015dbcb1ba33e
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412

容器命令

docker pull cenos

新建容器并启动

docker run [可选参数] image

#参数说明
--name="Name"	容器名字
-d				后台方式运行
-it				使用交互式运行,进入容器查看内容
-P				指定容器的端口
	主机端口:容器端口
	容器端口
-p				随机指定端口

#测试,启动并进入容器
[root@localhost zly]# docker run -it centos /bin/bash
[root@a40520db6ebe /]#

#从容器中退回主机

[root@a40520db6ebe /]# exit
exit

列出所有运行中的容器

[root@localhost zly]# docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost zly]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                          PORTS     NAMES
a40520db6ebe   centos         "/bin/bash"   3 minutes ago   Exited (0) About a minute ago             wonderful_napier
731608cda88e   feb5d9fea6a5   "/hello"      7 days ago      Exited (0) 7 days ago                     suspicious_yalow

退出容器

exit	#容器退出
Ctrl+P+Q	#不停止退出

删除容器

docker rm #容器id
docker rm -f $(docker ps -aq) #删除所有容器

启动和停止容器的操作

docker start 容器id	#启动容器
docker restart 容器id	#重启容器
docker stop 容器id	#停止当前正在运行的容器
docker kill 容器id	#强制停止当前容器

常用其他命令

后台启动容器

#命令 docker run -d centos

#问题docker ps,发现centos停止了

#常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没用应用,就会自动停止

查看日志

docker logs

#显示日志
docker -tf				#显示日志
	   --tail number    #要显示日志条数

查看镜像元数据

docker inspect 容器id
[root@localhost zly]# docker inspect b40a76a04b79
[
    {
        "Id": "b40a76a04b79930aafa94f930f62c36610a447a4fb925899d3e3d679af2cd2ff",
        "Created": "2023-05-04T06:43:44.085354509Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 14323,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2023-05-04T06:43:44.540079324Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
        "ResolvConfPath": "/var/lib/docker/containers/b40a76a04b79930aafa94f930f62c36610a447a4fb925899d3e3d679af2cd2ff/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/b40a76a04b79930aafa94f930f62c36610a447a4fb925899d3e3d679af2cd2ff/hostname",
        "HostsPath": "/var/lib/docker/containers/b40a76a04b79930aafa94f930f62c36610a447a4fb925899d3e3d679af2cd2ff/hosts",
        "LogPath": "/var/lib/docker/containers/b40a76a04b79930aafa94f930f62c36610a447a4fb925899d3e3d679af2cd2ff/b40a76a04b79930aafa94f930f62c36610a447a4fb925899d3e3d679af2cd2ff-json.log",
        "Name": "/dazzling_jennings",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/40b1197af4899442278ca13ab240b3ae2bd61d18cb51969e808ee21f7b8aab18-init/diff:/var/lib/docker/overlay2/93b5bf7991d694d895dbf4ce5c48948a4da33dd596b002564ef9fc93fa79b695/diff",
                "MergedDir": "/var/lib/docker/overlay2/40b1197af4899442278ca13ab240b3ae2bd61d18cb51969e808ee21f7b8aab18/merged",
                "UpperDir": "/var/lib/docker/overlay2/40b1197af4899442278ca13ab240b3ae2bd61d18cb51969e808ee21f7b8aab18/diff",
                "WorkDir": "/var/lib/docker/overlay2/40b1197af4899442278ca13ab240b3ae2bd61d18cb51969e808ee21f7b8aab18/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "b40a76a04b79",
            "Domainname": "",
            "User": "",
            "AttachStdin": true,
            "AttachStdout": true,
            "AttachStderr": true,
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": true,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20210915",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "8eb17d7c4913be7192145952378fae1e266b02fa16b8b8fe8eff1a3ca6e2cb6a",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/8eb17d7c4913",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "5fd7933eb5439a0125b3e171952321729c0f2e451758735e391a008bf2259c3d",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "3eb7519a7549af1c22ab028ba7c22afe95e956aa242f3a4e95f3671bf29d981d",
                    "EndpointID": "5fd7933eb5439a0125b3e171952321729c0f2e451758735e391a008bf2259c3d",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

进入当前正在运行的容器

#方式一 进入容器后开启一个新的终端。可以在里面操作
docker exec -it 容器id

#方式二 进入容器正在执行的终端,不会启动新的进程
docker attach 容器id

从容器内拷贝文件到主机上

docker cp 容器id:容器内路径 主机路径

Docker安装nginx

#1、搜索镜像
#2、下载镜像 pull
#3、启动容器 docker run -d --name nginx01 -p 3344:80 nginx
#4、进入容器 docker exec -it nginx01

可视化

  • portainer(docker图形化管理工具!提供一个后台面板供我们操作)
docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-29TmEy4m-1684741770024)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20230505093452155.png)]

Docker镜像详解

镜像是什么

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件
所有的应用,直接打包docker镜像,就可以直接跑起来 !

Docker镜像加载原理

UnionFS ( 联合文件系统 )


我们下载的时候看到的一层层就是这个 !

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtualfilesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像 ),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统警加起来,这样最终的文件系统会包含所有底层的文件和目录。

Docker镜像加载原理


docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。

bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs (root file svstem),在bootfs之上。包含的就是典型 Linux 系统中的 /dev,/proc,/bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

commit镜像

docker commit 提交容器成为一个新的副本

docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名“

[root@localhost zly]# docker commit -a="zhangly" -m="add webapps app" 0495b3a442ec tomcat_zly

容器数据卷

什么是容器数据卷

容器之间可以有一个数据共享的技术!Docker 容器中产生的数据,同步到本地!

容器的持久化和同步操作

使用数据卷

直接使用命令来挂载 -v

docker run -it -v 主机目录:容器目录

实战:安装MySql

#获取镜像
[root@localhost zly]# docker pull mysql

#运行容器。需要做数据挂
[root@localhost zly]# docker run -d -p 3310:3306 -v doc -e MYSQL_ROOT_PASSWORD=123456 --name mysql_zly mysql

具名和匿名挂载

# 匿名挂载,没有写容器外的路径
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx

#查看所有volume
docker volume -ls

#具名挂载
-v 卷名:容器内路径

所有的卷都在/var/lib/docker/volumes

初识Dockerfile

Dockerfile就是用来构建docker镜像的构造文件

通过脚本生成镜像,镜像是一层一层的,脚本是一个一个一个命令

#创建一个dockerfile文件,名字可以随机 建议 Dockerfile
# 文件中的内容 指令(大写)参数
FROM centos
VOLUME["voTume0","voTume02"]
CMD echo "----end-----"
CMD /bin/bash
# 这里的每个命令,就是镜像的一层!

构造的时候进行挂载

数据卷容器

多个容器同步数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZAPwfpum-1684741770026)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20230508141441076.png)]

父容器docker01

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cf8fNFH4-1684741770027)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20230508141806288.png)]

子容器通过

docker run -it --name docker02 --volumes-from docker01 centos

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x8NSY4gU-1684741770027)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20230508142915668.png)]

注:停用或删除父容器,共享数据仍然存在,一旦你持久化本地就不会消失。

DockerFile

DockerFile构建过程

基础知识:

1、每个保留关键字都必须是大写字母

2、执行从上到下顺序执行

3、#表示注释

4、每一个指令都会创建提交一个新的镜像层,并提交 !

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3SMmwdxz-1684741770028)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20230508152527716.png)]

dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!

DockerFile:构建文件,定义了一切步骤,源代码

Dockerlmages:通过 DockerFile 构建生成的镜像,最终发布和运行的产品!

Docker容器:容器就是镜像运行起来提供服务器

DockerFile的指令

FROM			# 基础镜镜像,一切从这里开始构建
MAINTAINER		# 镜像是谁写的,姓名+邮箱
RUN				# 镜像构建的时候需要运行的命令
ADD				# 步骤:tomcat镜像,这个tomcat压缩包! 添加内容
WORKDIR			# 镜像的工作目录
VOLUME			# 挂载的目录
EXPOST			# 保留端口配置
CMD				# 指定这个容器启动的时候要运行的命令 
ENV				# 构建的时候设置环境变量

实战测试构建自己的镜像

#编写Dockerfile配置文件
FROM centos
MAINTAINER zhangly<1239326083@qq.com>

ENV MYPATH /usr/local
WORKIDR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash

#通过这个文件构建镜像
[root@localhost dockerfile]# docker build -f mydockerfile -t mycentos:0.1 .

CMD和ENTRYPOINT的区别

#CMD			指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
#ENTRYPOINT		指定这个容器启动的时候要运行的命令,可以追加命令

Dockerfile制作tomcat镜像

1、准备镜像文件tomcat压缩包,jdk的压缩包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZftxzMfY-1684741770028)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20230510111100809.png)]

2、编写Dockerfile文件,官方命名"Dockerfile"

FROM centos:7
MAINTAINER zhangly<1239326083@qq.com>
COPY readme.txt usr/local/readme.txt

ADD jdk-8u11-linux-x64.tar.gz /usr/local
ADD apache-tomcat-9.0.22.tar.gz /usr/local

RUN yum -y install vim

ENV MYPATH /usr/local
WORK $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out

3、构建镜像

# docker build -t diytomcat .

4、启动镜像

5、访问测试

6、发布项目

发布自己的镜像

DockerHub

1、地址https://hub.docker.com 注册自己的账号

2、确定这个账号可以登录。

3、在我们服务器提交自己的镜像

#docker login -u zhangly503		登录
#docker push zhanglanyi/diytomcat

阿里云容器服务

1、登录阿里云

2、找到容器镜像服务

3、创建命名空间

4、创建容器镜像

5、按照阿里云的提示

SpringBoot微服务打包docker镜像

1、将项目打包成jar包
2、Idea装一个插件 搜索docker

r:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22
ENV PATH P A T H : PATH: PATH:PATH: J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out


3、构建镜像

```shell
# docker build -t diytomcat .

4、启动镜像

5、访问测试

6、发布项目

发布自己的镜像

DockerHub

1、地址https://hub.docker.com 注册自己的账号

2、确定这个账号可以登录。

3、在我们服务器提交自己的镜像

#docker login -u zhangly503		登录
#docker push zhanglanyi/diytomcat

阿里云容器服务

1、登录阿里云

2、找到容器镜像服务

3、创建命名空间

4、创建容器镜像

5、按照阿里云的提示

SpringBoot微服务打包docker镜像

1、将项目打包成jar包
2、Idea装一个插件 搜索docker

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值