【Docker】入门教程

ops/2025/1/14 4:18:57/

目录

一、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/ops/149914.html

相关文章

【数据库】一、数据库系统概述

文章目录 一、数据库系统概述1 基本概念2 现实世界的信息化过程3 数据库系统内部体系结构4 数据库系统外部体系结构5 数据管理方式 一、数据库系统概述 1 基本概念 数据&#xff1a;描述事物的符号记录 数据库&#xff08;DB&#xff09;&#xff1a;长期存储在计算机内的、…

docker安装rabbit后访问报错最佳的几种解决方案

错误通常是由于RabbitMQ的安全配置导致的&#xff0c;RabbitMQ默认配置允许的用户仅能通过localhost访问。这通常出现在RabbitMQ的guest用户上&#xff0c;guest用户默认只能从localhost登录&#xff0c;而无法从其他IP地址进行远程访问。 解决方法&#xff1a; 1. **创建一个…

java 查询树结构数据,无限层级树结构通用方法

1、数据库表数据 2、controller层TestTree简单测试 RestController RequestMapping("/test") public class testTreeController {Autowiredprivate TestTreeService testTreeService;GetMapping("/list")public List<TestTree> List(TestTree tree)…

【Python】edge-tts :便捷语音合成

edge-tts 是一个功能强大的 Python 库&#xff0c;利用 Microsoft Azure 的云端文本到语音&#xff08;TTS&#xff09;服务&#xff0c;支持多种语言和声音选项&#xff0c;能够生成高质量、自然听感的语音输出。它支持多种音频格式&#xff0c;包括 MP3、WAV 和 OGG&#xff…

深入解析 C++ 类型转换

简介 C 类型转换是开发者必须掌握的重要技能之一, 无论是处理隐式转换还是显式转换, 理解其背后的机制与用法至关重要. 本篇博客旨在从基础到高级全面解析 C 的类型转换, 包括实际开发中的应用场景和性能分析. 自动转换 隐式类型转换 编译器可以在无需明确指示的情况下, 将一…

ue5 GAS 从零开始00

技能属性GAS 技能 属性 创建一个项目c 插件搜索 gameplay 保证这里勾选上 把这三个弄上去 “GameplayAbilities”,“GameplayTags”,“GameplayTasks” 这样就加载了三个模块 一定要先关ue 先关掉ue 生成 如果没编过&#xff0c;你就检查模块名字是不是没写对 一定要…

Python 在 DevOps 与自动化中的应用

随着信息技术的不断发展&#xff0c;DevOps 文化和自动化流程已经成为现代软件开发和运维的核心。DevOps 强调开发和运维团队之间的协作&#xff0c;旨在通过自动化来提升开发、测试、部署、监控和反馈等各个环节的效率。而 Python 作为一门简单、高效且功能强大的编程语言&…

基于知识蒸馏的跨模态目标检测方法总结

ECCV 2022&#xff1a;Cross-modality knowledge distillation network for monocular 3d object detection Teacher模型&#xff1a;基于LiDAR points训练的3D目标检测模型 Student模型&#xff1a;基于Monocular训练的3D目标检测模型 从image或者LiDAR到BEV特征的转换方法&…