docker学习总结

1.docker安装

1.1 CentOS安装Docker

(1)系统要求

64位版本CentOS7,内核版本不低于3.10

(2)卸载旧版本

         sudo yum remove docker docker-common docker-selinux docker-engine

(3)使用yum安装

         sudo yum install docker-ce

         注意:

         如果是centos7 minimal版本,执行安装提示“没有可用软件包”,这个时候需要安装必要的软件依赖及更新增加docer-ce yum源

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

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

(4)使用脚本安装

curl –fsSL https://get.docker.com –o get-docker.sh

sudo sh get-docker.sh –mirror Aliyun

(5)启动Docker CE

sudo sysemctl enable docker  #设置开机启动

sudo systemctl start docker

(6)建立docker用户组

默认情况下,docker命令会使用Unix socket与Docker引擎通讯。而只有root用户与docker组用户才可以访问Docker引擎与Unix socket

sudo groupadd docker           #建立docker组

sudo usermod –aG docker $USER         #将当前用户加入docker组

(7)测试Docker是否正确安装

docker run hello-world

1.2 CentOS卸载Docker

(1)删除docker安装包

sudo yum remove docker-ce

(2)删除docker镜像

sudo rm –rf /var/lib/docker

1.3 CentOS7配置镜像加速器

(1)对于使用systemd的系统,请在/etc/docker/daemon.json中写入如下内容

{

         “registry-mirrors”:[

                  http://hub-mirror.c.163.com

         ]

}

(2)重启服务生效

sudo systemctl daemon-reload

sudo systemctl restart docker

(3)检查加速器是否生效

docker info

2.docker命令

2.1获取镜像

  1. 从docker镜像仓库获取镜像的命令是docker pull。

Docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名:[:标签]

如果没有给出仓库地址,默认会从官方获取镜像

2.2运行镜像

(1)

docker run –it –rm ubuntu:16.04 bash

(2)

-it:-i:交互式操作,-t:终端

--rm:容器退出后随之将其删除

ubuntu:16.04:用来启动的镜像

bash:希望有个交互式shell,因此用bash

2.3删除本地镜像

(1) docker image rm [选项] <镜像1>[<镜像2>…]

<镜像>可以是镜像短ID、镜像长ID、镜像名或者镜像摘要

  1. 使用docker images ls –q来配合docker image rm,这样可以批量删除希望删除的镜像

docker image rm $(docker images ls –q ubuntu) #删除所有仓库名为Ubuntu的镜像

  1. 或者删除所有在ubuntu:16.04之前的镜像

docker image rm $(docker image ls –q –f before=ubuntu:16.04)

2.3 Docker容器操作

容器是独立的一个或一组应用,以及它们的运行态环境。

2.3.1启动容器

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态的容器重新启动

  1. 新建并启动

docker run

  1. 启动已终止容器

docker container start 或者 docker start

启动一个bash终端,允许用户进行交互

         docker run –t –I ubuntu:16.04 /bin/bash

-t让Docker分配一个伪终端并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。

当利用docker run来创建容器时,docker在后台允许的标准操作包括:

  1. 检查本地是否存在指定的镜像,不存在就从共有仓库下载
  2. 利用镜像创建并启动一个容器
  3. 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  4. 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  5. 从地址池配置一个ip地址给容器
  6. 执行用户指定的应用程序
  7. 执行完毕后容器被终止

2.3.2后台运行

-d参数

只是不把执行命令额结果输出在当前宿主机。

2.3.3进入容器

(1)在使用-d参数时,容器启动会进入后台,使用docker exec命令可以进入到运行中。

(2) exec命令 –i–t参数

docker exec –it 容器ID /bin/bash ,可以进入熟悉的linux命令提示符。

2.3.3导出和导入容器

(1)导出容器

docker export 容器ID > 导出文件名.tar

(2)导入容器

可以使用docker import从容器快照文件中再导入为镜像

cat 导出文件名.tar | docker import – 镜像用户/镜像名:镜像版本

可以使用指定URL或者某个目录来导入

docker import http://study.163.com/image.taz exzmple/imagerepo

2.3.3删除容器

(1)删除容器

docker container rm ubuntu:16.04

如果删除一个运行中的容器,可以添加-f参数。

(2)清理所有处于终止状态的容器

docker container ls –a 可以查看所有已经创建的包括终止状态的容器。

 

docker container prue 清理所有处于终止状态的容器

3.构建私有镜像

镜像的定制实际上就是定制每一层所添加的配置、文件。我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,这个脚本就是Dockerfile。

3.1使用Dockerfile构建私有镜像

Dockerfile是一个文本文件,其中包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

以构建nginx镜像为例

FROM nginx

RUN echo ‘<h1>Hello,Docker!</h1>’ /usr/share/nginx/html/index.html

  1. FROM指定基础镜像

所谓定制镜像,一定是以一个镜像为基础,在其上进行定制。基础镜像是必须指定的,而FROM就是指定基础镜像,因此一个Dockerfile中FROM是必备的指令,并且必须是第一条指令。在Docker Hub上有非常多的高质量的官方镜像,有可以直接拿来使用的服务类镜像,如nginx、redis、mysql等;可以在其中找一个最符合目标的镜像为基础镜像进行定制。

          如果没有找到对应服务的镜像,官方镜像中还踢动了一些更为基础的操作系统镜像,如ubuntu、debian等。

          除此之外,Docker还存在一个特殊的镜像,名为scratch。这个镜像是虚拟额概念,并不实际存在,它表示一个空白的镜像。

FROM scratch

          如果以scratch为基础镜像的话,意味着你不以任何镜像为基础,接下来所写的指令将作为镜像第一层开始存在。

  1. RUN执行命令

RUN指令是用来执行命令行的命令。由于命令行的强大能力,RUN指令在定制镜像时是最常用的指令之一。格式:RUN <命令>

exec格式:RUN[“可执行文件”,” 参数1”,”参数2”]

  1. 构建镜像

docker build –t nginx:v3

3.2 Dockerfile指令详解

3.2.1 COPY复制文件

格式:

  1. COPY<源路径>…<目标路径>
  2. COPY[“<源路径>”,…”<目标路径>”]

3.2.2 ADD更高级的复制文件

ADD指令和COPY的格式性质基本一致。但在COPY基础上增加了一些功能。

比如源路径可以是一个URL。

Docker最佳实践文档中,尽可能使用COPY

3.2.4 CMD容器启动命令

  1. shell格式: CMD<命令>
  2. exec格式:CMD[“可执行文件”,”参数1”,”参数2”…]
  3. 参数列表格式:CMD[“参数1”,”参数2”…]。在指定了ENTRYPOINT指令后,用CMD指定具体的参数。

3.2.5 ENTRYPOINT入口点

ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。ENTRYPOINT在运行时也可以替代,不过比CMD都要略显繁琐,需要通过docker run的参数 –entrypoint来指定。

         当指定ENTRYPOINT后,CMD的含义就发生了改变,不再是直接的运行其命令,而是将CMD的内容作为参数传给ENTRYPOINT指令,换句话说实际执行时,将变为:

<ENTRYPOINT>”<CMD>”

3.2.6 ENV设置环境变量

格式有两种:

  1. ENV <key> <value>
  2. ENV <key1>=<value1> <key2>=<value2>…

例子:

ENV VERSION=1.0 DEBUG=ON NAME=”EMMAYU”

$VERSION #使用环境变量

3.2.7 ARG构建参数

格式:

  1. ARG <参数名>[=<默认值>]

构建参数和EVN的效果一样,都是设置环境变量。所不同的是ARG所设置的构建环境的环境变量,在将来容器运行时是不会存在这些环境变量的。

3.2.8 VOLUME定义匿名卷

格式:

  1. VOLUME [“<路径1>”,”<路径2>”…]
  2. VOLUME <路径>

3.2.9 EXPOSE声明端口

格式为EXPOSE<端口1>[<端口2>…]

EXPOSE指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。

3.2.10 WORKDIR指定工作目录

格式为WORKDIR<工作目录路径>

使用WORKDIR指令可以来指定工作目录,以后各层的当前目录就被改为指定的目录,如果目录不存在,WORKDIR会帮你建立目录。

3.2.11 USER指定当前用户

格式: USER<用户名>

USER指令和WORKDIR相似,都是改变环境状态并影响以后的层。WORKDIR是改变工作目录,USER这是改变之后层的执行RUM,CMD以及ENTRYPOINT这类命令的身份。

3.2.12 HEALTHCHECK健康检查

格式:

HEALTHCHECK[选项]CMD<命令>:设置检查健康检查状况的命令

HEALTHCHECK NONE: 如果基础镜像有健康检查命令,可以屏蔽掉其健康检查指令。

3.2.12 ONBUILD

格式:ONBUILD<其它指令>

在当前镜像构建时并不会被执行。只有以当前镜像为基础镜像,构建下一集镜像的时候才会被执行。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值