首页 > 其他分享 >Docker基础知识

Docker基础知识

时间:2024-02-04 16:56:43浏览次数:43  
标签:容器 tomcat 宿主机 基础知识 镜像 Docker docker

学习Docker

Docker基础知识

1.仓库、镜像、容器 介绍

  • 仓库:是存放镜像的场所,dockerhub是最大的开源仓库,可以通过docker search 查找所需镜像并通过docker pull拉取
  • 镜像:docker 真正的操作对象
  • 容器:docker run 启动镜像会变成容器,容器顶层为一个可操作层,修改不会影响镜像。每个镜像可以启动生成多个容器。

具体操作以及关系如下:

docker file : 构建一个镜像的描述文件

Registry:Registry私有仓库

images:镜像

虚线框部分:容器
image

2.镜像

一般操作系统都会分为内核和用户空间。对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker镜像(Image),就相当于是一个root文件系统。比如官方镜像ubuntu:18.04就包含了完整的一套Ubuntu 18.04最小系统的root文件系统。

Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

3.容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体容器可以被创建、启动、停止、删除、暂停等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学Docker时常常会混淆容器和虚拟机

每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。

4.仓库

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务

一个Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。

以Ubuntu镜像为例,ubuntu是仓库的名字,其内包含有不同的版本标签,如16.04, 18.04。我们可以通过ubuntu:16.04,或者ubuntu:18.04来具体指定所需哪个版本的镜像。如果忽略了标签,比如ubuntu,那将视为ubuntu:latest。

仓库(Repository)是集中存放镜像的地方。服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。

Docker 命令

镜像命令

docker images : 列出本地镜像。

容器命令

docker run :创建一个新的容器并运行一个命令

docker start :启动一个或多个已经被停止的容器

docker stop :停止一个运行中的容器

docker restart :重启容器

docker kill :杀掉一个运行中的容器。

docker kill :杀掉一个运行中的容器。

Docker 安装

官方提供的安装教程:

https://docs.docker.com/engine/install/centos/#install-using-the-repository

CentOS安装要求:

Docker支持以下的CentOS版本:

  • CentOS 7 (64-bit)
  • CentOS 6.5 (64-bit) 或更高的版本

安装

目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高 版本。

1.效验版本

命令:uname -r 校验Linux内核版本(3.10以上版本)

2.移除旧的版本

sudo yum remove docker \
            docker-client \
            docker-client-latest \
            docker-common \
            docker-latest \
            docker-latest-logrotate \
            docker-logrotate \
            docker-selinux \
            docker-engine-selinux \
            docker-engine

3.安装一些必要的系统工具:

安装所需的软件包。 yum-utils 提供了 yum-config-manager 应用,并 device-mapper-persistent-data 和 lvm2 由需要 devicemapper 存储驱动程序。

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

4.添加软件源信息

源1:(官方推荐)

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

**源2:(阿里云源)速度快 ** 用这个

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5.更新 yum 缓存:

sudo yum makecache fast

6.安装 Docker-CE

sudo yum -y install docker-ce

7.启动 Docker 后台服务

sudo systemctl start docker

8.重启 Docker服务

sudo systemctl restart docker

9.安装成功后可通过查看

docker version

10.测试

sudo docker run hello-world

卸载

$ sudo yum remove docker-ce
$ sudo rm -rf /var/lib/docker

配置Docker镜像加速器

鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决

Docker官方加速器(用下面阿里云加速器,不用这个)

https://docs.docker.com/registry/recipes/mirror/#use-case-the-china-registry-mirror

通过命令查看:在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

{
"registry-mirrors":["https://registry.docker-cn.com"]
}

注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动

重启Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

阿里云加速器 (使用这个)

阿⾥云的镜像源有个加速器,可以加速你获取容器的速度。这个加速器地址是每个⼈专属的。 ⽹址:

https://dev.aliyu n.com/

我的网址:容器镜像服务 (aliyun.com)

image

image

重启Docker:

重启配置文件
sudo systemctl daemon-reload
重启docker
sudo systemctl restart docker

检查加速器是否生效

 cat daemon.json  查看配置
 
docker info 检测是否生效

image

出现这个代表配置成功

Docker镜像

镜像是Docker的三大组件之一。 Docker运行容器前需要本地存在对应的镜像,如果本地不存,Docker会从镜像仓库下载。

查找镜像

主要是这种,搜索后直接粘贴命令

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个tomcat的镜像来作为我们的web服务。我们可以通 过 docker search 命令搜索tomcat来寻找适合我们的镜像。

image

docker search tomcat

获取镜像

从 Docker 镜像仓库获取镜像的命令是 docker pull 其命令格式为:

**标签就是版本号,就是服务的版本,例如tomcat如果不指定版本就是laster tomcat9.0 **

docker pull [选项] [Docker Registey 地址[:端口号]/] 镜像名[:标签]

image

我们需要一个tomcat的镜像来作为我们的web服务。通过 docker pull获取镜像

docker pull tomcat:版本号 //不写 :版本号 代表laster版本

Docker 删除本地镜像

用 ID、镜像名、摘要删除镜像 其中,<镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要。

要删除镜像必须确认此镜像⽬前没有被任何容器使⽤

如果要删除本地的镜像,可以使用 docker image rmi / rm 命令

根据镜像id删除 id可以只写开头,只要区别出就行

docker image rmi 镜像ID //常用

根据镜像名称删除

docker image rm [选项] <镜像1> [<镜像2>.....]

Docker其它辅助命令

查看本地镜像的 IMAGE ID(感觉没用,直接docker images)

docker images -q

查看⼀个镜像的制作历程

docker history 镜像名称

Docker 容器

简单的说,容器是独立运行的一个或一组应用,以及它们的运行环境。 对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和运行在上面的 应用

1. 查看容器状态

docker ps //查看运行的容器
docker ps –a //查看所有的容器(包含运行和退出)
docker container ls
docker container ls–a

2 .Docker 启动容器

启动容器有二种方式

一种是基于镜像新建一个容器并启动,一种是将在终止状态( stopped )的容器重新启动

docker run 参数 镜像名称:tag 执⾏的命令 常⽤参数:

image

第一个端口号是对外暴露端口号/宿主机对外暴露端口,第二个是内部端口号

docker run --rm -d --name tomcat1 -p 8080:8080 tomcat

3.查看正在运行的容器

docker ps

4 查看所有容器

docker ps -a

5 停止容器

通过docker ps 找到容器id

docker stop 9be696a0c283

docker container stop tomcat1/

停止所有容器

docker stop $(docker ps -a -q)

6 启动容器

通过docker ps 找到容器id

docker start 容器名/容器 ID

7 重启已关闭容器

docker restart 9be696a0c283//启动容器(根据ID或NAMES)

8 关闭和删除容器

docker rm 容器ID/名称

强制删除

docker rm  -f 容器ID/名称

删除所有容器

docker rm $(docker ps -q)

9 Docker 守护态运行

更多的时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添 加 -d 参数来实现 如果不使用 -d 参数运行容器:将会在当前宿主机运行。

如果使用了 -d 参数运行容器。此时容器会在后台运行并不会把输出的结果 (STDOUT) 打印到宿主机上面(输出结果可 以用 docker logs查看)。

查看控制台结果:
docker logs tomcat1//(ID或Names)

10 Docker 进入容器

某些时候需要进入容器进行操作,使用 docker exec 命令

-i -t 参数 docker exec 后边可以跟多个参数,这里主要说明 -i -t 参数。 只用 -i 参数时,由于没有分配伪终端,界 面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。 当 -i -t 参数一起使用时,则可以看到我 们熟悉的 Linux 命令提示符。

docker exec -it 容器ID(Names)bash

注意默认容器内linux包是最小安装。只拥有最基本的命令

退出容器exit,不会导致容器的停止

exit

因为下载的tomcat是很干净的,被docker删掉了很多东西,所有访问之后是404,而且进入容易内部后,很多linux命令包也不能用了,也被删掉了

11 在宿主机和容器之间交换⽂件

在宿主机和容器之间相互COPY⽂件 cp的⽤法如下

docker cp [OPTIONS] CONTAINER:PATH LOCALPATH //容器中 复制到 宿主机
docker cp [OPTIONS] LOCALPATH|- CONTAINER:PATH //宿主机 复制到 容器中

宿主机复制一个图片到容器中:将png图片复制到了容器指定目录下(这三个命令都可以,第一个可以改名字)
 docker cp /pyb/66.jpg tomcat-8080:/usr/local/tomcat/webapps/ROOT/1.jpg
 docker cp /pyb/66.jpg tomcat-8080:/usr/local/tomcat/webapps/ROOT/
 docker cp /pyb/66.jpg tomcat-8080:/usr/local/tomcat/webapps/ROOT


将容器内的index.jsp 复制出来,修改再复制回去
docker cp tomcat-8080:/usr/local/tomcat/webapps/ROOT/index.html /pyb

Docker 查看日志

docker logs 容器名称/ID

docker logs -f -t --since="2018-12-1" --tail=10 tomcat-8080

--since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志。

-f : 查看实时日志

-t : 查看日志产生 的日期

--tail=10 : 查看最后的10条日志

tomcat-8080: 容器名称

docker system prune 命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)

docker system prune

Docker 数据卷

问题:通过镜像创建一个容器。容器一旦被销毁,则容器内的数据将一并被删除。但有些情况下,通过服务器上传的 图片出会丢失。容器中的数据不是持久化状态的。

特性:

· 数据卷可以在容器之间共享和重用

· 对数据卷的修改会立马生效

· 对数据卷的更新,不会影响镜像

· 数据卷默认会一直存在,即使容器被删除

image

为什么需要数据卷?

这得从 docker 容器的文件系统说起。出于效率等一系列原因,docker 容器的文件系统在宿主机上存在的方式很 复杂,这会带来下面几个问题: · 不能在宿主机上很方便地访问容器中的文件。 · 无法在多个容器之间共享数据。 · 当容器删除时,容器中产生的数据将丢失。

为了解决这些问题,docker 引入了数据卷(volume) 机制。数据卷是存在于一个或多个容器中的特定文件或文件夹,这 个文件或文件夹以独立于 docker 文件系统的形式存在于宿主机中。

数据卷的最大特定是:其生存周期独立于容器的生存周期。

使用数据卷的最佳场景 · 在多个容器之间共享数据,多个容器可以同时以只读或者读写的方式挂载同一个数据卷,从而共享数据卷中的 数据。 · 当宿主机不能保证一定存在某个目录或一些固定路径的文件时,使用数据卷可以规避这种限制带来的问题。 · 当你想把容器中的数据存储在宿主机之外的地方时,比如远程主机上或云存储上。 · 当你需要把容器数据在不同的宿主机之间备份、恢复或迁移时,数据卷是很好的选择。

数据卷应用

#1 创建数据卷
docker volume create 数据卷名称
# 创建数据卷之后,默认会存放到目录: /var/lib/docker/volume/数据卷名称/_data目录下
#2 查看数据卷
docker volume inspect 数据卷名称
#3 查看全部数据卷信息
docker volume ls
#4 删除数据卷
docker volume rm 数据卷名称
#5 应用数据卷

#5.1 当你映射数据卷时,如果数据卷不存在,Docker会帮你自动创建
docker run -v 数据卷名称:容器内路径 镜像ID
#5.2 直接指定一个路径作为数据卷的存储位置
docker run -v 路径:容器内部的路径 镜像ID

简便方式

1.先创建一个目录,当做数据卷(这时候只是一个目录)
2.创建并启动容器时加上 -v 指定数据卷,Docker会帮你自动创建

/docker-doc/web  存放项目路径
/usr/local/tomcat/webapps/web 映射路径

把/docker-doc/web下的文件映射到/usr/local/tomcat/webapps/web下面

docker run -v /docker-doc/web:/usr/local/tomcat/webapps/web -d --name tomcat-8080 -p 8080:8080 tomcat

-v /usr/local/docker/qfnj/:/usr/local/tomcat/webapps/qfnj tomcat -v 数据卷参数。

将宿主机 /usr/local/docker/qfnj/ 文件内的内容信息 挂载在容器 /usr/local/tomcat/webapps/qfnj 目录下

标签:容器,tomcat,宿主机,基础知识,镜像,Docker,docker
From: https://www.cnblogs.com/pyb999/p/18006507

相关文章

  • 手写docker—资源限制(三)
    简介上一节中我们完成了Mydockerrun-it/bin/sh的方式创建并启动容器。本节我们通过cgroups来实现对容器资源的限制。通过增加-mem、-cpu等命令行参数来限制资源,完整命令比如Mydockerrun-it-mem10m-cpu20/bin/sh。核心需要实现以下逻辑:新增-mem、-cpu命令行......
  • 5-Docker实例-nginx application
    1.编写Dockerfile文件,添加如下内容并保存命令:vimDockerfile[root@centos79~]#catDockerfileFROMcentos:centos7MAINTAINERztjENVPATH/usr/local/nginx/sbin:$PATHADDnginx-1.8.0.tar.gz/usr/local/ADDepel-release-latest-7.noarch.rpm/usr/local/RUNrpm-......
  • Docker
    容器化在现在使用非常普遍,对于个人环境搭建和使用是非常方便的,而且对于生产上的部署也日益完善,相信在使用过程中所遇到的问题,能都够在网上获得相应的答案。本人虽然也学习并使用了很长的时间,但是却从未进行完整的整理,没有进行对自己Docker的相关知识的总结和梳理,本篇文章是本人结......
  • Docker启动的容器设置开机自启动
    参考:https://www.cnblogs.com/hengdin/articles/17838930.htmldocker容器如果需要在开机实现自启动可以在启动的时候加以下参数--restart=always例如启动一个MySQL容器需要开机自启则使用以下命令启动容器#dockerrun-d--namemysql-p3306:3306--restart=alwaysalwa......
  • 【Docker】使用Docker部署MySQL
    ✨Docker本文介绍DockerDesktop以及docker命令行的简单使用DockerDesktop安装使用请查阅官方文档GetDocker|DockerDocumentation在Windows上安装DockersDesktop可参考【Docker】DockerDesktopforWindows(WSL2)安装-双份浓缩馥芮白-博客园(cnblogs.com)似乎......
  • Docker安装mysql8
    1.下载mysql8镜像(版本根据自己选择:这里是8.0.20)dockerpullmysql:8.0.20 2.启动镜像dockerrun-p3307:3306--namemysql8-eMYSQL_ROOT_PASSWORD=123456-dmysql:8.0.20 参数注解 检查是否启动成功dockerps 3.配置挂载创建挂载目录(请检查保证创建成......
  • Docker笔记(一)docker 在linux里面的安装
    Docker笔记(一)docker在linux里面的安装为什么使用docker(docker理念)在开发环境,将源码+配置+软件等其他项目运行的所有的东西,都打包,直接都给运维,这样运维就不需要自己搭建项目运行的环境了,因为你已经拿到了开发人员本地的全部的东西,相当于拿到开发人员全部的东西,直接在运维那里就......
  • dremio cluster docker-compose 运行
    dremio社区版,集群安装比较简单,核心就是一个配置(zk,分布式存储),为了方便本地环境的测试我基于docker-compose提供了一个方便部署的环境,可以使用环境配置docker-compose version:"3"services:zk:image:zookeeperports:-2181:21......
  • Spring Boot无需Dockerfile创建Docker镜像三种方法
    SpringBoot无需Dockerfile创建Docker镜像三种方法        随着技术的发展,服务于终端用户请求的应用程序的部署方式也发生了变化。传统上,你需要用一台机器来部署应用程序,然后决定机器的配置,以保证应用程序的运行。容器的引入,即把整个软件堆栈打包成一个单一的实体并进......
  • 2024年2月笔记:Redis7.2.4版本在Mac电脑的Docker里安装Redis集群
    本文环境:Mac电脑,Brew和Docker都已安装好,Redis版本:7.2.4第1步,验证Docker和Brewdocker--version  //查看docker版本,此处忽略安装Docker步骤brew--version   //查看版本号第2步,创建Redis集群网络dockernetworkcreateredis-cluster-net   //创建一个名......