docker简介

Docker简介

我们希望有一个工具可以帮助我们一键智能部署,假如你要部署在多台不同的机器上,可以不用担心不同系统,不同版本的差异,以及运行之前需要安装不同软件的痛苦。

当红的虚拟化软件:Dockerhttps://www.docker.com

Docker的进化

  • 传统的虚拟机,虚拟硬件以后,需要在上面安装一个完整的操作系统
  • Docker: 推出了容器的概念,每个容器不需要安装完成的操作系统,里面的进程直接运行在Docker创造的宿主内核中,不需要虚拟硬件

Docker的有点

  • 更快速的启动速度
  • 更少的资源占用
  • 一致的运行环境
  • 微服务架构,docker天生适配微服务架构

下载使用Docker

下载地址: https://www.docker.com/products/docker-desktop

docker-images

可以在https://hub.docker.com/search?q=&type=image中获取各种官方的镜像,并且可以上传你自己定义镜像

Docker镜像仓库获取镜像的命令是docker pull

bash 复制代码
# 下载镜像
docker pull <image-name>:<tag>
# 查看以及下载的镜像
docker images
# 删除镜像
docker rmi <image-id>
# 上传
docker push <username>/<repository>:<tag>

使用镜像代理

javascript 复制代码
"registry-mirrors": [
  'https://docker.mirrors.ustc.edu.cn',
  'https://reg-mirror-qiniu.com'
]

Docker Container

启动Docker容器
bash 复制代码
docker run -d -p 81:80 --name container-name image-name
# -d 后台运行
# -p 端口映射 81为主机的端口,80为镜像中的端口
# --name 自定义容器名称
# image-name 镜像名称,假如本地没有下载,会先自动 pull 一次镜像
其他命令
bash 复制代码
# 查看所有容器
docker ps
# 停止容器
docker stop container-id
# 删除容器
docker rm container-id
# 启动已终止容器
docker container start container-id
进入容器内部
bash 复制代码
docker exec -it <container-id> command
-i: 即使没有附加也保持STDIN打开
-t: 分配一个伪终端
持久化容器数据
使用 -v参数
bash 复制代码
docker run -d -p 81:80 -v host:container image-name
创建对应的volumn
bash 复制代码
# 创建
docker volume create <volumn-name>
# 使用volumn启动
docker run -d -v <volumn-name>:/data/db mongo
# 检查
docker volume inspect <volumn-name>
# 删除
docker volumn remove mongo
使用Dockerfile自定义镜像
Dockerfile是一个特殊的文本文件,里面包括一系列的指令,用来构建对应的镜像

所有指令: https://docs.docker.com/engine/reference/builder/#from

bash 复制代码
# 指定基础镜像 从node14构建
FROM node:14
# 创建对应的文件夹,作为项目运行的位置
RUN mkdir -p /usr/src/app
# 指定工作区,后面的运行任何命令都是在这个工作区中完成的
WORKDIR /usr/src/app
# 从本地拷贝对应的文件到 工作区
COPY server.js /usr/src/app/
# 告知当前Docker image暴露的是3000端口
EXPOSE 3000
# 执行启动命令,一个 Dockerfile 只能有一个
CMD node server.js
Docker build构建自定义镜像
bash 复制代码
# 这里特别注意上下文的概念,不要在根目录使用Dockerfile
docker build [选项] <上下文路径/URL/->
多个容器互相通信
信条:Docker中每一个container应该只完成一个工作,并且把它给做好

有点:

  1. 解耦,这样不同的服务和后端代码都可以完全分离开来,方便管理以及未来的扩展
  2. 服务的更新以及升级都是完全独立的
  3. 在一个container中,启动多个不同的进程,需要一个进行管理器

Docker compose

Docker compose是Docker官方推出的工具,用来管理和共享多个容器的应用。

安装

Mac和Windows假如安装客户端的话,是会自动安装Docker compose的

javascript 复制代码
docker-compose version

Linux需要单独安装,文档在这里:https://docs.docker.com/compose/install/

配置

docker compose通过一个特殊的yml文件,进行配置,这个文件必须命名为docker-compose.yml

docker-compose所有的字段参考文档:https://docs.docker.com/compose/compose-file/compose-file-v3/

启动以及关闭

bash 复制代码
# 启动
docker-compose up -d
# 关闭
docker-compose down

Docker镜像构建优化

优化镜像大小

什么是Alpine Linux: https://alpinelinux.org/

Alpine的优点

  • Small 小
    默认软件包,alpine选择busybox
    c 运行库,一般会用glibc, alpine选择musl
  • 最简依赖,Simple
    很多内置软件的插件都去掉
    国际化内容都被删除
  • Scure 安全

部署到服务器

安装Docker

Ubuntu:

配置用户组

因为是root安装,普通用户执行对应的命令的时候有可能会报错

需要将对应的用户添加到docker的用户组中

bash 复制代码
# usermod命令 修改用户账户
# a --append 添加 -G --groups 组的名称
sudo usermod -aG docker 你的用户名
# 如果组不存在 添加对应的 docker 组
sudo groupadd docker
# 查看一个用户所属的组
groups

添加下载镜像

bash 复制代码
# root
vim /etc/docker/daemon.json
{
  "registry-mirrors": [
     "https://docker.mirrors.ustc.edu.cn/",
     "https://reg-mirrors.qiniu.com"
   ]
}

运行

bash 复制代码
# 拉最新的代码
git pull 
# 先查看目前端口是否被占用
# 如果被占用,释放端口
# 或者改变 docker-compose.yml 的映射端口
docker-compose up -d

Github Actions 简介

学习YAML

YAML是一种标记语言,它使用空格作为缩进,看起来非常的简洁,可读性非常的好,非常适合一些内容大纲和配置文件。

bash 复制代码
# document start
# scalars 纯量,不能再分割的量
key: value
a_number_value: 100
boolean: true
# 字符串是不需要使用引号的,但是使用了也不会报错
quote_string: 'quote string'
# 多行字符串可以使用 literal block, 也就是竖线
mutiple_string:
  line one
  line two
  line three
# COLLECTION TYPES 集合类型
# 使用缩进表示层级关系,最好是两个空格
# 不是也没关系,只要对齐就可以
person:
  name: viking
  age: 30
  address:
    city: 'shanghai'
# Sequences 数据或者列表
hobbies:
  - Item 1
  - Item 2
  - name: 'weson'
  - 

Github官方的CI/CD工具,作为github的亲儿子,和github几乎是完美的无缝衔接的,功能非常强大

Workflow

https://docs.github.com/cn/actions/learn-github-actions/understanding-github-actions#workflows

Workflow是一个可配置的自动化流程,可以包含多个jobs,通过一个在repo当中的yml文件来定义的流程,一个repo可以包含多个workflow

Events

Event是触发workflow的特殊事件,比如pull request, push或者issue,也可以完全自定义,完整列表查看:https://docs.github.com/cn/actions/learn-github-actions/events-that-trigger-workflows

Jobs

Job是Workflow当中一系列的可执行步骤,每个Job是在同一个runner中进行的(Runner是指处于github的一台特殊的虚拟机,支持各种操作系统),每个步骤或者是一个shell脚本,或是一个可执行的action,每个步骤是按顺序执行,并且互相依赖的

Actions

Action是github actions中的一个自定义应用,它可以运行一系列复杂的并且常用的任务,使用action可以帮我们减少workflow中写重复代码,Github提供了非常多的action,可以在这里查阅:https://github.com/marketplace?type=actions同时我们也可以写自己的action.

使用ssh-action完成远程登录

文档地址:https://github.com/appleboy/ssh-action

阿里云容器镜像服务ACR

地址: https://www.aliyun.com/product/acr

相关推荐
gma99928 分钟前
【MySQL】服务器管理与配置
运维·服务器
Zl15975315975341 分钟前
k8s基础环境部署
云原生·容器·kubernetes
henan程序媛1 小时前
Jenkins Pipline流水线
运维·pipeline·jenkins
安全不再安全1 小时前
Linux 安装 yum
linux·运维·centos
suri ..1 小时前
【Linux】-----进程第二弹(优先级,环境变量)
linux·运维·服务器
Jay-juice2 小时前
Makefile入门
linux·运维·服务器
一水鉴天2 小时前
智能工厂的软件设计 作为“程序Program”的中台
运维·人工智能·机器学习·中间件
Maer092 小时前
WSL (Linux)配置 Rust 开发调试环境
linux·运维·rust
怒放的生命.3 小时前
电器自动化入门08:隔离变压器、行程开关介绍及选型
运维·自动化·电气自动化·电工基础
陌殇殇殇3 小时前
使用GitLab CI构建持续集成案例
运维·ci/cd·云原生·容器·kubernetes·gitlab