Docker基础知识

目录

1、什么是Docker

2、Docker的架构

3、Docker基础操作

4、Docker使用实例

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 ‘

hello, docker!

’ > /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还有许多深层的知识需要学习,这篇文章只介绍了简单的应用!)

  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值