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

相关推荐
aherhuo27 分钟前
基于openEuler22.09部署OpenStack Yoga云平台(一)
linux·运维·服务器·openstack
WebDeveloper200130 分钟前
如何使用美国域名中心US Domain Center和WordPress创建商业网站
运维·服务器·css·网络·html
老大白菜1 小时前
Windows 11 安装 Dify 完整指南 非docker环境
windows·docker·容器
檀越剑指大厂1 小时前
【Linux系列】Shell 脚本中的条件判断:`[ ]`与`[[ ]]`的比较
linux·运维·服务器
2301_819287123 小时前
ce第六次作业
linux·运维·服务器·网络
CIb0la3 小时前
GitLab 停止为中国区用户提供 GitLab.com 账号服务
运维·网络·程序人生
武汉联从信息3 小时前
如何使用linux日志管理工具来管理oracle osb服务器日志文件?
linux·运维·服务器
天天进步20153 小时前
STUN服务器实现NAT穿透
运维·服务器
PieroPc4 小时前
Python 自动化 打开网站 填表登陆 例子
运维·python·自动化
VinciYan4 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发