打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Docker基础知识
userphoto

2023.09.04 黑龙江

关注
全文预计阅读时间: 15分钟
目录
1、什么是Docker
2、Docker的架构
3、Docker基础操作
4、Docker使用实例
什么是Docker
PART 01
1.1
Docker
Docker是dotCloud公司开源的一个基于LXC的高级容器引擎,源码托管在Github上,基于go语言并且遵从Apache2.0协议开源。Docker是一个开源的应用容器引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、 bare metal、OpenStack 集群和其他的基础应用平台。
1.2
Docker运用场景
web应用的自动化打包和发布;
自动化测试和持续集成、发布;
在服务型环境中部署和调整数据库或其他的后台应用;
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境;
......
1.3
Docker和虚拟机VM的区别
Docker
虚拟机
Docker和虚拟机是两种不同的虚拟化技术。虚拟机(Virtual Machine,简称VM)是一种完全模拟硬件的虚拟化技术,它在物理服务器上创建一个完整的操作系统实例,包括操作系统内核和应用程序。每个虚拟机都有自己的内存、处理器、磁盘和网络等资源,它们是相互隔离的,并且可以运行不同的操作系统。虚拟机通常需要较多的资源和启动时间较长。Docker是一种容器化平台,它利用操作系统级虚拟化技术,在物理服务器上创建一个或多个独立的容器。容器与宿主机共享操作系统内核,但是在容器内部可以运行独立的应用程序和文件系统,实现了进程级别的隔离。相比虚拟机,Docker容器更轻量级、启动快速,并且占用更少的资源。总结来说,虚拟机提供了完整的操作系统虚拟化,而Docker提供了应用程序级别的虚拟化。虚拟机更适合运行不同的操作系统和需要完全隔离的应用场景,而Docker更适合部署和管理分布式应用、快速扩展和迁移应用等场景。
Docker的架构
PART 02
2.1
Docker整体架构
Docker是一种开源的容器化平台,它采用了客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。Docker架构分为四个部分:Docker主机、Docker客户端、Docker守护进程和Docker镜像仓库。
Docker主机是运行Docker守护进程的机器。
Docker客户端是用户与Docker进行交互的工具,包括命令行工具和RESTful API。
Docker守护进程是负责管理Docker对象(如镜像、容器)的核心组件,它包括多个子系统,如镜像管理子系统、网络管理子系统、文件系统子系统等,它负责管理Docker对象,如镜像、容器和网络。
Docker镜像仓库是用来保存Docker镜像的地方,用户可以通过Docker Hub或者私有仓库来存储和管理自己的镜像。
2.2
Docker三大组成要素
Docker的三大组成要素是镜像、容器和仓库:镜像:是一个只读的模板,它可以是一个可运行软件(如tomcat、mysql),也可以是一个配置文件(如nginx、redis)等。镜像是由Dockerfile文件生成的,Dockerfile文件包含了构建镜像所需的指令和参数。
容器:是镜像的一个运行实例(和编程的面向对象相似,镜像为类、容器为对象),可以在容器中运行应用程序。每个容器都是相互隔离的,拥有自己的文件系统、网络栈和进程空间。
仓库:用于存放镜像和容器的地方。Docker Hub是一个公共的镜像仓库,用户可以上传自己的镜像或者下载别人公开的镜像。
Docker基础操作
PART 03
3.1
Docker常用命令
# 查看已安装的Docker版本
docker version
# 搜索Docker镜像
docker search <关键词>
# 拉取Docker镜像
docker pull <镜像名称>
# 列出所有本地的Docker镜像
docker images
# 创建一个新的容器
docker create <镜像名称>
# 启动一个容器
docker start <容器ID或名称>
# 停止一个运行中的容器
docker stop <容器ID或名称>
# 重新启动一个容器
docker restart <容器ID或名称>
# 进入容器的命令行终端
docker exec -it <容器ID或名称> /bin/bash
# 列出所有正在运行的容器
docker ps
# 列出所有容器(包括运行中和已停止的)
docker ps -a
# 删除一个容器
docker rm <容器ID或名称>
# 查看容器日志
docker logs <容器ID或名称>
3.2
Docker运行一个镜像流程
3.3
容器使用(ubuntu镜像为例)
获取镜像
docker pull ubuntu
新建容器并启动
docker run [可选参数] image
# 参数可选说明
# --name='name' 容器名字:用来区分容器
# -d 后台方式运行:相当于nohup
# -it 使用交互式运行:进入容器查看内容
# -p 指定容器的端口(四种方式)小写字母p:
#    1、-p ip:主机端口:容器端口
#    2、-p 主机端口:容器端口
#    3、-p 容器端口
#    4、容器端口
# -P 随机指定端口(大写字母P)
案例:
docker run -it ubuntu /bin/bash
# 参数说明:
# -i: 交互式操作
# -t: 终端
# ubuntu: ubuntu镜像
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式Shell,因此用的是/bin/bash
# exit:退出终端
查看所有容器
# 列出当前正在运行的容器
docker ps
# 参数可选说明
# 列出当前正在运行的容器+历史运行过的容器
-a
# 显示最近创建的容器(可以指定显示几条,比如-n=1)
-n=?
# 只显示容器的编号
-q
# 案例:
docker ps -a
启动已暂停的容器
docker start <容器ID>
# 开启暂停容器案例
docker start 27e32be85b0e
停止容器
docker stop <容器ID>
# 停止容器案例
docker stop 27e32be85b0e
重启容器
docker restart <容器ID>
# 重启容器案例
docker restart 27e32be85b0e
进入容器
启动容器时如果使用-d参数,容器启动后会进入后台。此时想要进入容器,可以通过docker attach或者docker exec命令。docker attach <容器ID>
docker exec -it <容器ID>
# 进入容器案例
docker attach 27e32be85b0e
docker exec -it 27e32be85b0e /bin/bash
注:如果使用docker attach命令从这个容器退出,会导致容器的停止。
注:如果使用docker exec命令从这个容器退出,容器不会停止,推荐使用这个命令进入容器。
导出容器
docker export [容器ID] > 导出文件名
# 导出容器快照到本地文件ubuntu.tar案例
docker export 27e32be85b0e > ubuntu.tar
导入容器
cat 本地快照文件 | docker import - 镜像名:tag
# 将快照文件ubuntu.tar导入到镜像test/ubuntu:v1
cat ubuntu.tar | docker import - test/ubuntu:v1
查看容器日志
docker logs
# 参数可选说明
# 显示日志
-tf
# 要显示的日志条数
--tail number
# 案例:
docker logs -tf 5f5c92a0c964
docker logs -tf --tail 5 5f5c92a0c964
查看容器进程信息
docker top <容器ID>
# 查看容器的进程信息
docker top 27e32be85b0e
删除容器
docker rm <容器ID>
# 删除容器(不能删除正在运行的容器)如果要强制删除,如下命令:
docker rm -f <容器id>
# 删除容器案例:
docker rm -f 5f5c92a0c964
3.4
镜像使用
查看镜像列表
docker images
# 各个选项说明:
# REPOSITORY:表示镜像的仓库源
# TAG:镜像的标签
# IMAGE ID:镜像ID
# CREATED:镜像创建时间
# SIZE:镜像大小
获取镜像
docker pull
# 获取ubuntu13.10版本的镜像
docker pull ubuntu:13.10
查找镜像
docker search
# 各个选项说明:
# NAME: 镜像仓库源的名称
# DESCRIPTION: 镜像的描述
# OFFICIAL: 是否 docker 官方发布
# stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
# AUTOMATED: 自动构建。
# 查询镜像案例
docker search ubuntu
删除镜像
docker rmi <镜像名:版本>
# 删除镜像案例:
docker rmi test/ubuntu:v1
创建镜像
当docker 镜像仓库中下载的镜像不能满足需求时,可以通过以下两种方式对镜像进行更改:
1、从已经创建的容器中更新镜像,并且提交这个镜像# 更新镜像之前,需要使用镜像来创建一个容器
docker run -t -i ubuntu:15.10 /bin/bash
# 在运行的容器内进行我们需要的修改
xxx
# 在完成操作后,输入exit命令退出容器
exit
# 通过命令docker commit来提交容器副本
docker commit -m='我的更新' -a='th' ca34bd7196b5 test/ubuntu:v1
# 各个参数说明:
# -m: 提交的描述信息
# -a: 指定镜像作者
# ca34bd7196b5:容器 ID
# test/ubuntu:v2: 指定要创建的目标镜像名
2、使用Dockerfile指令来创建一个新的镜像# 零开始来创建一个新的镜像
docker build
# 1、需要创建一个Dockerfile文件,内容如下
FROM nginx
Run echo '<h1>hello, docker!</h1>' > /usr/share/nginx/html/index.html
# FROM:指定使用哪个镜像源
# RUN:指令告诉docker在镜像内执行命令
# 2、通过docker build命令创建镜像
docker build -t test/nginx .
# 参数说明:
# -t :指定要创建的目标镜像名
# . :Dockerfile文件所在目录,可以指定Dockerfile的绝对路径
Dockerfile文件的指令(详细Dockerfile文件编写还需要单独学习):
Dockerfile指令说明
FROM指定基础镜像,用于后续的指令构建。
MAINTAINER指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令)
LABEL添加镜像的元数据,使用键值对的形式。
RUN在构建过程中在镜像中执行命令。
CMD指定容器创建时的默认命令。(可以被覆盖)
ENTRYPOINT设置容器创建时的主要命令。(不可被覆盖)
EXPOSE声明容器运行时监听的特定网络端口。
ENV在容器内部设置环境变量。
ADD将文件、目录或远程URL复制到镜像中。
COPY将文件或目录复制到镜像中。
VOLUME为容器创建挂载点或声明卷。
WORKDIR设置后续指令的工作目录。
USER指定后续指令的用户上下文。
ARG定义在构建过程中传递给构建器的变量,可使用 'docker build' 命令设置。
ONBUILD当该镜像被用作另一个构建过程的基础时,添加触发器。
STOPSIGNAL设置发送给容器以退出的系统调用信号。
HEALTHCHECK定义周期性检查容器健康状态的命令。
SHELL覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。
设置镜像标签
docker tag <镜像id> 用户名称/镜像源名:新标签
# 镜像添加新标签案例:
docker tag 21e3943d27ac test/nginx:dev
3.5
仓库管理
Docker Hub是全球最大的容器镜像库,有超过100,000个容器镜像。您可以在Docker Hub上找到各种类型的镜像,包括官方镜像、第三方镜像和企业镜像。此外,您还可以使用Docker Hub来管理和共享您的镜像。# 登录远程仓库命令
docker login [OPTIONS] [SERVER]
# [OPTIONS]说明:
# -u:登陆的用户名
# -p:登陆的密码
# [SERVER]为仓库服务器地址,不指定默认为官方仓库Docker Hub
# 推送本地仓库镜像到连接的远程仓库
docker push 本地镜像名
# 退出远程仓库命令
docker logout
Docker使用实例
PART 04
4.1
docker安装nginx
# 1、拉取最新版的Nginx镜像
docker pull nginx:latest
# 2、查看nginx是否拉取成功
docker images
# 3、运行nginx容器
docker run --name nginx-test -p 8080:80 -d nginx
# 参数说明
# --name nginx-test:容器名称。
# -p 8080:80:端口进行映射,将本地8080端口映射到容器内部的80端口。
# -d nginx:设置容器在在后台一直运行
4.2
docker安装mysql
# 1、拉取最新版的Mysql镜像
docker pull mysql:latest
# 2、查看mysql是否拉取成功
docker images
# 3、运行mysql容器
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
# 参数说明
# --name nginx-test:容器名称
# -p 3306:3306:映射容器服务的3306端口到宿主机的3306端口,外部主机可以直接通过宿主机ip:3306 访问到MySQL的服务
# MYSQL_ROOT_PASSWORD=123456:设置MySQL服务root用户的密码
4.3
docker安装Tomcat
# 1、拉取最新版的Tomcat镜像
docker pull tomcat
# 2、查看tomcat是否拉取成功
docker images|grep tomcat
# 3、运行tomcat容器
docker run -d -p 8080:8080 --name tomcat tomcat:latest
# 参数说明
# -p:设置端口映射,宿主机端口:容器端口
# -P(大写):随机分配端口
# -i:前台交互式启动,通常与-t配合使用
# -t:启动容器内的伪终端,通常与-i配合使用
# -d:后台守护式启动
# –name:为容器命名
(docker还有许多深层的知识需要学习,这篇文章只介绍了简单的应用!)
END
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
docker入门,这一篇就够了。
centos安装Docker与使用&&构建业务镜像挂载卷harbor仓库的高可用及网络模式和资源限制介绍
从零开始学习 Docker
Docker 容器技术使用指南 | 周末送资料
teprunner测试平台部署到Linux系统Docker
docker入门实战笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服