Docker

一、Docker概述

什么是Docker?

Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。更重要的是容器性能开销极低。

Docker直译过来为"搬运工",就是搬运集装箱Container,Container可以装载任意类型的App,开发人员可以通过Docker将App变成一种标准化的,可移植的,自管理的组件,我们可以在任意主流操作系统中开发,调试和运行。

可以简单理解为一个轻量级的虚拟机,只虚拟所需要的运行环境,其他多余软件之类一概不要。
总结 : docker 是一种容器技术,解决软件跨环境迁移的问题。

功能

打包:可以将软件运行所需依赖,第三方库,软件打包到一块,变成一个安装包。(后面会演示)

分发:可以把你打包好的**"安装包"上传到一个镜像仓库,其他人可以非常方便的获取和安装**

部署:拿着**"安装包"就可以一个命令运行起来你的应用,自动模拟出一摸一样的运行环境**

二、Docker 架构

Docker 使用客户端-服务器架构,其中包括多个关键组件,确保容器化应用的高效构建、管理和运行。
Docker客户端 (client) 与 守护进程 (Docker daemon)进行对话,该守护进程 完成了构建、运行和分发 Docker 容器的繁重工作。
Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。

Docker 面向对象
容器 对象
镜像

仓库( Repository ): 是 docker 提供的一个用来保存镜像的仓库。
镜像( Image 镜像就是一个可执行的包 , 用来创建容器 ,docker中每每一个软件就是一个镜像。
容器( Container ): 容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

Docker 架构的工作流程

  • 构建镜像 :使用 Dockerfile 创建镜像。
  • 推送镜像到注册表:将镜像上传到 Docker Hub 或私有注册表中。
  • 拉取镜像 :通过 docker pull 从注册表中拉取镜像。
  • 运行容器:使用镜像创建并启动容器。
  • 管理容器:使用 Docker 客户端命令管理正在运行的容器(例如查看日志、停止容器、查看资源使用情况等)。
  • 网络与存储:容器之间通过 Docker 网络连接,数据通过 Docker 卷或绑定挂载进行持久化。

三、Docker安装

笔者这里使用VMware创建虚拟机(CentOS 8)安装Docker,同时使用FinalShell工具通过SSH连接。

1.更新yum源

CentOS8已经停止维护,可能会出现错误,只要更换/etc/yum.repos.d目录下的源为可用源

2.安装yum-utils,配置镜像源

bash 复制代码
yum install  -y  yum-utils

3.设置更新镜像源

bash 复制代码
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4.安装

bash 复制代码
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

5.检查版本

bash 复制代码
docker -v

如图即为安装成功

6.常用启动命令

启动命令

bash 复制代码
systemctl start docker

关闭命令

bash 复制代码
systemctl stop docker

设置开机自动启动

bash 复制代码
systemctl enable docker

7.配置镜像

在etc目录下创建docker目录

bash 复制代码
mkdir -p /etc/docker

进入该目录创建daemon.json配置

bash 复制代码
touch daemon.json

修改文件

bash 复制代码
vim daemon.json
bash 复制代码
{
	"registry-mirrors": [ 
		"https://mirror.aliyuncs.com", 
		"https://mirror.ccs.tencentyun.com", 
		"https://mirror.baidubce.com", 
		"https://docker.mirrors.ustc.edu.cn",
	    "https://docker.nju.edu.cn", 
		"https://docker.m.daocloud.io",
		"https://6ddblrw4.mirror.aliyuncs.com",
		"https://<cloudflare-accelerator-url>"
	]
}

这是一些镜像

Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:

当配置某一个加速器地址之后,若发现拉取不到镜像,请切换到另一个加速器地址。国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务。

8.重载配置启动

重载配置

bash 复制代码
systemctl daemon-reload

重启

bash 复制代码
systemctl restart docker

四、Docker服务命令

1.镜像命令

bash 复制代码
镜像列表
   docker images  
删除本地镜像
   docker rmi 镜像名/镜像id
从docker仓库拉取镜像到本地仓库
   docker pull
从dockerfile构建镜像
   docker build
保存镜像到本地,生成tar文件
	docker save 
载入本地镜像
	docker load
推送镜像到服务器 
	docker push

2.容器命令

bash 复制代码
1.查看所有容器
docker ps -a
2.停止容器
 docker stop 容器名/容器id
3.删除容器
docker rm 容器名/容器id
4. 启动容器
 docker start 容器名/容器id
5.创建一个新的容器并运行
docker  run 镜像名/镜像id

镜像和容器

镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。

容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。

五、Docker安装服务

安装mysql

1.下载镜像

bash 复制代码
docker pull 镜像名:版本号
docker pull mysql:8.0.33

2.安装

bash 复制代码
docker run -d -p 3306:3306 \
--name mysql \
--restart=always \
--privileged=true \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=root \
mysql:8.0.33

--name:指定容器名称

--restart=always 自动启动

--privileged=true 拥有特权

-p:指定端口映射

-d:让容器后台运行

3.进入容器

bash 复制代码
docker  exec  -it   容器名/容器id  bash

4.登录mysql

bash 复制代码
mysql  -uroot  -proot

5.修改root账号加密方式

bash 复制代码
ALTER USER  'root'@'%'  IDENTIFIED WITH mysql_native_password BY  'root';

这一步开始,就可以从可视化数据库客户端登录访问了

IP为虚拟IP地址

6.退出

bash 复制代码
exit

安装Nginx

1.下载镜像

bash 复制代码
不指定版本号默认最新
docker pull nginx:1.24

2.安装

bash 复制代码
  docker run -d -p 80:80 \
  --name nginx \
  --restart=always \
  --privileged=true \
  nginx:1.24

3.访问

虚拟IP:80

进入容器内部,容器内部部署项目的目录为 /usr/share/nginx/html

bash 复制代码
docker exec -it  nginx  bash
bash 复制代码
cd /usr/share/nginx/html

此时又有新的问题,如果我们想将自己的前端项目部署到容器中,

或者修改容器内的文件会很不方便.

这时需要在外部配置一个数据卷挂载文件.

数据卷挂载

数据卷,即一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。

它将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器产生的数据。

在执行docker run命令时,使用-v数据卷:容器内目录可以完成数据卷挂载。

创建数据卷

bash 复制代码
mkdir -p /opt/nginx/html

安装

bash 复制代码
  docker run -d -p 80:80 \
  --name nginx \
  --restart=always \
  --privileged=true \
  -v /opt/nginx/html:/usr/share/nginx/html \
  nginx:1.24

其中 -v /opt/nginx/html 就是与容器中对应的一个在宿主机中的数据卷

我们只需要将文件部署到宿主机的/opt/nginx/html目录下即可

安装Tomcat/Redis

参考菜鸟教程,包学包会。

Docker安装Tomcat

Docker安装Redis

菜鸟教程

六、自定义镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改,使用 Dockerfile 指令来创建一个新的镜像

我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

指令 说明 示例
FROM 指定基础镜像 java:8
ADD 拷贝本地文件到镜像的指定目录 /demo.jar demo.jar
EXPOSE 指定容器运行时监听的端口,是给镜像使用者看的 EXPOSE 8080
ENTRYPOINT /CMD 镜像中应用的启动命令,容器运行时调用 ENTRYPOINT java -jar xx.jar

示例

1.将我们的springboot项目打包news.jar

  1. 在linux中创建一个文件夹用来存放Dockerfile和jar包
bash 复制代码
 mkdir /opt/news

3.将springboot打包后的jar文件上传到news目录中

4.创建一个名为Dockerfile的文件

bash 复制代码
FROM openjdk:8-jre
ADD  /news.jar  news.jar
EXPOSE 8088
CMD java -jar news.jar

5.使用命令将dockerfile中配置的内容生成一个镜像

bash 复制代码
docker build  -t  news .

6.运行自定义镜像

bash 复制代码
docker run -d -p 8088:8088 \
--name news8088 \
--restart=always \
news

7.访问

IP:8088

8.将自定义镜像下载到本地

进入要保存的目录,输入以下命令

bash 复制代码
docker save news > news.tar

9.载入本地镜像

bash 复制代码
docker load < news.tar

相关参考链接

1.菜鸟教程:Docker 教程 | 菜鸟教程 (runoob.com)

2.Docker官网:https://www.docker.com

3.csdn大神解读:Docker入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

相关推荐
SelectDB16 小时前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
曲幽1 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220703 天前
如何搭建本地yum源(上)
运维
武子康3 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树886 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠6 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质6 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工6 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn866 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker