Docker容器的简单使用


什么是Docker

  1. Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像

  1. Docker应用运行在容器中,使用沙箱机制,相互隔离

  1. Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行。

Docker的主要用途,目前有三大类:

  1. 提供一次性的环境,比如:本地测试他人的软件,持续继承的时候提供单元测试和构建的环境。

  1. 提供弹性的云服务。因为Docker容器可以随开随关,很适合动态扩容和缩容。

  1. 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

Docker的组成

Docker包括三个基本概念

  • 镜像(image)

  • 容器(Container)

  • 仓库(Repository)

镜像

  • Docker把应用程序及其依赖,打包在image文件里。只有通过这个文件,才能生成Docker容器。

  • image文件可以看做是容器的模板,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷,环境变量,用户等。)

  • Docker根据image文件生成容器的实例。同一个image文件,可以生成多个同时运行的容器实例。

  • 镜像不包含任何动态数据,其内容在构建之后也不会被改变。

容器

  • 镜像和容器的关系就像面向对象中的类和实例一样。镜像是静态的定义。容器是镜像运行时的实体。

  • 简单来说,容器就是独立运行的一个或者一组应用,以及他们的运行态环境,容器可以被创建,启动,停止,删除,暂停等。

  • 容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间,因此容器可以拥有自己的root文件系统,自己的网络配置,自己的进程空间,甚至自己的用户Id空间。

  • 容器内的进程是运行在一个隔离的环境里。使用起来就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

仓库

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

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

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

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

版本

  • Docker分为CE和EE两大版本。CE即社区版(免费,支持周期7个月),EE即企业版,强调安全,付费使用,支持周期24个月。

  • Docker CE支持64位版本CentOS 7,并且要求内核版本不低于3.10,CentOS 7满足最低内核的要求。


卸载版本的Docker

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

安装yum工具

yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2 --skip-broken

更新yum本地软件源

yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast

安装Docker

yum install -y docker-ce

Docker使用中会涉及到各种端口,为了方便使用最好关闭防火墙

systemctl stop firewalld #关闭
systemctl disable firewalld #禁止开机启动防火墙  

查看docker版本

docker -v

配置Docker国内镜像加速(可选)

启动Docker

systemctl start docker # 启动docker服务
systemctl stop docker #停止 docker服务
systemctl restart docker # 重启docker服务           

镜像操作实例:

  • 拉取镜像:docker pull redis:5.0.14

  • 查看本地镜像:docker images

  • 将镜像导出到磁盘:docker save -o 文件名称 镜像名称/ID

  • 删除本地镜像:docker rmi 镜像名称/ID

  • 导入镜像:docker load -i 文件名称


Docker-容器

常用操作命令

  • docker run —- 新建并启动容器

  • docker start/stop/pause/unpause —- 启动/停止/暂停/恢复容器

  • docker exec —- 进入容器执行命令

  • docker logs —- 查看容器运行日志

  • docker ps —- 查看容器的状态 docker ps -a 查看所有容器

  • docker rm —- 删除指定容器

!!Nginx容器实例!!

1.拉取Nginx镜像 docker pull nginx

2.创建并启动容器 docker run --name myNginx -d -p 80:80 nginx

tip:

--name :指定容器名称

-p:将宿主机端口与容器端口映射,格式:宿主机端口:容器端口

-d:后台运行容器

!!Redis容器实例

拉取Redis镜像--->docker pull redis

创建并启动容器 docker run --name myredis -d -p 6379:6379 redis

进入容器:docker exec -it myredis bash

-it:给当前进入的容器创建一个标准输入,输出终端。允许我们与容器交互

bash:进入容器后执行的命令

进入容器后执行:redis-cli,使用redis客户端操作redis。


前戏:

一个容器运行了一段时间肯定会产生一些数据,比如:日志,数据库数据,新改的配置文件等等,如果这些数据文件存在容器中,当我们删除容器时,这些数据也会随之删除。那么怎么解决这个问题呢?

---在docker中,提供了一种存储数据的方法,叫做“数据卷”,可以达到数据共享的目的。

我们可以把“数据卷”Data Volumes理解成“宿主机中的目录”,当把某个卷和容器中的某个目录建立映射关系后。就相当于把宿主机中的某个目录和容器的某个目录建立了映射关系。

数据卷的基本概念

  • 数据卷可以在容器之间共享和复用。容器间传递数据将变得高效与方便。

  • 对数据卷内数据的修改会立马生效。无论是容器内操作还是本地操作。

  • 对数据卷的更新不会影响镜像,解耦开应用和数据。

  • 卷会一直存在,直到没有容器使用,可以安全地卸载它。

数据卷操作命令

数据卷操作的基本语法为:docker volume [command],其中command可选值:

  • create:创建一个volume;

  • inspect:显示一个或者多个volume的信息

  • ls:列出所有的volume

  • prune:删除未使用的volume

  • rm:删除一个或者多个指定的volume

数据卷操作实例

  • 创建数据卷:docker volume create testA;

  • 查看数据卷:docker volume

  • 查看对应卷的详细信息:docker volume inspect testA

  • 在Linux的docker主机中创建一个卷时,其在宿主机对应的目录(挂载点)路径为/var/lib/docker/volume/卷名/_data

挂载卷

在创建容器时,可以通过--volume或者-v 参数挂载一个数据卷到某个容器目录

docker run --name testAcon -v testA:/data -d redis

上述命令表示创建一个名为testAcon的容器,将testA卷映射到testAcon容器的/data目录中。

注意:如果卷映射的目录在容器中不存在时,会自动在容器中创建对应的目录

一个容器可以使用多个卷,只需要多次使用-v 选项指定即可

docker run --name testBcon -v testA:/data -v testB:/var/log -d redis

当指定的卷不存在时,docker会自动创建对应的卷,上述命令中的testB数据卷会被自动创建

绑定挂载

前面创建的数据卷都存在"/var/lib/docker/volumes"目录中,这个目录是固定的,它们都能被docker volume命令管理。

docker还有一种映射宿主机目录的方法,这种方法被称之为“绑定挂载”,绑定挂载能够将指定的宿主机目录挂载到容器中,只需要将卷名替换成宿主机上的目录路径即可。

docker run -d --name testAcon -v /root/test1:/data1 redis

上述命令将宿主机的/root/test1目录映射到容器的/data1目录中

绑定挂载不会生成任何卷,它直接将指定的宿主机目录映射到容器中,所以,docker volume 命令无法查看或管理到绑定挂载的路径。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值