docker学习笔记

img

docker是什么?

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。

如何理解轻量级的、可移植的、自给自足?

轻量级的:它能够在相对较少的资源消耗下运行。Docker使用了操作系统级虚拟化技术,如容器化,它允许应用程序在隔离的环境中运行,而无需启动完整的虚拟机。相比传统虚拟机,容器更加轻量级,占用更少的内存、磁盘空间和处理器资源。

可移植的:Docker容器在不同的环境中均能够运行,包括开发环境、测试环境、生产环境等。Docker利用容器的封装性和依赖管理机制,将应用程序及其所有的依赖项和配置打包成一个独立的容器。这意味着您可以将容器轻松地从一台计算机迁移到另一台计算机,而无需担心环境差异或依赖项的缺失。

自给自足:指容器可以包含应用程序所需要的所有依赖项,而无需依赖于宿主操作系统的配置。容器内部包含了应用程序的可执行文件、运行时环境、系统库和依赖项等。这意味着您可以将容器部署在不同的操作系统上(例如Windows、Linux),甚至在没有网络连接的情况下工作。

优势

Docker的轻量级、可移植性和自给自足性使得它成为一个强大的工具,能够简化应用程序的部署和交付过程,并提供一致的运行环境,从而提高开发、测试和生产效率。

用来做什么?

打包、分发、部署

打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包(也就是镜像)
分发:你可以把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装(创建一个容器)
部署:拿着“安装包”就可以一个命令运行起来你的应用,自动模拟出一摸一样的运行环境,不管是在 Windows/Mac/Linux。

容器与镜像与仓库

镜像:可以理解为软件安装包,可以方便的进行传播和安装。

容器:软件安装后的状态,每个软件运行环境都是独立的、隔离的,称之为容器

仓库:安装包上传的地方,可以提供给其他人安装与下载。

安装Docker

官网安装

桌面版:https://www.docker.com/products/docker-desktop

MAC系统可使用homebrew安装

brew install docker
docker --version  //验证docker是否安装成功

配置镜像加速源(“registry-mirrors”: [“https://registry.docker-cn.com”])

镜像加速器镜像加速器地址
Docker 中国官方镜像https://registry.docker-cn.com
腾讯云https://mirror.ccs.tencentyun.com

img

Docker开发中的常用命令

docker login 仓库地址 -u name -p password

docker run: 用于创建和启动一个新的容器。

docker ps: 显示正在运行的容器列表。

docker push: 将本地镜像推送到远程仓库。

docker pull: 从远程仓库下载一个镜像。

docker images: 显示本地镜像列表。

docker save:命令用于将Docker镜像保存到一个压缩的存档文件中。这个存档文件可以用于在其他机器上加载和导入镜像。

docker stop: 停止一个或多个正在运行的容器。

docker start: 启动一个或多个已停止的容器。

docker restart: 重启一个或多个正在运行的容器。

docker rm: 删除一个或多个容器。

docker rm container-id: 删除指定 id 的容器

docker stop/start container-id :停止/启动指定 id 的容器

docker rmi image-id: 删除指定 id 的镜像

docker volume ls :查看 volume 列表

docker network ls: 查看网络列表

docker build :根据dockerfile文件构建镜像

Docker快速安装软件

直接安装:安装麻烦,时间长,需要手动安装指定版本,一个软件的多版本不能在一台电脑上共存等

docker安装:一行命令安装,快速方便,有大量的镜像可以使用,没有不同系统兼容性问题,用完就丢,不占用电脑内存。

演示 Docker 安装 Redis

Redis 官网:https://redis.io/

官网下载安装教程只有源码安装方式,没有 Windows 版本。想要自己安装 windows 版本需要去找别人编译好的安装包。

Docker 官方镜像仓库查找 Redis :https://hub.docker.com/

img

一个命令安装并启动:

`docker run -d -p 6379:6379 --name redis redis:latest`

img

制作自己的镜像

为自己的 Web 项目构建镜像

编写dockerfile文件
# 基于某个基础镜像构建新的镜像
FROM node:16

# 复制代码
ADD . /app

# 将本地文件复制到镜像中
COPY . .

#设置镜像中的工作目录
WORKDIR /app

# 执行容器启动时的命令
CMD node app.js
Build 为镜像(安装包)和运行

编译 docker build -t test:v1 .

-t 设置镜像名字和版本号

. 会自动在该目录下找dockerfile文件进行构建(将当前目录作为构建上下文)

运行 docker run -p 8080:8080 --name test-hello test:v1

-p 映射容器内端口到宿主机
--name 容器名字
-d 后台运行

本地8080端口访问

目录挂载

使用 Docker 运行后,我们改了项目代码不会立刻生效,需要重新buildrun,容器里面产生的数据,例如 log 文件,数据库备份文件,容器删除后就丢失了

使用目录挂载解决上述问题

img

常用的挂载方式

  • bind mount 直接把宿主机目录映射到容器内,适合挂代码目录和配置文件。可挂到多个容器上
  • volume 由容器创建和管理,创建在宿主机,所以删除容器不会丢失,官方推荐,更高效,Linux 文件系统,适合存储数据库数据。可挂到多个容器上
挂载演示
bind mount` 方式用绝对路径 `-v D:/code:/app
volume` 方式,只需要一个名字 `-v db-data:/app

示例:
docker run -p 8080:8080 --name test-hello -v D:/code:/app -d test:v1

补充:目录挂载后 修改宿主机代码容器内代码也会跟着改变,但是需要重新启动下容器来正常访问

多容器通信

项目往往都不是独立运行的,需要数据库、缓存这些东西配合运作。

在 Docker 中,可以创建自定义的网络,使得容器可以在同一个网络中进行通信。可以使用以下命令创建网络

docker network create mynetwork

然后,在启动容器时,将其连接到该网络:

 docker run --network=mynetwork --name=container1 image1
 docker run --network=mynetwork --name=container2 image2

这样,container1container2 就可以通过网络进行通信,可以使用容器名或 IP 地址进行通信。

Dokcer-Compose

如果项目依赖更多的第三方软件,我们需要管理的容器就更加多,每个都要单独配置运行,指定网络。

我们需要使用 docker-compose 把项目的多个服务集合到一起,一键运行。

这里以web项目与redis为例

编写脚本

要把项目依赖的多个服务集合到一起,我们需要编写一个docker-compose.yml文件,描述依赖哪些服务

version: "3.7"

services:
  app:
    build: ./
    ports:
      - 80:8080
    volumes:
      - ./:/app
    environment:
      - TZ=Asia/Shanghai
  redis:
    image: redis:5.0.13
    volumes:
      - redis:/data
    environment:
      - TZ=Asia/Shanghai

volumes:
  redis:

docker-compose.yml 文件所在目录,执行:docker-compose up就可以跑起来了。

在后台运行只需要加一个 -d 参数docker-compose up -d
查看运行状态:docker-compose ps
停止运行:docker-compose stop

发布与部署

镜像仓库用来存储我们 build 出来的“安装包”,Docker 官方提供了一个 镜像库,里面包含了大量镜像,基本各种软件所需依赖都有,要什么直接上去搜索。

我们也可以把自己 build 出来的镜像上传到 docker 提供的镜像库中,方便传播。

当然你也可以搭建自己的私有镜像库,或者使用国内各种大厂提供的镜像托管服务,例如:阿里云、腾讯云

上传我们的镜像
  • 首先你要先 注册一个账号
  • 创建一个镜像库
    image.png
  • 命令行登录账号:
    docker login -u username
  • 新建一个tag,名字必须跟你注册账号一样
    docker tag test:v1 username/test:v1
  • 推上去
    docker push username/test:v1
  • 部署试下
    docker run -dp 8080:8080 username/test:v1
docker-compose 中也可以直接用这个镜像了
version: "3.7"

services:
  app:
#    build: ./
    image: helloguguji/test:v1
    ports:
      - 80:8080
    volumes:
      - ./:/app
    environment:
      - TZ=Asia/Shanghai
  redis:
    image: redis:5.0.13
    volumes:
      - redis:/data
    environment:
      - TZ=Asia/Shanghai

volumes:
  redis:

开发时常用:

1.本地编写Dockerfile

2.构建镜像

docker build -t <镜像名称> <Dockerfile路径>:构建一个镜像,可以通过指定 Dockerfile 文件和镜像名称来完成。

3.登录公司镜像仓库地址

docker login 仓库地址 -u name -p password

4.将镜像推送到公司镜像仓库

docker push <镜像名称>:将本地的镜像推送到 Docker 镜像仓库。

5.拉取镜像源

docker pull <镜像名称>:从 Docker 镜像仓库中拉取指定的镜像。

6.运行该容器

docker run <镜像名称>:根据指定的镜像创建并运行一个容器。

脚本构建

编写为build.sh自动化脚本完成构建打包流程

补充:

docker 服务的默认端口是?

Docker服务的默认端口是2375(非加密通信)和2376(使用TLS加密通信)。这些端口用于与Docker守护程序进行通信,允许您管理和操作Docker容器和镜像。2375端口用于非加密的通信,而2376端口通过TLS协议进行加密通信,提供更高的安全性。通过连接到这些端口,您可以使用Docker客户端与Docker守护程序进行交互。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一缕阳光@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值