docker 的安装和镜像
一、docker的 安装 :
第一种:
yum -y install docker
systemctl start docker.service
systemctl status docker
第二种:安装包安装
[root@localhost ~]# ls
[root@localhost ~]# tar xzf docker.tar.gz
[root@localhost ~]# cd docker/
[root@localhost docker]# sh docker.sh
[root@localhost ~]# docker --version
ce表示免费版本
[root@localhost ~]# docker ps
安装成功
二、docker镜像
镜像(docker image) --- Docker 运行容器之前需要本地存在镜像,若本能地不存在,那么 Docker 会找默认镜像仓库( Docker Hub 公共注册服务器中的仓科)下载,用户也可以通过配置使用自己的镜像库
(1)下载镜像
#docker pull NAME:TAG
下载某个被打上了某个标签的叫 ×× 名字的镜像
eg:
docker pull ubuntu:latest
若在下载时你未指定标签,默认追加 latest标签,表示库中最新镜像
镜像在下载过程中是分层的,并且在每层前会有各层的 ID号,层(Layer )是 AUFS (联合文件系统)的重要概念,是实现增量保存与更新的基础
实际上面的命令的原型是
#docker pull registry.hub.docker.com/centos:7
即从默认的注册服务器下载指定的镜像当然,以此你也可以用这种格式到其他仓库下载你所需要的镜像了!!!
(2)查看本地镜像相关信息
[root@localhost ~]# docker images
显示结果:
#docker tag docker.io/ubuntu:latest ubuntu:latest
a.源自哪个仓库
b.标签信息 ---用于区分同一个仓库的同名镜像可用 docker tag仓库名:
标签名 新库名:新标签
c. 镜像 ID
d. 创建时间
e. 镜像大小
改名:给对应的镜像新添加了一个名字,使用该名字调用的还是原来的那个镜像
[root@localhost ~]# docker tag ppc64le/busybox:latest aaabusybox:v1
删除起的别名
[root@localhost ~]# docker rmi aaabusybox:v1
(3)搜索库中满足需求的镜像,以此下载符合需求的镜像文件
#docker search 镜像名
显示结果:
a.哪个库
b.绝对路径,库中的带有搜索关键字的镜像
c.描述
d.官方
e.是否自动创建
(4)删除本地镜像
#docker rmi imageID号 # 要删除的镜像对应的imageID号
eg:
docker rmi ubuntu: latest
当有别名镜像时,是同一个ID 号多个名字,删除任一个对互相无伤害,直至删除最后一个,镜像被彻底删除用ID号删除,默认会删除同一个ID的多个镜像,除非该镜像创建的容器存在,那么镜像能够不被删除,所以在删除时正确顺序是先删除使用镜像的容器,再删除镜像
三、docker镜像分层 :
docker镜像的分层结构:支持通过扩展现有镜像,创建新的镜像
可以看到,新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。
分层结构的优势:
共享资源:
有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享,我们将在后面更深入地讨论这个特性。
这时可能就有人会问了:如果多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,比如 /etc 下的文件,这时其他容器的 /etc 是否也会被修改?
答案是不会!
修改会被限制在单个容器内。
这就是我们接下来要学习的容器 Copy-on-Write 特性。
可写的容器层:
当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。
只有容器层是可写的,容器层下面的所有镜像层都是只读的。
镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同路径的文件,比如 /a,上层的 /a 会覆盖下层的 /a,也就是说用户只能访问到上层中的文件 /a。在容器层中,用户看到的是一个叠加之后的文件系统。
添加文件
在容器中创建文件时,新文件被添加到容器层中。
读取文件
在容器中读取某个文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,打开并读入内存。
修改文件
在容器中修改已存在的文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。
删除文件
在容器中删除文件时,Docker 也是从上往下依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。
只有当需要修改时才复制一份数据,这种特性被称作 Copy-on-Write。可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。
这样就解释了我们前面提出的问题:容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享。
四、docker镜像创建
创建镜像的三种方法
(1)基于修改后的容器创建:docker commit 命令
(2)基于本地模板导入
(3)基于 Dockerfile 文件创建
(1)基于修改后的容器创建
[root@localhost ~]# docker run -it mariadb:latest /bin/sh #/bin/sh是环境变量
此时容器较镜像已经发生改变,我们以此生成新镜像
[root@localhost ~]# docker ps -a #查看当前环境已有的容器
[root@localhost ~]# docker commit 5ea060bff8c9 test:latest # CONTAINER ID 新镜像名字
[root@localhost ~]# docker images
查看镜像列表,本地多了一个创建的新镜像
[root@localhost ~]# docker run -it --name jxtest test:latest /bin/sh #新创建的容器名为jxtest
这个新容器有新创建的文件
[root@localhost ~]# docker ps -a
新容器创建成功
删除容器
[root@localhost ~]# docker rm cc01fb82e45e # 要删除容器的CONTAINER ID
将所有容器删除
for id in `docker ps -a | grep Exited | awk '{print $1}'`;do docker rm $id;done
(2)基于模板导出和导入镜像
导出:将镜像保存为本地文件,以cturra/ntp为例
[root@localhost ~]# docker save -o ntp.tar.gz cturra/ntp:latest
[root@localhost ~]# docker rmi c35549b258c5 #删除cturra/ntp
导入 :将压缩包文件导入到本地镜像列表
[root@localhost ~]# docker load -i ntp.tar.gz
镜像导入成功。
(3)基于 Dockerfile 文件创建
dockerfile 是一个文本文件,用来配置 image,记录了镜像构建的所有步骤。Docker 根据 该文件生成二进制的 image 文件。如何可以生成 image 文件?如果你要推广自己的软件,势必要自己制作 image 文件。
[root@localhost ~]# mkdir test
[root@localhost ~]# cd test/
[root@localhost test]# vim dockerfile
FROM test:latest
RUN yum install lrzsz -y
[root@localhost test]# docker build -t test:latest .
build:创建镜像
-t:为镜像指定名字
.:指明 build context 为当前目录,我们也可以通过 -f 参数指定 Dockerfile 的位置
从这步开始就是镜像真正的构建过程。 首先 Docker 将 build context 中的所有文件发送给 Docker daemon。build context 为镜像构建提供所需要的文件或目录。Dockerfile 中的 ADD、COPY 等命令可以将 build context 中的文件添加到镜像。此例中,build context 为当前目录 /root/docker,该目录下的所有文件和子目录都会被发送给 Docker daemon。
所以,使用 build context 就得小心了,不要将多余文件放到 build context,特别不要把 /、/usr 作为 build context,否则构建过程会相当缓慢甚至失败。
[root@localhost ~]# docker history IMAGE ID #镜像的ID
Docker 会缓存已有镜像的镜像层,构建新镜像时,如果某镜像层已经存在,就直接使用,无需重新创建。在前面的 Dockerfile 中添加一点新内容,往镜像中复制一个文件:
五、dockerfile的常用命令
FROM:指定 base 镜像。
MAINTAINER:设置镜像的作者,可以是任意字符串。
COPY:将文件从 build context 复制到镜像。
COPY 支持两种形式:
COPY src dest
COPY ["src", "dest"]
注意:src 只能指定 build context 中的文件或目录。
ADD:与 COPY 类似,从 build context 复制文件到镜像。不同的是,如果 src 是归档文件(tar, zip, tgz, xz 等),文件会被自动解压到 dest。
ENV:设置环境变量,环境变量可被后面的指令使用。例如:ENV MY_VERSION 1.3
RUN apt-get install -y mypackage=$MY_VERSION
EXPOSE:指定容器中的进程会监听某个端口,Docker 可以将该端口暴露出来。我们会在容器网络部分详细讨论。
VOLUME:将文件或目录声明为 volume。
WORKDIR:为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。
RUN:在容器中运行指定的命令,RUN 指令通常用于安装应用和软件包。
CMD:容器启动时运行指定的命令。
Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效。CMD 可以被 docker run 之后的参数替换。
ENTRYPOINT:设置容器启动时运行的命令,可让容器以应用程序或者服务的形式运行。
Dockerfile 中可以有多个 ENTRYPOINT 指令,但只有最后一个生效。CMD 或 docker run 之后的参数会被当做参数传递给 ENTRYPOINT。
六、docker常用命令
(1)创建容器,create命令是创建并不启动容器
#docker creat -it centos:7
(2)查看所有状态的容器
#docker ps -a 查看所有容器
#docker ps 查看所有已经开启的容器
(3)启动停止的容器
#docker start ID
(4)运行一个容器
#docker run -it docker.io/centos:7 /bin/bash
创建并运行一个容器 ,此时你会直接被切换到容器中
#ctrl+d//exit退出,并且容器也退出
#ctrl+p+q退出容器,并且保持容器up的状态
-t 分配一个伪终端
-i 让容器的标准输入持续打开
用/bin/bash环境显示
(5)以后台守护进程(Daemonized)形态运行 用-d参数实现
#docker run -dti docker.io/centos:7
#docker ps -a
(6)终止容器
#docker stop NAME/ID #docker kill NAME/ID
#docker ps -a
(7)重启容器
#docker restart NAME/ID
#docker ps -a
需要注意,非持久后台守护状态的虚拟机,在重启后当你查看时还是关闭状态
(8)删除容器
语法: docker rm 参数 NAME NAME …
#docker -rm -f NAME/ID
-f 强制删除处于运行中的容器
-l 删除链接,保留容器
-v 删除挂载的数据卷
(9)进入容器
docker attach 和 docker exec 两种方式:
docker attach直接进入容器 启动命令的终端,不会启动新的进程
#docker run -d centos /bin/bash -c while true; do sleep 1;echo I_am_docker;done”
#docker attach NAME/ID
docker exec则是在容器中打开新的终端,并且可以启动新的进程
#docker exec -it NAME/ID /bin/bash
(10)导入和导出容器
a. 导出容器:导出一个已经创建的容器到文件,不管容器是否运行
#docker ps -a
假设当前系统中有两个处于运行和停止状态的容器
#docker export ID > *.tar
#ls
b.将容器导入系统成为镜像
#cat *.tar | docker import - 镜像名
(11)查看容器日志
显示容器启动进程的控制台输出
#docker logs -f 容器的CONTAINER ID
(12)暂停容器
#docker pause NAME/ID
(13)取消暂停继续运行容器
#docker unpause NAME/ID
下面是容器的常用操作命令:
docker 的安装和镜像的更多相关文章
- 在Ubuntu18.04的Docker中安装Oracle镜像及简单使用
一.软件环境: 1.OS:Ubuntu 18.04 2.已安装了Docker 二.安装Oracle镜像的过程 1.切换到root账号下,如果是普通账号,下面操作指令前面加sudo 2.搜索oracle ...
- Docker的安装和镜像管理并利用Docker容器实现nginx的负载均衡、动静分离
Docker的安装 一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化 ...
- docker核心概念(镜像、容器、仓库)及基本操作
概要 docker是一种linux容器技术.容器有效的将由单个操作系统挂管理的资源划分到孤立的组中,以便更好的在组之间平衡有冲突的资源使用需求.可简单理解为一种沙盒 .每个容器内运行一个应用,不同的容 ...
- CentOS7安装Docker,运行Nginx镜像、Centos镜像
摘要 总体思路:yum命令直接安装Docker,下载想要的镜像并启动 1.环境,CentOS7 Minimal 64位,Docker必须要64位的系统 2.通过yum命令直接安装,yum instal ...
- Docker详细介绍安装与镜像制作和拉取
一.Docker是什么? 产生背景: 开发和运维之间因为环境不同和导致的矛盾(不同的操作系统.软件环境.应用配置等)DevOps 代码.系统.环境.配置等封装成镜像Image--->运维: 集群 ...
- Docker CE的安装 与镜像加速
Docker CE 的安装与镜像加速 Docker CE是docker的开源版本 CENTOS 安装Docker CE 系统要求: 操作系统需要使用centos7() centos-extras库 必 ...
- Docker学习笔记一 概念、安装、镜像加速
本文地址:https://www.cnblogs.com/veinyin/p/10406378.html Docker 是一个容器,可以想象成一个轻便的虚拟机,但不虚拟硬件和操作系统. 优点:启动快 ...
- docker微服务部署之:四、安装docker、docker中安装mysql和jdk1.8、手动构建镜像、部署项目
docker微服务部署之:三,搭建Zuul微服务项目 1.Centos7安装Docker 详见:Centos7安装Docker 2.Docker中安装jdk1.8 详见:使用Docker构建jdk1. ...
- docker入门——安装(CentOS)、镜像、容器
Docker简介 什么是docker 官方解释: Docker is the company driving the container movement and the only container ...
随机推荐
- codeforces 576C Points on Plane 相邻两点的欧拉距离
题意:给出n个点,要求排序后,相邻两点的欧拉距离之和小于等于2.5e9做法:由于0≤ xi, yi ≤ 1e6,所以可以将x<=1000的点分成一份,1000<x<=2000的点分成 ...
- Linux之more命令
命令解释 more命令类似与cat命令,却比cat命令强大,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作. 命令说明 more [选项] 文件.. 命令选项 -d 显示帮助 ...
- docker及k8s安装consul
一.docker部署consul集群 参考文献:https://www.cnblogs.com/lonelyxmas/p/10880717.html https://blog.csdn.net/qq_ ...
- js中for..of..和迭代器
for..of是ES6中引入的新特性,它主要的作用是:循环一个可迭代的对象. 它可以循环遍历,数组.字符串.Set对象等等 示例一: let str = 'hello' for (item of st ...
- CodeFroces 758C - Unfair Poll
题意: 老师点名,顺序是1 -- n -- 1 排为一个循环,每列为1 -- m的顺序, 问点到最多次数和最少次数的人的次数以及(x,y)被点的次数. 分析: 由于点名有循环,故可先判断出每一个循环每 ...
- Ion-select and ion-option list styling 自定义样式
https://forum.ionicframework.com/t/ion-select-and-ion-option-list-styling/117028
- 浅淡数据仓库(二)星型模式与OLAP多维数据库
在关系数据库管理系统中实现的维度模型称为星型模型模式,因为其结构类似星型结构.在多为数据库环境中实现的维度模型通常称为联机分析处理(OLAP)多维数据库
- vue的通信方式(二)---祖父孙三个级别的之间的隔代通信
在之前的文章中我们提到了vue常用的几种通信方式,如父子,子父,以及兄弟组件之间的通信,可以通过这个传送门了解他们:Vue通信方式(一) 当我们如果遇到祖组件,父组件,孙组件,三个级别嵌套时,我们该怎 ...
- 07.斐波那契数列 Java
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 思路 递归 若n<=2;返回n; 否则,返回Fibonacci ...
- SpringBoot的文件上传&下载
前言:不多BB直接上代码 文件上传 pom依赖添加commons-io <!-- 上传/下载jar https://mvnrepository.com/artifact/commons-io/c ...