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入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

相关推荐
tjsoft37 分钟前
asm汇编字符串操作
linux·运维·汇编
xyd陈宇阳44 分钟前
linux入门三:Linux 编辑器
linux·运维·编辑器
爱的叹息1 小时前
客户端负载均衡与服务器端负载均衡详解
运维·负载均衡
_长银2 小时前
Ubuntu-搭建nifi服务
linux·运维·ubuntu
识途老码2 小时前
k8s通过service标签实现蓝绿发布
云原生·容器·kubernetes
白露与泡影2 小时前
Nginx 是什么?Nginx高并发架构拆解指南
运维·nginx·架构
cxr8283 小时前
主机IP动态变化时如何通过固定host.docker.internal访问本机服务
网络协议·tcp/ip·docker
阳光九叶草LXGZXJ3 小时前
达梦数据库-学习-18-ODBC数据源配置(Linux)
linux·运维·数据库·sql·学习·oracle
运维之美@3 小时前
达梦数据库迁移问题总结
运维·服务器·数据库
码农不屈的一生4 小时前
docker部署elk
运维·elk