【Docker】入门教程

devtools/2025/1/16 18:08:09/

目录

一、Docker的安装

二、Docker的命令

Docker命令实验

1.下载镜像

2.启动容器

3.修改页面

4.保存镜像

5.分享社区

三、Docker存储

1.目录挂载

2.卷映射

四、Docker网络

1.容器间相互访问

2.Redis主从同步集群

3.启动MySQL

五、Docker Compose

 1.命令式安装

2.compose.yaml


参考视频:

https://www.bilibili.com/video/BV14WtLeDEit

一、Docker的安装

使用本机虚拟机或云平台

国内常见云平台:阿里云、腾讯云、华为云、青云......

使用CentOS 7.9

# 移除旧版本docker
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine# 配置docker yum源。
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装 最新 docker
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 启动& 开机启动docker; enable + start 二合一
systemctl enable docker --now# 配置加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://mirror.ccs.tencentyun.com","https://docker.m.daocloud.io"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

二、Docker的命令

#查看运行中的容器
docker ps
#查看所有容器
docker ps -a
#搜索镜像
docker search nginx
#下载镜像
docker pull nginx
#下载指定版本镜像
docker pull nginx:1.26.0
#查看所有镜像
docker images
#删除指定id的镜像
docker rmi e784f4560448#运行一个新容器
docker run nginx
#停止容器
docker stop keen_blackwell
#启动容器
docker start 592
#重启容器
docker restart 592
#查看容器资源占用情况
docker stats 592
#查看容器日志
docker logs 592
#删除指定容器
docker rm 592
#强制删除指定容器
docker rm -f 592
# 后台启动容器
docker run -d --name mynginx nginx
# 后台启动并暴露端口
docker run -d --name mynginx -p 80:80 nginx
# 进入容器内部
docker exec -it mynginx /bin/bash# 提交容器变化打成一个新的镜像
docker commit -m "update index.html" mynginx mynginx:v1.0
# 保存镜像为指定文件
docker save -o mynginx.tar mynginx:v1.0
# 删除多个镜像
docker rmi bde7d154a67f 94543a6c1aef e784f4560448
# 加载镜像
docker load -i mynginx.tar # 登录 docker hub
docker login
# 重新给镜像打标签
docker tag mynginx:v1.0 leifengyang/mynginx:v1.0
# 推送镜像
docker push leifengyang/mynginx:v1.0

Docker命令实验

接下来尝试做一个简单实验来熟悉docker命令!

实验要求如下:

启动一个nginx,并将它的首页改为自己的页面,发布出去,让所有人都能使用。

实验步骤:

下载镜像——> 启动容器——> 修改页面——> 保存镜像——> 分享社区

1.下载镜像

查看有没有这个镜像

 下载镜像

查看是否下载成功 

2.启动容器

启动nginx容器

但是这样启动会让会话的输入窗口阻塞,无法再在当前会话窗口中输入命令,那有没有更好的启动方式呢?有的兄弟,有的。

以下命令启动,可以实现后台启动,并给启动的容器自定义容器,同时容器内部的端口与宿主机的端口建立映射关系(宿主机外部的网络可以通过宿主机的端口访问到容器内部的应用程序):

3.修改页面

先进入容器内部

修改页面内容

原页面如下:

修改后的页面如下:

4.保存镜像

将修改好后的镜像进行“提交”操作

将镜像进行“保存”操作,如保存成一个文件

如果你拿到别人给的镜像tar包,该如何加载该镜像呢?——使用“加载”操作

5.分享社区

这一步需要登录dockerHub的账号并进行推送,在此不做演示。

三、Docker存储

掌握目录挂载、数据卷,让容器数据不再丢失。

1.目录挂载

在上面的实验中,有一个要求是修改nginx的首页页面,上面的做法是使用“docker exec”命令进入容器内部进行修改,但是这种做法还是过于麻烦。而且,如果该容器暴毙,再重新启动一个新的容器,那么之前那个容器运行的数据也就丢失了。

可以使用“-v”命令来将容器的部分文件挂载到外部,这样修改外部的文件就相当于修改容器内部的文件的了。

2.卷映射

使用“目录挂载”的方式,挂载的文件或目录是空的,需要自己添加内容,这样的方式不适合挂载配置文件。因为配置文件我希望它先继承原先的配置文件,我再进行部分修改。如果要实现这样的需求,就可以通过“卷映射”来实现。

这是“目录挂载”和“卷映射”命令的区别,目录挂载的位置要以“/”开头,而卷映射不需要。

这是卷映射中的默认存放地址。

四、Docker网络

1.容器间相互访问

docker在创建容器后,都会默认让容器加入docker0网络,并为每个容器分配唯一ip,使用容器ip+容器端口可以相互访问,注意ip由于各种原因可能会变化。

但是这样的话,如果要互相访问,还需要特地去查一下目的容器的ip,略显麻烦,能不能使用域名的方式呢?这样就不需要去查询ip了,域名可以直接使用容器名。

有的,这样的方法就是创建自定义网络(如上图创建了一个自定义网络叫mynet),在创建容器的命令中加入设置容器网络的部分命令即可,这样容器名就是稳定域名。

2.Redis主从同步集群

#自定义网络
docker network create mynet
#主节点
docker run -d -p 6379:6379 \
-v /app/rd1:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=master \
-e REDIS_PASSWORD=123456 \
--network mynet --name redis01 \
bitnami/redis#从节点
docker run -d -p 6380:6379 \
-v /app/rd2:/bitnami/redis/data \
-e REDIS_REPLICATION_MODE=slave \
-e REDIS_MASTER_HOST=redis01 \
-e REDIS_MASTER_PORT_NUMBER=6379 \
-e REDIS_MASTER_PASSWORD=123456 \
-e REDIS_PASSWORD=123456 \
--network mynet --name redis02 \
bitnami/redis
3.启动MySQL
docker run -d -p 3306:3306 \
-v /app/myconf:/etc/mysql/conf.d \
-v /app/mydata:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.37-debian

五、Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具,通过一个 YAML 文件来配置应用程序的服务、网络和卷,然后使用单个命令即可创建和启动所有服务。

 1.命令式安装
#创建网络
docker network create blog#启动mysql
docker run -d -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=wordpress \
-v mysql-data:/var/lib/mysql \
-v /app/myconf:/etc/mysql/conf.d \
--restart always --name mysql \
--network blog \
mysql:8.0#启动wordpress
docker run -d -p 8080:80 \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=123456 \
-e WORDPRESS_DB_NAME=wordpress \
-v wordpress:/var/www/html \
--restart always --name wordpress-app \
--network blog \
wordpress:latest
2.compose.yaml
name: myblog
services:mysql:container_name: mysqlimage: mysql:8.0ports:- "3306:3306"environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=wordpressvolumes:- mysql-data:/var/lib/mysql- /app/myconf:/etc/mysql/conf.drestart: alwaysnetworks:- blogwordpress:image: wordpressports:- "8080:80"environment:WORDPRESS_DB_HOST: mysqlWORDPRESS_DB_USER: rootWORDPRESS_DB_PASSWORD: 123456WORDPRESS_DB_NAME: wordpressvolumes:- wordpress:/var/www/htmlrestart: alwaysnetworks:- blogdepends_on:- mysqlvolumes:mysql-data:wordpress:networks:blog:

增量更新:

修改 Docker Compose 文件。重新启动应用。只会触发修改项的重新启动。

数据不删:

默认就算down了容器,所有挂载的卷不会被移除。比较安全。


http://www.ppmy.cn/devtools/151017.html

相关文章

Springboot 注解缓存使用教程

Spring Boot Cache 注解使用教程 Spring Boot 提供了强大的缓存抽象,开发者可以通过注解快速实现缓存功能,从而提高系统性能。本教程将全面介绍 Spring Boot 提供的缓存相关注解及其作用,并结合示例讲解实际应用。 1. 常用缓存注解概览 Spring Boot 缓存提供以下核心注解…

3. Flink 窗口

一. 基本概念 窗口是处理无限流的核心。窗口将流划分为固定大小的“桶”&#xff0c;方便程序员在上面应用各种计算。Window操作是流式数据处理的一种非常核心的抽象&#xff0c;它把一个无限流数据集分割成一个个有界的Window&#xff0c;然后就可以非常方便地定义作用于Wind…

Python海龟绘图库:从入门到精通 - Python官方文档(三万字解析!)

turtle --- 海龟绘图 源码&#xff1a; Lib/turtle.py 概述 海龟绘图是对 最早在 Logo 中引入的受欢迎的几何绘图工具 的实现&#xff0c;它由 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 在 1967 年开发。 入门 请想象绘图区有一只机器海龟&#xff0c;起始位置在…

Flask-SQLAlchemy 基于一个base表 - 动态创建使用相同字段的其他业务表

1 安装 首先&#xff0c;确保您安装了 Flask 和 SQLAlchemy&#xff0c;以及 MySQL 的驱动程序&#xff08;例如 mysql-connector-python 或 PyMySQL&#xff09;&#xff1a; pip install Flask Flask-SQLAlchemy mysql-connector-python2 创建项目结构 创建一个简单的项目…

【数模学习笔记】插值算法和拟合算法

声明&#xff1a;以下笔记中的图片以及内容 均整理自“数学建模学习交流”清风老师的课程资料&#xff0c;仅用作学习交流使用 文章目录 插值算法定义三个类型插值举例插值多项式分段插值三角插值 一般插值多项式原理拉格朗日插值法龙格现象分段线性插值 牛顿插值法 Hermite埃尔…

java集合面试题

java集合面试题 java集合面试题java集合框架的基础接口有哪些&#xff1f;单列集合的基础接口List, Set, Map 是否继承自 Collection 接口List、Map、Set 三个接口&#xff0c;存取元素时&#xff0c;各有什么特点&#xff1f;你所知道的集合类都有哪些&#xff1f;主要方法&am…

(即插即用模块-Attention部分) 四十四、(ICIP 2022) HWA 半小波注意力

文章目录 1、Half Wavelet Attention2、代码实现 paper&#xff1a;HALFWAVELET ATTENTION ON M-NET FOR LOW-LIGHT IMAGE ENHANCEMENT Code&#xff1a;https://github.com/FanChiMao/HWMNet 1、Half Wavelet Attention 传统的图像增强方法主要关注图像在空间域的特征信息&am…

DFT可测性设置与Tetramax测试笔记

1 DFT 1.1 DFT类型 1、扫描链&#xff08;SCAN&#xff09;&#xff1a; 扫描路径法是一种针对时序电路芯片的DFT方案.其基本原理是时序电路可以模型化为一个组合电路网络和带触发器(Flip-Flop&#xff0c;简称FF)的时序电路网络的反馈。 Scan 包括两个步骤&#xff0c;scan…