Docker 基本介绍与使用
前言
我们这里的文章是用于每日打卡使用,最近 CSDN 云原生社区做活动,参与打卡累计三天即可获得精美礼品。活动地址
一、Docker 介绍
Docker 是一个用于开发、发布和运行应用程序的开放平台。Docker 可以将应用程序与基础架构分离(即 不再过于需要底层支持),以便我们可以快速交付软件。使用 Docker,我们可以像管理应用程序一样管理基础架构。Docker 官方
Docker 优势:
- 灵活: 即使应用过于复杂,我们也可以使用 Docker 来将应用进行容器化。
- 轻量级: 因为 Docker 容器是使用宿主机共享的内核,所以不需要额外的硬件支持。
- 应用隔离: 使用 Docker 运行的容器,可以隔离不同应用程序间的互相影响(即,每个容器都是独立的)
1.Docker 架构
Docker 使用的是 C/S 架构,Docker Client 用于和 Docker 的守护进程通信(守护进程就是 Server),守护进程可以用来构建、运行和分发 Docker 容器等操作。Docker Client 和守护进程可以在同一系统上运行,或者将 Docker Client 远程连接到守护进程。使用
REST API
协议,并通过
UNIX
套接字或网络接口进行通信。另一个 Docker Client 是 Docker Compose(允许我们将一组容器组成的应用程序)
Docker 的架构我们不需要过于关注,因为一般来说 Docker 的 Client 和 Docker 守护进程都是在同一台服务器上运行。
2.Docker 三大核心
这里要说的 Docker 三大核心,分别是
image
镜像,
container
容器,
repository
仓库;这可以说是 Docker 最重要的部分。
1)镜像
Docker 镜像是 Docker 容器运行时的只读模板,镜像可以用来创建 Docker 容器(每一个镜像都由一系列的层组成)
2)容器
Docker 主要就是利用容器来运行应用,一个 Docker 容器内可以说包含了某个应用运行所需要的环境。每一个 Docker 容器都是从镜像创建出来的。可以说容器就是镜像创建的运行实例,它可以被启动,停止,删除等。而且每个容器都是互相隔离的,保证安全的平台。
3)仓库
Docker 仓库主要就是 用来集中保存镜像的地方,当我们创建了自己的镜像后,可以使用
push
命令将它上传到公共仓库(Public)或者私用仓库(Private),这样的好处是,当我们需要在另外的服务器上使用这个镜像时,可以直接从仓库进行拉取(速度相对较快)
二、Docker 安装
准备工作:
主机名操作系统IP 地址软件包DockerCentOS
7.x
192.168.1.4
docker-ce-19.03.12
docker-ce-cli-19.03.12
1.下载 Docker 软件包
1)安装基础包
[root@Docker ~]#yum-yinstallyum-utilsdevice-mapper-persistent-datalvm2
2)配置 Docker 的
yum
源
[root@Docker ~]#wget-O/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repo[root@Docker ~]#yum-config-manager\--add-repo\https://download.docker.com/linux/centos/docker-ce.repo
3)安装 Docker
- 我们可以使用
yum list docker-ce --showduplicates | sort -r
命令来查看 Docker 的所有版本。
[root@Docker ~]#yum-yinstalldocker-ce-19.03.12docker-ce-cli-19.03.12
4)启动 Docker 并验证
[root@Docker ~]#systemctlenabledocker--now#配置开机自启并启动[root@Docker ~]#dockerversion#查看Docker版本
5)配置 Docker 加速器
[root@Docker ~]#cat<<END>/etc/docker/daemon.json{"registry-mirrors":["https://ipbtg5l0.mirror.aliyuncs.com"]}END[root@Docker ~]#systemctldaemon-reload&&systemctlrestartdocker#重启Docker
2.Docker 基础命令介绍
下面我们主要介绍镜像和容器相关的命令,因为仓库相关命令不是很多,也就是
pull
push
等命令。
1)镜像相关命令
1)查看当前 Docker 的所有镜像
//因为我们的Docker是刚安装的.所以没有显示任何镜像[root@Docker ~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZE
- 上面输出结果分别是:镜像名、镜像对应的标签、镜像 ID 号、创建时间、镜像大小。
2)查看 Docker 仓库中的
busybox
镜像
[root@Docker ~]#dockersearchbusyboxNAMEDESCRIPTIONSTARSOFFICIALAUTOMATEDbusyboxBusyboxbaseimage.2447[OK]progrium/busybox70[OK]radial/busyboxplusFull-chain,Internetenabled,busyboxmadef…45[OK]......
- 我们可以使用
search
来搜索 Docker 仓库中的镜像,上面输出结果分别是:镜像名、描述信息、标星、官方镜像、自动构建。
3)拉取
busybox
镜像
[root@Docker ~]#dockerpullbusybox:1.28.4#指定镜像版本号拉取(latest表示最新版)1.28.4:Pullingfromlibrary/busybox#从这个仓库进行拉取07a152489297:Pullcomplete#拉取完成Digest:sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47#这就是镜像的层(也算是个标识符)Status:Downloadednewerimageforbusybox:1.28.4#下载的新镜像名称和版本号docker.io/library/busybox:1.28.4#完整仓库地址
4)给镜像进行打标签(类似于别名操作)
[root@Docker ~]#dockertagbusybox:1.28.4testbusybox:test
tag
命令在有些时候还是蛮关键的,比如说我们要拉取的镜像在国外,但是由于网络原因,导致我们无法进行拉取,此时我们可以在国内的镜像仓库拉取个同样的镜像,然后来使用
tag
命令来进行打标签操作,改成要拉取国外镜像的名称即可。
5)将
busybox
镜像导出
[root@Docker ~]#dockersave-obusybox.tgzbusybox:1.28.4
6)将
busybox
镜像导入
[root@Docker ~]#dockerload-ibusybox.tgz
docker rmi
:通过镜像名进行删除(加上-f
可以实现基于镜像 ID 删除)
2)容器相关命令
1)创建一个容器
[root@Docker ~]#dockercreate-it--namebusyboxbusybox:1.28.4/bin/sh
-i
:表示让容器的输入保持打开;-t
:表示给容器分配一个伪终端(就是我们后面加的/bin/bash
)docker ps -a
:表示查看所有运行的容器(不管容器处于任何状态,都会进行显示)
2)启动一个容器
[root@Docker ~]#dockerstartbusybox[root@Docker ~]#dockerps#查看当前处于运行状态的容器
- 当我们要关闭容器时,可以使用
stop
;重启时,可以使用restart
命令来进行操作。
3)删除容器
[root@Docker ~]#dockerstopbusybox[root@Docker ~]#dockerrmbusybox#我们可以通过容器名或者容器ID来进行删除
4)直接运行容器
[root@Docker ~]#dockerrun-d--namebusyboxbusybox:1.28.4/bin/sh
docker exec -it busybox /bin/sh
命令的作用就是可以使我们进入容器内。
3.使用 Docker 实现 Nginx 网站
[root@Docker ~]#dockerpullnginx:1.18.0[root@Docker ~]#dockerimages[root@Docker ~]#dockerrun-d--namenginx-p1888:80-v/zhangsan:/usr/share/nginx/html/nginx:1.18.0[root@Docker ~]#echo"Hello 河北彭于晏">/zhangsan/index.html[root@Docker ~]#curl127.0.0.1:1888
-p
:指定容器运行时的端口(前面是宿主机端口,后面是容器内端口;-P
这单个字母是用来让容器实现 随机端口映射 的)-v
:指定数据卷,相当于是挂载命令,我们可以将宿主机的目录挂载到容器内(可以增加多个-v
来配置多个数据卷)
好了,本篇文章到这里就要结束了,如在操作期间遇到问题,或要更正博主的文章,可以在评论区进行留言。
版权归原作者 愿许浪尽天涯 所有, 如有侵权,请联系我们删除。