一、前言

docker是一种容器技术,k8s是一种容器编排技术,当然docker也支持容器编排,但是由于名声干不过k8s所以业界在容器编排大多用的就是k8s(简单比较下)

二、docker基础知识

docker基本组成

在这里插入图片描述
镜像

  • 从某种角度可以理解为软件安装包,就好比没有jar,war包如何启动spring服务?

容器

  • 通过docker run + 镜像ID 启动的服务称之为容器,容器与容器之间互相不影响,相互隔离

仓库

docker镜像加速器
  • 推荐使用阿里云的镜像加速器,由于有些镜像资源会从国外下载,速度会非常慢,使用阿里云国内镜像加速器可以解决这个困扰
#1. 登录阿里云找到容器服务
#2. 找到镜像加速器,按照指导的操作即可
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ttqeishm.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker常用命令

安装docker

#安装docker
yum install docker
#启动docker服务
systemctl start docker
#查看docker服务
systemctl status docker

docker操作镜像命令

docker images #查看所有本地主机上的镜像 可以使用docker image ls代替
docker search #搜索镜像
docker pull #下载镜像 docker image pull
docker rmi #删除镜像 docker image rm

docker操作容器命令

docker run    镜像id #新建容器并启动
docker ps     #列出所有运行的容器 docker container list
docker rm     容器id #删除指定容器
docker start  容器id #启动容器
docker restart容器id #重启容器
docker stop   容器id #停止当前正在运行的容器
docker kill   容器id #强制停止当前容器
docker logs -ft 容器id #跟着日志
docker inspect 容器id #查看镜像元数据信息
docker exec -it 容器id #进入容器当中
docker run的启动流程

在这里插入图片描述

  1. 首先执行docker run之后,会根据指定的image优先从本地找该镜像资源
  2. 如果本地没找到,就会去docker hub镜像仓库上去找,如果本地有就直接用本地镜像资源
  3. 若docker hub镜像仓库上也没找到就会报错,提示资源不存在
  4. 若docker hub镜像仓库上找到资源,就会先下载该资源到本地,最后启动镜像
docker底层工作原理

在这里插入图片描述

  1. 首先要使用docker,必须开启docker服务,开启docker服务就意味着开启docker守护进程
  2. docker run启动多个容器服务,每个容器互相隔离,但是容器要与宿主机Linux联系必须通过docker守护进程
  3. Linux系统 <----> docker守护进程 <-----> 容器服务
docker pull镜像加载原理
  • UnionFs (联合文件系统)
    Union文件系统是 Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像
  • 加载原理
    在这里插入图片描述1.docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS,每一层级都包含对应的文件系统,通过docker pull下载镜像其实就是加载每一层级的文件系统
    2.若下载其他镜像出现已存在的字样表示docker底层支持共享文件系统概念,有的就不下载,docker会直接拿来用
    在这里插入图片描述
    3.docker inspect image可以查看该镜像依赖的联合文件系统,如图Layers显示的就是文件的hash值
容器数据共享
  • 容器数据卷是将容器与宿主机之间实现目录or文件映射关系,从而实现docker容器与操作系统之间数据共享
#-v /data/webapps:/usr/local/tomcat/webapps   宿主机目录与容器目录实现映射关系
# -p表示Linux外部端口与容器内部端口实现映射关系
docker run -d -p 18889:8080 --name test-tomcat -v /data/webapps:/usr/local/tomcat/webapps 7104b0bd2157
Dockerfile
  • docker支持的脚本文件,通过docker支持的指令来生成镜像

Dockerfile基本结构

Dockerfile 一般分为:基础镜像、镜像元信息、镜像操作指令和容器启动时执行指令,# 为 Dockerfile 中的注释

dockerfile文件说明

Docker 从上到下的顺序运行Dockerfile 的指令,每一个指令都以 step 为步骤。而且文件的命名也必须为 DockerfileDockerfile常用命令

# DockerFile常用指令
FROM				# 基础镜像,一切从这里开始构建
MAINTAINER			# 镜像是谁写的, 姓名+邮箱
RUN					# 镜像构建的时候需要运行的命令
ADD					# 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
WORKDIR				# 镜像的工作目录
VOLUME				# 挂载的目录
EXPOSE				# 保留端口配置
CMD					# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT			# 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD				# 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。
COPY				# 类似ADD,将我们文件拷贝到镜像中
ENV					# 构建的时候设置环境变量!
#FROM是指定基础镜像,必须为第一个命令,格式:
FROM <image>:<tag>
#示例:
FROM mysql:5.6

#RUN 指令是用来执行命令行命令的
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

#COPY复制文件
COPY [--chown=<user>:<group>] <源路径>... <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
COPY package.json /usr/src/app/

#ADD更高级的赋值文件
#ADD 指令和 COPY 的格式和性质基本一致。但是在 COPY 基础上增加了一些功能。如果 <源路径> 为一个 tar 压缩文件的话,压缩格式为 gzip , bzip2 以及xz 的情况下, ADD 指令将会自动解压缩这个压缩文件到 <目标路径> 去
ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /

#CMD容器启动命令
> CMD 指令的格式和 RUN 相似,也是两种格式:
>
> - shell 格式: CMD <命令>
> - exec 格式: CMD ["可执行文件", "参数1", "参数2"...]
> - 参数列表格式: CMD ["参数1", "参数2"...] 。在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数。

#ENV设置环境变量
ENV VERSION=1.0 DEBUG=NAME="Happy Feet"

#VOLUME定义匿名卷
- VOLUME ["<路径1>", "<路径2>"...]

#EXPOSE端口声明
- EXPOSE <端口1> [<端口2>...] 
#EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P时,会自动随机映射 EXPOSE 的端口。要将 EXPOSE 和在运行时使用 -p <宿主端口>:<容器端口> 区分开来。 -p ,是映射宿主端口和容器端口,换句话说,就是将容器的对应端口服务公开给外界访问,而 EXPOSE 仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射。

#WORKDIR指定工作目录
 - WORKDIR <工作目录路径>

三、docker高级知识

docker-compose
  • Compose是用于定义和运行多容器Docker应用程序的工具

使用Compose基本上是一个三步过程:

  1. 使用定义您的应用环境,Dockerfile以便可以在任何地方复制。
  2. 定义组成应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。
  3. Run docker-compose upand Compose启动并运行您的整个应用程序。

安装docker compose

#1. 运行以下命令以下载Docker Compose的当前稳定版本:
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#2. 将可执行权限应用于二进制文件:
sudo chmod +x /usr/local/bin/docker-compose

卸载docker compose

sudo rm /usr/local/bin/docker-compose

docker compose yml语法配置详解
地址: https://docs.docker.com/compose/compose-file/

docker compose常用命令

1.docker-compose up
用于部署一个 Compose 应用。默认情况下该命令会读取名为 docker-compose.yml 或 docker-compose.yaml 的文件。当然用户也可以使用 -f 指定其他文件名。通常情况下,会使用 -d 参数令应用在后台启动。
2.docker-compose stop
停止 Compose 应用相关的所有容器,但不会删除它们。被停止的应用可以很容易地通过 docker-compose restart 命令重新启动。
3.docker-compose rm
用于删除已停止的 Compose 应用。它会删除容器和网络,但是不会删除卷和镜像。
4.docker-compose restart
重启已停止的 Compose 应用。如果用户在停止该应用后对其进行了变更,那么变更的内容不会反映在重启后的应用中,这时需要重新部署应用使变更生效。
5.docker-compose ps
用于列出 Compose 应用中的各个容器,输出内容包括当前状态、容器运行的命令以及网络端口。
6.docker-compose down
停止并删除运行中的 Compose 应用。

如何搭建个人的镜像仓库

1. 登录阿里云Docker Registry

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

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

2. 从Registry中拉取镜像

$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/kaleidoscopic/henry:[镜像版本号]

3. 将镜像推送到Registry

$ sudo docker login --username=henry丶肖 registry.cn-hangzhou.aliyuncs.com$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/kaleidoscopic/henry:[镜像版本号]$ sudo docker push registry.cn-hangzhou.aliyuncs.com/kaleidoscopic/henry:[镜像版本号]

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

4. 选择合适的镜像仓库地址

从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。

如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录,并作为镜像命名空间前缀。

5. 示例

使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。

$ sudo docker imagesREPOSITORY                                                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZEregistry.aliyuncs.com/acs/agent                                    0.7-dfb6816         37bb9c63c8b2        7 days ago          37.89 MB$ sudo docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

使用"docker images"命令找到镜像,将该镜像名称中的域名部分变更为Registry专有网络地址。

$ sudo docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

6.拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/kaleidoscopic/henry:1.1.1

个人总结来源于docker官网及狂神说java的docker讲解:https://www.bilibili.com/video/BV1og4y1q7M4?from=search&seid=15595339542807380388

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐