Docker学习之旅(一)
Docker学习之旅(一)
Docker 是一个能够把开发应用程序自动部署到容器的开源引擎。
Docker-compose 是一个可以定义和运行多容器、多Docker应用程序的工具
基础知识
Docker
首先了解一下Docker本身
一句话概括:Docker可以通过相应命令,(构建)启动(删除)容器,拉起对应镜像,提供一些微服务
(水果捞示例:跟老板说要一份***水果捞,老板拿起碗给你装了你想要的水果和牛奶,给你一份好吃的水果捞)
(ˉ﹃ˉ)
其实这样说可能不如和虚拟机对照一下更好理解
Docker真的很快(抛开下载一些第三方库不谈)
具体解释
Docker主要包含镜像、容器、仓库三个概念
- 镜像:一个只读模板,类比于虚拟机的磁盘映像(iso)(水果、牛奶)
- 容器:镜像运行的实例,类比于虚拟机 (碗)
- 仓库:存储和分发镜像的仓库,类似于GitHub(店)
优点
- 更快速的交付和部署
- 更高效的虚拟化
- 更轻松的迁移和扩展
- 更简单的管理
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:
参考资料
浅析开源容器标准——OCI有兴趣可以了解一下容器的历史和OCI标准
本文链接:
/archives/1690973110484
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
打工人驿站!
喜欢就支持一下吧
打赏
微信
支付宝