Docker学习之旅(一)

Docker 是一个能够把开发应用程序自动部署到容器的开源引擎。

Docker-compose 是一个可以定义和运行多容器、多Docker应用程序的工具

基础知识

Docker

首先了解一下Docker本身

一句话概括:Docker可以通过相应命令,(构建)启动(删除)容器,拉起对应镜像,提供一些微服务

(水果捞示例:跟老板说要一份***水果捞,老板拿起碗给你装了你想要的水果和牛奶,给你一份好吃的水果捞)

(ˉ﹃ˉ)

其实这样说可能不如和虚拟机对照一下更好理解

Docker真的很快(抛开下载一些第三方库不谈)

具体解释

Docker主要包含镜像、容器、仓库三个概念

  • 镜像:一个只读模板,类比于虚拟机的磁盘映像(iso)(水果、牛奶)
  • 容器:镜像运行的实例,类比于虚拟机 (碗)
  • 仓库:存储和分发镜像的仓库,类似于GitHub(店)

优点

  1. 更快速的交付和部署
  2. 更高效的虚拟化
  3. 更轻松的迁移和扩展
  4. 更简单的管理

Docker-compose

超强工具(捆绑包)

一句话概括:docker-compose可以一次性拉起多个容器,启动多个对应的微服务

(同时打包多份水果捞!)

好好好(ˉ﹃ˉ)

简单示例

多个Docker的运行非常麻烦,一个个需要编写Dockerfile ,然后docker build构建,然后docker run启动

同时删除的时候要删掉对应的镜像和仓库

还有一个问题就是,Docker容器之间要建立联系(通信)很麻烦,需要建立桥接网络

并且在启动容器时加上选项 --network docker_test以保证各个容器用相同桥接网络

或者使用其他网络模式

重点来了

Docker-compose不用这么麻烦,只要编写一个 docker-compose.yml 即可,同时启动web端、数据库等各个服务

至于网络,compose会让这些服务默认链接到同一个网络

示例代码如下

version: '3'

services:
  web:
    build:
      context: ./web
      dockerfile: Dockerfile
    ports:
      - "80:80"

  database:
    image: postgres:latest
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword

基本命令

服务器发行版:ubuntu22.04

Docker

#安装
curl -fsSL https://get.docker.com/ | sh
#启动
sudo systemctl start docker
#检查状态
sudo systemctl status docker
#卸载
sudo apt-get purge docker-ce docker-ce-cli containerd.io
#存储镜像  -o xxx.tar 打包为xxx.tar
docker save -o ubuntu_14.04.tar ubuntu:14.04
#载入镜像  
docker load < ubuntu_14.04.tar  #或者使用 
cat ubuntu.tar |  docker import - test/ubuntu:v1.0
#其他不再赘述

Docker-compose

#安装(最好挂个梯子)
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#授予执行权限
sudo chmod +x /usr/local/bin/docker-compose
#检查
docker-compose --version
#启动   -d表示后台运行
docker-compose up -d
#停止
docker-compose down
#其他不再赘述

简单示例(博客搭建)

copy一份其他博主的(halo)docker-compose.yml

<( ̄︶ ̄)>

version: "3"

services:
  halo:
    image: halohub/halo:2.6.0
    container_name: halo
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./:/root/.halo2
    ports:
      - "8090:8090"
    command:
      - --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo
      - --spring.r2dbc.username=root
      # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=o#DwN&J****
      - --spring.sql.init.platform=mysql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/
      # 初始化的超级管理员用户名
      - --halo.security.initializer.superadminusername=admin
      # 初始化的超级管理员密码
      - --halo.security.initializer.superadminpassword=P@88w0rd

  halodb:
    image: mysql:8.0.31
    container_name: halodb
    restart: on-failure:3
    networks:
      halo_network:
    command: 
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_general_ci
      - --explicit_defaults_for_timestamp=true
    volumes:
      - ./mysql:/var/lib/mysql
      - ./mysqlBackup:/data/mysqlBackup
    ports:
      - "3306"
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    environment:
      # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
      - MYSQL_ROOT_PASSWORD=o#D*****
      - MYSQL_DATABASE=halo

networks:
  halo_network:

参考资料

十分钟学会用docker部署微服务

Docker-Compose 基础与实战,看这一篇就够啦

菜鸟教程

Docker 使用指南 (一)—— 基本操作

浅析开源容器标准——OCI有兴趣可以了解一下容器的历史和OCI标准

文章作者: P4ul
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 打工人驿站
容器 Docker
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝