docker全面教程(简介、原理、常用命令、构建实例、dockerfile、docker compose、docker部署postgres数据库的案例介绍)

简介

本文将全面说明docker的使用教程,包括docker的简介、原理、常用命令、dockerfile构建、docker compose构建、设置docker下载源和docker使用案例(安装postgres数据库)。通过文本的学习,你将掌握使用docker部署应用的能力。

为什么使用docker?

在日常安装软件的过程中,会遇到各种报错。docker存在的意义就在于更加快速地下载和安装软件

什么是docker?

docker体系

在这里插入图片描述

docker client和docker server
  • docker client只用于前端交互,输入命令
  • docker server是针对docker client输入命令给予反馈,用于创建镜像,运营容器
docker image和docker container
  • docker image是一个保存着所有程序运行所需的步骤和配置的文件
  • docker container是image的一个实例,用于运行程序。一个image可以实例化出多个container

docker的实现原理

docker和虚拟机

  • 虚拟机VM:一个虚拟机运行一个完整的操作系统,每个虚拟机都有一个内核
  • docker:所有容器container都运行在linux操作系统上,并共享同一个内核。无论有多少个容器,都只有一个操作系统和一个内核

结论:VM要比docker消耗更多的资源

namespace和cgroups

docker就是利用linux的namespace和cgroups特性,实现的内核虚拟化技术

  • namespace:隔离资源,使得每个容器使用的资源互不影响
  • cgroups:控制资源,实现对资源的配额和度量

常用命令

查看docker版本
  • docker --versioin: 查看docker版本信息
查看正在运行的容器
  • docker ps: 查看docker正在运行的容器
  • docker ps --all: 查看docker运行容器的记录
创建容器
  • docker create : 创建容器
  • docker start -a : 启动容器
    • -a: 可选,选中则打印容器运行信息
  • docker run -d : 创建并启动容器,=docker create+docker start
    • -d: 可选项,选中表明容器在后台运行

在这里插入图片描述

清理停止使用的容器
  • docker system prune

在这里插入图片描述

获取容器日志
  • docker logs : 获取容器日志,执行该命令并不会启动或退出容器

在这里插入图片描述

关闭正在运行的容器
  • docker stop : 向容器进程发出停止指令,但会预留一段时间(10秒内)给程序做一些清理、保存、发消息等操作
  • docker kill : 向容器进程发出停止指令,进程会立即被关闭
在容器内运行语句
  • docker exec -it commend: 在容器内运行命令,-it实现容器进程的输入输出流重定向(使得docker内的容器进程输入输出流重定向到pc端的命令行)

根据Dockerfile构建image

  • docker build -t dockerID/dockerName:dockerVersion .: 根据编写的Dockerfile构建image,-t表明为生成image命名(dockerID/dockerName:dockerVersion)

tips:

golang项目的编译无法跨平台,即操作系统不同、cpu内核不同,都会造成错误,“standard_init_linux.go:219: exec user process caused: exec format error”

解决方法:

在build的时候指定platform

docker build --platform linux/amd64 -t hub/xx/xxx:v1 ./

docker compose

使用模版文件Dockerfile文件可以快速让用户创建一个自定义的容器,但是在实际的项目中,往往需要将多个容器组合起来使用。例如,在web项目中,需要后端、数据库、负载均衡容器等

compose允许用户通过一个单独的docker-compose.yml模版文件,来定义一组关联的容器为一个项目。

docker-compose.yml文件
version: '3'
services:
  redis-server:
    image: 'redis'
  node-app:
    restart: always
    build: .
    ports: 
      - "8081:8081"
compose语句
  • docker compose up -d --build: 通过docker-compose.yml文件启动项目

    • -d: 可选,选中则在后台运行项目
    • –build: 可选,选中则重新构建容器
  • docker compose down: 将项目中的所有容器关闭

  • docker compose ps: 根据docker-compose.yml文件中提及的container,查看container的运行情况(如果该目录下没有docker-compose.yml文件,则会报错“docker-compose.yml not found”)

restart类型
  • no: 如果容器停止或中断,不会尝试重启
  • always: 无论因为什么原因停止或中断,总是尝试重启
  • on-failure: 当因为错误代码(除了0之外的代码)中断时,才尝试重启
  • unless-stopped: 总是尝试重启,除非人为去停止

构建容器

流程

构建容器的复杂度在于编写Dockerfile,在Dockerfile中定义我们需要构建的容器是怎么样的

Dockerfile编写
  1. FROM alpine: 预先安装一系列有用的程序
  2. RUN apk add --update redis: apk是预先安装alpine中的包管理器,安装redis
  3. CMD [“redis-server”]: 容器启动命令
复制文件
  • COPY ./ ./: 将当前电脑目录中的文件复制到容器container特定路径中
多步构建
#   Use an existing docker image as a base
FROM alpine

#   Download and install a dependency
RUN apk add --update gcc
RUn apk add --update redis

#   Tell the image what to do when it starts
CMD [ "redis-server" ]

以上语句的image构建过程如图所示

在构建的过程中,每一步都会在上一步的基础上构建一个新的image

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MzC7eTk9-1687581531773)(/Users/liangyuliang/Library/Application Support/typora-user-images/image-20230405214243983.png)]

启动时的命令
  • CMD: 容器启动时执行的命令,不可追加
  • ENTRYPOINT: 容器启动时执行的命令,可追加命令

CMD和ENTRYPOINT同时使用时,CMD作为ENTRYPOINT的追加命令

先执行start.sh脚本进行数据库相关的配置,再执行main程序

CMD ["/app/main"]
ENTRYPOINT ["/app/start.sh"]

设置docker下载源

  1. 新建或编辑daemon.json

    vi /etc/docker/daemon.json

  2. daemon.json新增内容

    ``

    {

    ​ “registry-mirrors”:[“http://hub-mirror.c.163.com”]

    }

    ``

  3. 重启docker服务

systemctl restart docker.service

docker安装postgres

  1. 输入docker pull postgres:12-alpine进行postgres镜像安装

在这里插入图片描述

  1. 安装完成

在这里插入图片描述

  1. 输入docker images查看docker镜像

在这里插入图片描述

  1. 输入 docker run --name postgres12 -p 5432:5432 -e POSTGRES_USER=root -e POSTGRES_PASSWORD=secret -d postgres:12-alpine进行postgres实例化

在这里插入图片描述

  1. 输入docker ps查看postgres是否成功实例化

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值