Docker 基础入门

Docker 简介安装

Docker 简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 LinuxWindows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker架构图.jpeg

  1. Docker 作用

Docker是基于Go语言实现的开源项目,其作用就是解决运行环境和配置问题的软件容器,方便做持续集成并有整体发布的容器虚拟化。
简单理解Docker的作用就是,统一开发和运维环境,防止开发完交付到运维后,出现环境不统一问题,实际上应该是将程序的运行环境、运行配置、程序代码打包层ISO镜像。

  1. 虚拟机与容器
  • 虚拟机:虚拟机带环境安装的方案,是拥有完整的操作系统,所属重量级,所需内存较大,启动速度慢。
  • 容器:不是对一整个操作系统进行虚拟化,而是对软件程序所必需的运行环境和配置,所属轻量级,所需内存较小,启动速度快(内核级虚拟化技术)。
  1. Docker 三大核心
  • 镜像(image):相当于root系统文件,简单理解就是独立的软件包,其包含当前软件运行的所有内容(环境、代码、配置、库等),其是用于创建Docker容器的模板,类比java中的类模板
  • 容器(container):容器是独立运行的一个或一组应用,是镜像运行时的实体,类比java中new的实例对象
  • 仓库(repository):就是用于存储镜像的仓库。
  • 注意:实际上每个实例容器,都是一个微小的Linux系统;镜像只有读取功能,只有容器有写入功能。

Docker 基础入门-Docker架构图-1.drawio.png
Docker 架构.jpeg

  1. Docker 镜像加载原理
  • 联合文件系统

**联合文件系统(UnionFS)**是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtualfilesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
特征:一次同时加载多个文件系统,但从外面看来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

  • 镜像加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
bootfs(boot file system)主要包含 bootloader 和 Kernel , bootloader 主要是引导加 kernel, Linux刚启动时会加载 bootfs 文件系统,在 Docker 镜像的最底层是 bootfs 。这一层与我们典型的 Linux/Unix系统是一样的,包含 boot 加载器和内核。当 boot 加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs 转交给内核,此时系统也会卸载 bootfs 。

生成新的镜像,是在原来的镜像上进行拓展,因为Docker底层使用联合文件系统,底层是分层处理,拓展功能是在原有的一层加一层。因为其是分层的,倘若有一层相同,不同的镜像会共享该层,此好处就是加强资源共享性和提高复用性。
Docker镜像的基础镜像为bootft,每一层镜像的下一层镜像为父镜像,最顶层是容器层,可读可写,其下的都为镜像层只可读。
Docker 基础入门-Docker 镜像分层.drawio.png

Docker 安装

Linux 版本安装

  1. 安装Docker
#当前时基于CentOS 7 安装Docker的

#安装所需的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2

#设置稳定的仓库-阿里
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#安装Docker运行环境
yum install docker-ce docker-ce-cli containerd.io

#启动Docker
systemctl start docker

#hello-word
docker run hello-world

image.png

  1. 阿里云镜像加速

image.png

  • 容器镜像服务

image.png

  • 配置镜像加速

image.png

  1. 卸载Docker
#删除Docker
yum remove docker-ce

#删除镜像
rm -rf /var/lib/docker

Win11 版本安装

  1. 开启Hyper-V虚拟机
    • 因为我的电脑是Window11家庭中文版,没有Hyper-H,故得重新安装。
    • 注意:在安装Hyper-H可能会重启电脑。
#新建txt文档,将一下复制进入

pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL

#更改后缀名为 .bat ,以管理员运行
  • 如有Hyper-H,设置->应用->可选功能->更多Windows功能->开启Hper-H

image.png

  1. 下载安装包并安装

image.png
image.png

  1. 运行 hello-world

image.png

  1. 阿里云镜像加速
  • 阿里云->容器镜像服务->镜像加速器->windows

image.png


Docker 常用命令

Docker 启动命令

#启动 Docker
systemctl start docker

#停止 Docker
systemctl stop docker

#重启 Docker
systemctl restart docker

#查看 Docker状态
systemctl status docker

#查询 Docker版本
docker version

#开机 Docker启动
systemctl enable docker

#Docker 帮助命令
docker --help

image.png

Docker 镜像命令

#查看本地镜像 
docker iamges

#搜索仓库镜像 TAG 版本号,不声明默认最新版 latest
docker search image_name [:TAG]

#拉取仓库镜像文件 
docker pull image_name

#查看镜像占据空间
docker system df

#删除选择镜像 -f 强制删除
docker rmi image_name

image.png
image.png
image.png

Docker 容器命令

#新建启动容器 -i 交互式运行容器 -t 重新分配伪输入终端 --restart=always Docker启动时,同时启动容器
docker run -it --restart=always image_name bash

#更改容器名称
docker rename oid_name enw_name 

#罗列出docker容器
docker ps 

#进入运行容器
#exec命令启用行的窗口,即启用新的进程,在使用exit命令退出时,不会关闭原有的容器
docker exec -it container_name / container_id /bin/bash
#attach命令不会启用新窗口,使用原有的进程,当使用exit命令退出时,会关闭原有的容器
docker attach -it container_name / container_id /bin/bash

#退出退出容器 
exit [强制退出并关闭容器] or ctrl+q+p[退出容器不关闭容器];

#启动容器
docker start container_name / container_id

#停止容器
docker stop container_name / container_id

#重启容器
docker restart container_name / container_id

#强制停止容器,类似于杀死进程
docker kill container_name / container_id

#删除容器 -f强制删除容器 -先停止容器后删除
docker rm container_name / container_id

#查看容器日志
docker logs container_name / container_id
  
#查看容器内进程信息
docker top container_name / container_id 

#拷贝容器文件到主机- container_Path容器路径 master_Path主机路径
docker cp container_name/_id:container_Path master_Path

#导出容器
docker export container_name / container_id [ > path ]

#导入容器 path可以为文件路径或者url container_name 重新命名 TAG 版本号
docker inport path  container_name[:TAG]

#从容器创建一个新镜像
docker commit [-a '镜像作者' -m '说明文字'] container_name/id 新镜像名[:ATG]

#容器更新
docker container update --restart=always container_name/_id
  • 启动交互式容器 docker run -it image_nam:TAG

    • -i 交互式运行容器
    • -t 重新分配伪终端
    • -p 指定端口映射,-p 主机端口:映射端口
    • –name=‘custom_name’ 为容器指定一个名称
    • 所谓交互容器,就是打开后新窗口命令行交互
  • 启动守护式容器 docker run -d image_name:TAG

    • 守护式容器,打开后没有交互命令窗,直接在后台运行

image.png

Docker 镜像发布

阿里云个人仓库

  1. 登录阿里云->镜像容器服务->创建个人实例

image.png

  1. 仓库管理->创建命名空间

image.png

  1. 创建镜像仓库->并绑定代码源

image.png
image.png

  1. 点击已创建的镜像仓库->根据提示教程进行相关操作

image.png

#登录阿里云Docker Registry
docker login --username=居无何 registry.cn-hangzhou.aliyuncs.com

#从Registry中拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/juwuhe/juwuhe_hub:[镜像版本号]

#将镜像推送到Registry
docker login --username=居无何 registry.cn-hangzhou.aliyuncs.com
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/juwuhe/juwuhe_hub:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/juwuhe/juwuhe_hub:[镜像版本号]

私服镜像仓库搭建

  1. 下载并运行registry
#下载registry
docker pull registry

#运行registry 守护式容器、指定端口、开机运行、指定容器名称
docker run -d -p 5000:5000 --restart=always --name=registry registry

#查看是否已运行
docker ps

#获取私库所有镜像
curl http://localhost:5000/v2/_catalog

#打开浏览器输入 主机IP地址:5000/v2/_catalog -> 出现 {"repositories":[]} 代表成功

image.png
image.png

  1. 拉取推送镜像
#进入配置文件
vim /etc/docker/daemon.json

#docker保存私有仓库的地址
{
  "registry-mirrors": ["https://njrds9qc.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.127.130:5000"]
}

#更改TAG-也就是标记推送版本
docker tag hello-world 192.168.127.130:5000/hello-world

#推送镜像到私有仓库
docker push 192.168.127.130:5000/hello-world:latest

image.png
image.png

Docker 容器数据卷

Docekr容器产生的数据可以通过数据复制cp或者容器备份commit,但当容器删除后,数据丢失。卷就是目录和文件,数据卷就是容器数据持久化,即为了解决容器数据的备份,其完全独立于容器生存空间,数据卷挂载容器,数据卷与容器之间的数据是同步的。数据卷默认挂载目录**/var/lib/docker/volumes**。

  • 数据卷可在容器之间共享或重用数据
  • 数据卷中更改是实时生效的,会直接作用到挂载的容器
  • 数据卷更新不会作用到镜像
  • 数据卷的声明周期一直持续到容器消亡
  1. 容器数据卷使用
#挂载命令 --privileged=true 开放权限
docker run -it --privileged=true -v /宿主绝对目录:/容器目录 container_name/_id

#查看是否挂载成功
docker volume ls
docekr inspect container_name/_id

#删除数据卷挂载
docker volume rm volume_name

image.png
image.png
image.png
image.png

  1. 容器数据卷读写

数据卷有只读(ro read only)和 只写(wo writer only)模式,只读和只写只是对容器而言,在挂载时没有声明时默认是可读可写模式。

#只读模式
docker run -it --privileged=true -v /宿主绝对目录:/容器目录:ro container_name/_id

#只写模式
docker run -it --privileged=true -v /宿主绝对目录:/容器目录:wo container_name/_id
  1. 数据卷映射共享

数据卷的映射和共享就类似于,java中的继承关系通过–volumes-from实现。容器A继承容器B的卷规则,当容器A挂掉时,其之间的关系人存在。

#容器A继承容器B的关系
docker run -d --privileged=true --volumes-from 父容器 子容器

Docker 常用软件

Tomcat 安装

  1. 拉取镜像
#拉取镜像
docker pull tomcat:
  1. 创建容器
#创建容器
docker run -d --name tomcat8 -p 8080:8080 tomcat:8.5.29

image.png
image.png

  1. 访问localhost:8080

image.png

  1. 挂载数据卷

tomcat需要备份的数据即 webapps 、conf 配置文件、log 日志文件。

#启动时同时挂载镜像 
#--privileged=true 开放权限
#--restart=always 开机自启
docker run -d --name tomcat -p 8080:8080 --privileged=true -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps \
-v /usr/local/tomcat/conf:/usr/local/tomcat/conf \
-v /usr/local/tomcat/log:/usr/local/tomcat/log \
tomcat:8.5.29

#查看是否挂载成功
docker inspect container_name/_id

**注意:**若要使用数据卷挂载,在拉取镜像后,可直接进行数据卷挂载,挂载时同时启动容器。

Mysql 安装

  1. 拉取镜像
#拉取容器
docker pull mysql:5.7.37
  1. 创建容器
#创建容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name=mysql mysql:5.7.37

#出现端口被占用的情况 1.卸载原有的mysql 2.更换端口号
docker run -it -d -p 3305:3306 -e MYSQL_ROOT_PASSWORD=root --name=mysql mysql:5.7.37

#连接Mysql
docker exec -it mysql bash

#登录
mysql -u root -p

#查询所有数据库
show databases;

image.png
**注意:**已经在原有的系统上安装了Mysql,在启动容器时可能出现端口被占用的情况。

  1. 挂载数据卷

mysql挂载的就是 conf 配置文件、logs 日志文件、data 数据文件。

#创建文件夹-不创建目录也可,挂载时自动创建
mkdir /usr/local/volumes/mysql/conf /usr/local/volumes/mysql/logs /usr/local/volumes/mysql/data

#--restart=always 开机自启
#挂载数据卷
docker run -d -p 3306:3306 --privileged=true \
-v /usr/local/volumes/mysql/conf:/etc/mysql \
-v /usr/local/volumes/mysql/logs:/var/log/mysql \
-v /usr/local/volumes/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root --privileged=true --name=mysql mysql:5.7.37

image.png

Redis 安装

  1. 拉取镜像
#搜索镜像
docker search redis

#拉取镜像
docker pull redis:latest

image.png

  1. 启动容器
#创建容器
docker run -it -d -p 6379:6379 --name redis redis:latest

#连接容器
docker exec -it redis bash

#进入redis
redis-cli
  1. 挂载数据卷

备份的文件为 配置文件 redis.cnf、日志文件 redis.log 、数据 data。

#创建文件夹
mkdir /usr/local/volumes/redis/conf /usr/local/volumes/redis/logs /usr/local/volumes/redis/data

#创建配置文件
touch /usr/local/volumes/redis/conf/redis.conf

#配置文件;
wget http://download.redis.io/redis-stable/redis.conf

#数据卷挂载
docker run -d -p 6379:6379 --privileged=true \
-v /usr/local/volumes/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /usr/local/volumes/redis/data:/data \
--name redis redis:latest redis-server /etc/redis/redis.conf
#出现错误:WARNING: IPv4 forwarding is disabled. Networking will not work.

#进入配置文件
vi /etc/sysctl.conf

#添加配置内容
net.ipv4.ip_forward=1

#重启服务
systemctl restart network

#出现错误:Error response from daemon: Container 8fdf734354dee2374d65683c4f5af84aae9d5f7b547fe9ae09fc4b2be9003ff8 is restarting, wait until the container is running

#重启容器
docker restart container_name/_id

al/volumes/redis/data:/data
–name redis redis:latest redis-server /etc/redis/redis.conf


```shell
#出现错误:WARNING: IPv4 forwarding is disabled. Networking will not work.

#进入配置文件
vi /etc/sysctl.conf

#添加配置内容
net.ipv4.ip_forward=1

#重启服务
systemctl restart network

#出现错误:Error response from daemon: Container 8fdf734354dee2374d65683c4f5af84aae9d5f7b547fe9ae09fc4b2be9003ff8 is restarting, wait until the container is running

#重启容器
docker restart container_name/_id

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嗨!对于Docker的零基础入门到精通,我可以给你一些指导。首先,让我们从Docker基础开始。 1. 安装Docker:首先,你需要在你的机器上安装Docker。你可以去Docker官方网站上下载适合你操作系统的版本,并按照官方文档中的说明进行安装。 2. Docker镜像和容器Docker使用镜像和容器来管理应用程序和服务。镜像是一个只读的模板,它包含了构建应用程序所需的所有文件和配置。容器是基于镜像创建的运行实例,它可以被启动、停止、删除等操作。 3. Dockerfile:Dockerfile是一个包含了一系列命令的文本文件,用于自动化构建Docker镜像。通过编写Dockerfile,你可以定义构建镜像所需的环境、依赖和配置。 4. Docker命令:学习一些常用的Docker命令是非常重要的。这些命令可以帮助你管理镜像、容器、网络等。一些常用的命令包括:`docker run`(运行容器),`docker build`(构建镜像),`docker stop`(停止容器)等。你可以通过查阅Docker官方文档来了解更多命令的详细用法。 5. Docker Compose:Docker Compose是一个用于定义和管理多个Docker容器的工具。它使用YAML文件来配置应用程序的服务、网络、卷等。通过使用Docker Compose,你可以轻松地启动、停止和管理多个容器。 6. Docker网络:Docker提供了不同类型的网络,用于连接和通信容器。你可以使用默认的桥接网络,也可以创建自定义网络。此外,Docker还支持外部网络和容器之间的链接。 7. Docker卷:Docker卷是用于持久化数据的机制。通过使用卷,你可以将容器内的数据存储到宿主机上的特定位置,从而实现数据的持久化和共享。 这些是Docker入门的一些基本概念和工具。一旦你熟悉了这些基础知识,你可以进一步学习Docker的高级特性,如Docker Swarm(用于集群管理)、Docker Registry(用于镜像存储和分发)等。 希望这些信息对你有所帮助!如果你有更具体的问题,我会尽力回答。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值