Docker和DevOps:2.Docker的基础使用:镜像、容器

227 阅读4分钟

Docker的基础使用:镜像、容器

一、Docker的架构

1.Docker平台
  • Docker提供了一个开发、打包、运行Application(应用)的平台。
  • Docker把应用和底层物理资源隔离开来
    ** 其中Docker Engine是Docker中非常重要的一个部件**
    在这里插入图片描述
2.Docker Engine
  • Docker是一个C/S架构,有server和client。
  • Docker Engine包含:一个后台进程(dockerd)、REST API Server(负责server和client通信)、CLI接口(docker)
3.Docker架构

在这里插入图片描述


二、Docker Image(镜像)

1.什么是Image?
  • 文件和meta data的集合
  • Image是分层的,并且每一层都可以添加改变删除文件(软件),成为一个新的image
  • 不同的image可以共享相同的layer
  • Image本身是read-only的
    在这里插入图片描述
2.获取镜像
(1)Dockerfile

Docker提供了一种文件格式Dockerfile,通过这种格式的文件我们就可以定义一个Docker镜像,通过这个文件,我们就可以构建(build)出一个镜像。

一个简单的Dockerfile示例:

FROM ubuntu:14.04			-- 指定Base Image
LABEL maintainer="hellozhaoxudong@163.com"		-- 标识
RUN apt-get update && apt-get install -y redis-server		-- 在Base Image之上运行apt-get update和apt-get install redis-server两条命令
EXPOSE 6379	-- 暴露端口
ENTRYPOINT ["/usr/bin/redis-server"]	-- 启动redis-server
(2)从Registry(仓库)拉取

我们可以从远程仓库拉取我们需要的镜像,同时,我们也可以将我们自己的镜像推送到远程仓库上去。

示例:从Docker Hub拉取一个ubuntu 14.04的基础镜像:

执行命令:docker pull ubuntu:14.04

在这里插入图片描述

3.Docker Hub

目前Docker官方维护了一个远程仓库(Docker Hub),上面有一些官方维护的镜像,我们可以从这个仓库拉取所需要的镜像。

4.查看本地镜像
执行命令: docker image ls

在这里插入图片描述
可以看到展示了我们刚刚拉取的ubuntu镜像。
可以看到ubuntu镜像仅仅197MB,和我们自己本机装一个虚拟机的大小差距很大,这是因为镜像是不包含Linux Kernel的,精简了很多核心系统文件,所以体积非常小。


三、通过Dockerfile构建一个Base Image(基础镜像)

1.编写能够打印hello docker的c代码
#include<stdio.h>
int main()
{
    printf("hello docker!\n");
}
2.编译并测试

在这里插入图片描述
在这里插入图片描述

4.创建Dockerfile
FROM scratch  -- 不基于基础镜像
ADD hello_docker.exe /    -- 将我们生成的可执行文件加到镜像的根目录下
cmd ["/hello_docker.exe"]  -- 执行/hello_docker命令
5.构建镜像
docker build -t hello_docker_20200301 .
// -t表示给该镜像起一个标签(tag),.表示在当前目录寻找Dockfile

在这里插入图片描述
查看一下刚刚构建的镜像
在这里插入图片描述

6.运行镜像
docker run hello_docker_20200301

四、Container(容器)

1.什么是Container?
  • Container是通过Image创建的。
  • 在镜像层(Image layer)之上建立一个容器层(Container layer),Container layer是可读可写的,为在镜像之上安装其他软件提供空间。
  • 镜像可以看做面向对象中的类,容器可以看做这个类实例化的一个对象。
  • Image负责Application的存储和分发,Container负责Application的运行。
2.最简单的通过镜像创建容器的方法

通过docker run命令,:后面可以指定TAG,默认是latest,例如本地有多个ubuntu版本镜像时,需要指定一下TAG
在这里插入图片描述
查看容器

docker container ls -a

在这里插入图片描述
但是这个容器创建完后就退出了。

3.交互式创建容器的方法
docker run -it ubuntu:14.04

运行以上命令发现我们进入了ubuntu里面。
在这里插入图片描述
再开一个终端看一下容器情况:
在这里插入图片描述
发现ubuntu:14.04这个镜像创建的容器正在运行

4.退出容器

退出容器:
在这里插入图片描述
退出后再使用docker container ls查询会发现刚刚这个容易已经停止了。


五、关于镜像和容器的其他命令

1.关于容器的其他命令
  • 删除容器:
docker container rm 容器ID

在这里插入图片描述

2.命令简写:
  • 查看所有的容器
docker container ls -a   =   docker ps -a
  • 删除容器
docker container rm 容器ID   =   docker rm 容器ID
  • 查看所有的镜像
docker image ls   =   docker images
  • 删除镜像
docker image rm 镜像ID   =   docker rmi 镜像ID
3.批量删除容器
  • 删除所有的容器
docker container ls -aq     //加-q参数可只显示第一列,即只显示容器ID
docker container rm ${docker container ls -aq}	//这样就能删除所有的容器
  • 删除所有已退出的容器
docker container ls -f "status=exited" -q     //加-f参数按照接下来的字符串查询; 加-q参数可只显示第一列,即只显示容器ID
docker container rm ${docker container ls -f "status=exited" -q}	//这样就能删除所有已退出的容器