mac系统部署docker理论+实操

安装地址:

https://docs.docker.com/desktop/mac/install/

Kubernetes要从容器化开始,而容器又需要从Dockerfile开始

Docker容器的特点:

  • 轻量:容器是进程级的资源隔离,而虚拟机是操作系统级的资源隔离,所以Docker容器相对于虚拟机来说可以节省更多的资源开销,因为Docker容器不再需要GuestOS这一层操作系统了。
  • 快速:容器的启动和创建无需启动GuestOS,可以实现秒级甚至毫秒级的启动。
  • 可移植性:Docker容器技术是将应用及所依赖的库和运行时的环境技术改造包成容器镜像,可以在不同的平台运行。
  • 自动化:容器生态中的容器编排工作(如:Kubernetes)可帮助我们实现容器的自动化管理。

总述:

docker有着比虚拟机更少的抽象层。由于docker不需要Hypevisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。因而避免了引寻、加载操作系统内核所耗费的时间,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,整个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了加载Guest OS的过程,因此新建一个docker容器只需要几秒钟。

docker常用命令:

docker version 查看docker版本
docker info 查看docker信息
docker --help 查看帮助命令
docker images 查看本地docker镜像
docker search XXX 在docker hub上查找某个镜像
网址:https://hub.docker.com
docker pull XXX 从docker hub上拉取某个镜像
docker rmi XXX 删除本地某个镜像
docker rmi -f 镜像ID 删除单个镜像
docker rmi -f 镜像名1:TAG 镜像名2:TAG 删除多个镜像
docker rmi -f $(docker images -qa) 删除本地全部镜像

docker本地镜像选项说明:

REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
注:
同一个仓库源可以有多个TAG,表示这个仓库的版本。比如:latest 代表最新版

运行docker的第一个本地实例:

进入http://localhost:80/tutorial/
即可看到如下图:
在这里插入图片描述

说明本地docker上的第一个应用已经启动成功了

连接远程仓库:
终端输入:

sudo docker login --username=? registry.cn-hangzhou.aliyuncs.com

(?是你阿里云的用户名)
注意此处会要求你输入密码:
第一个密码是电脑的密码 第二个密码是远程仓库的密码(我这里使用的阿里云仓库)

本地spring-boot程序打jar包
注意:maven加依赖:

<packaging>jar</packaging>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

没有这两个依赖的话,打的jar包无法运行。要想在本地docker仓库运行,首先得保证所打的jar包可以正常运行。( java -jar )
本地打的jar包可以正常运行后,把jar包放到一个自己准备的文件夹内,然后在此文件夹中放一个dockerfile文件(注意,该文件不要用.txt格式,要用没格式的,macOS系统下使用vim创建并编辑即可),这里给一个我使用的dockerfile示例:
在这里插入图片描述

dockerfile:

FROM openjdk:8
MAINTAINER GBS
LABEL app=“hello” version=“1.0.0” by=“GBS”
COPY ./hellodocker.jar hellodocker.jar
CMD java -jar hellodocker.jar

编写dockerfile后打包本地镜像:

命令:
docker build -t hello .
在这里插入图片描述

运行命令:

docker run -it -p 8080:8080 --name hellod hello

命令解释:
docker run hello 指运行hello容器
-it 是-i和-t的组合 -i是打开STDIN,用于控制台交互
-t是分配tty设备,指可以支持终端登录
这个命令基本需要运行容器时都是常驻的
–name 是容器启动后的名称 这里是hellod

成功运行:

在这里插入图片描述

如何编写dockerfile?

Dockerfile类似于Makfile,用户使用docker build就可以编译镜像,使用该命令可以设置编译镜像时使用的CPU数量、内存大小、文件路径等

语法:

docker build [OPTIONS] PATH| URL| -
常见选项:
-t 设置镜像的名称和TAG,格式为name:tag
-f Dockerfile的名称,默认为PATH/Dockerfile
例子:docker build -f ~/php.Dockerfile .
注意:PATH是编译镜像使用的工作目录,Docker Daemon在编译开始时,会扫描PATH中的所有文件,可以在编译目录中加入.dockerignore过滤不需要的文件
Docker Daemon从Dockerfile中顺序读取指令,生成一个临时容器,在容器中执行指令,容器编译成功后会提交作为镜像层加入最终镜像,为了加快编译过程,Docker Daemon采用了缓存机制,如果在缓存中找到了需要的中间镜像则直接使用该镜像而不生成临时容器(编译时可以使用选项–no-cache选择不使用缓存)

Dockerfile由多条指令组成,每条指令在编译镜像时执行相应的程序完成某些功能,由指令+参数组成,以逗号分隔,#作为注释起始符,虽说指令不区分大小写,但是一般指令使用大写,参数使用小写

常用指令:

指令:FROM
功能描述:设置基础镜像
语法:FROM < image>[:< tag> | @< digest>]
提示:镜像都是从一个基础镜像(操作系统或其他镜像)生成,可以在一个Dockerfile中添加多条FROM指令,一次生成多个镜像
注意:如果忽略tag选项,会使用latest镜像
例如:FROM openjdk:8 基础镜像是jdk1.8

指令:MAINTAINER
功能描述:设置镜像作者
语法:MAINTAINER < name>
例如:MAINTAINER GBS 作者是GBS

指令:LABEL
功能描述:设置镜像的标签
延伸:镜像标签可以通过docker inspect查看
格式:LABEL < key>=< value> < key>=< value> …
提示:不同标签之间通过空格隔开
注意:每条指令都会生成一个镜像层,Docker中镜像最多只能有127层,如果超出Docker Daemon就会报错,如LABEL …=… <假装这里有个换行> LABEL …=…合在一起用空格分隔就可以减少镜像层数量,同样,可以使用连接符\将脚本分为多行
镜像会继承基础镜像中的标签,如果存在同名标签则会覆盖
例如:LABEL app=“hello” version=“1.0.0” by=“GBS”

指令:COPY
功能描述:复制文件到镜像中
语法:COPY < src>… < dest>|[“< src>”,… “< dest>”]
提示:指令逻辑和ADD十分相似,同样Docker Daemon会从编译目录寻找文件或目录,dest为镜像中的绝对路径或者相对于WORKDIR的路径
例如:COPY ./hellodocker.jar hellodocker.jar

指令:CMD
功能描述:设置容器的启动命令
语法:CMD [“executable”,”param1”,”param2”]
CMD [“param1”,”param2”]
CMD < command>
提示:CMD第一种、第三种方式和RUN类似,第二种方式为ENTRYPOINT参数方式,为entrypoint提供参数列表
注意:Dockerfile中只能有一条CMD命令,如果写了多条则最后一条生效
例如:CMD java -jar hellodocker.jar

指令:ENV
声明环境变量
例如:ENV MYTESTENV=1
声明环境变量MYTESTENV 为 1

指定:ADD
添加宿主机文件到镜像中,有需要解压的文件会自动解压
例如:ADD hellodocker.jar .

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值