转载-docker相关基础2

Docker

1.    什么是Docker

简单地讲,可以将Docker容器理解为一种轻量级的沙盒,每个容器内运行一个一个应用,不同的容器相互隔离,容器之间也可以通过网络互相通信,容器的创建和停止十分快速,几乎跟创建和终止原生应用一致;另外容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机。很多时候,甚至直接把容器当作应用本身也没有问题

2、为什么使用Docker

一旦需要服务器迁移,往往需要对每个应用都进行重新部署和调试,这些琐碎而无趣的体力活,极大的降低了工作效率。究其根源,是这些应用直接运行在底层操作系统上,无法保证同一份应用在不同的环境中行为的一致。

         而Docker提供了一种更为聪明的方式,通过容器来打包应用,解耦应用和运行平台。意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器是否式同一类型的平台。这无疑将节约大量的宝贵事件,并且降低了部署过程出现的问题的风险。

3.核心概念与安装配置:

扫描二维码关注公众号,回复: 6269853 查看本文章

1.docker的镜像:

Docker的镜像类似于虚拟机的镜像,可以将它理解为一个只读的模版。

镜像是创建Docker容器的基础。

2.Docker容器

容器是从镜像创建的应用运行实例。

3.Docker仓库。

Docker仓库类似于代码仓库。它是Docker集中存放镜像文件的场所。

仓库注册服务器是存放仓库的地方,其上往往存放着很多的仓库,每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签tag来进行区分

4.Docker的镜像

Docker运行容器前需要本地存在对应的镜像,如果镜像没有保存在本地中,Dokcer会常识先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库)

1.     获取镜像

docker pull name:[tag]

docker pull ubuntu:14.04

docker pull ubuntu

2.     查看镜像信息

docker images

3、使用tag命令添加镜像标签

   docker tag ubuntu:latest  myubuntu:lastest

   docker images

4.使用inspect 命令查询详细信息

docker inspect ubuntu:14.04

5.使用history命令查看镜像历史

docker history ubuntu:14.04

列出了ubuntu的各层创建信息

6.搜索镜像

docker search –automated –s 3 nginx

7.删除镜像

docker rmi ubuntu:latest

当镜像创建容器存在时,镜像文件默认是无法被删除的

docker rmi –f ubuntu:latest

强行删除

8.查看本机上所存在的容器

docker ps -a

9.创建镜像

1.基于已有镜像的容器创建

Docker run –it ubuntu:14.04 /bin/bash

Touch test

Exit

Docker commit –m “addded new file ” –a “Docker newbe” a925cb40b3f0 test:01

Docker commit

2基于本地模版导入

下载ubuntu-14.04的模版压缩包,之后使用一下命令导入

Cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import – ubuntu:14.04

10.存入镜像

docker save  -o ubuntu_14.04.tar ubuntu:14.04

导出本地镜像为文件ubuntu_14.04.tar

11.载入镜像

         docker load –input ubuntu_14.04.tar

或者docker load < ubuntu_14.04.tar

12.上传镜像

默认式上传到Docker hub仓库,

用户在网站上注册后可以上传自制的镜像

Docker push name:[tag]

Docker tag test:latest user/test:lastest

Docker push user/test:latest

5.Docker容器

1.创建容器

1.新建容器

Docker create –it ubuntu:latest

Docker create命令创建的容器处于停止状态,可以使用docker start命令启动容器

2、启动容器

Docker start af  af-为容器ID最后两位

3.创建并启动容器

Docker run ubuntu /bin/echo ‘Hello world’

Docker run –it ubuntu:14.04  /bin/bash

Exit退出容器

4后台运行

-d参数来实现

Docker run –d ubuntu /bin/sh –c “while true; do echo hello world; sleep 1; done”

Ce5………………….

Docker logs ce5

查看输出信息

2终止容器

Docker stop ce5  来停止一个运行中的容器

3.     进入容器

对容器的操作

Docker attach 容器名称

Docker attach nostaligic_hypatia

Docker exec 容器id

Docker exec 203df30030

4.删除容器

Docker rm 容器id

但容器必须处于停止状态

必须由docker stop停止容器

如果删除正在运行的容器会报错

5.导出容器

某些时候将容器从一个系统迁移到另一个系统,可以使用Docker的导入和导出功能

Docker export –o test_for_run.tar ce5

Docker export e81 > test_for_stop.tar

-o 表示指定导出的tar文件名

6.导入容器

   Docker import test_for_run.tar – test/ubuntu:v1.0

6.Docker仓库

1.Docker Hub公共镜像市场

2.时速云镜像市场

https://hub.tenxcloud.com/

3.下载镜像

index.tenxcloud.com/namespace/repository

docker pull index.tenxcloud.com/tenxcloud/tomcat

搭建本地私有仓库

Docker run –d –p 5000:5000 registry

默认情况下官方提供的registry镜像

会将仓库创建在容器的/tmp/registry目录下

可以通过-v  参数将镜像文件存在本地的指定路径

Docker run –d –p 5000:5000  -v /opt/data/registry:/tmp/registry registry

 7.Docker数据管理

生产环境中使用Docker的过程中,往往需要对数据进行持久化,或者需要多个容器之间进行数据共享,这必然涉及容器的数据管理操作

容器中管理数据主要的两种方式:

数据卷:容器内数据直接映射到本地主机观景

数据卷容器:使用特定容器维护数据卷

1.数据卷:

1、在容器内创建一个数据卷

Docker run –d –P –name web –v /webapp training/webapp python app.py

-v标记创建数据卷

创建一个数据卷挂载到容器/webapp目录

2、挂载一个主机目录作为数据卷

Docker run –d –P –name web –v /src/webapp:/opt/webapp training/webapp python app.py

主机的/src/webapp目录到容器的/opt/webapp下

2.数据卷容器(专门提供数据卷供其他容器挂载)

1.创建数据卷容器

Docker run –it –v /dbdata –name dbdata ubuntu

2.进入容器

Docker attach dbdata

列表

Ls

通过—volumes-from挂载dbdata容器的数据卷

Docker run –it –volumes-from dbdata –name db1 ubuntu

修改dbdata的数据

Cd /dbdata

   Touch test

   Ls

   Exit

进入db1 查看文件

Docker attach db1

         Ls dbdata

3.利用数据卷容器来迁移数据

1.备份

1.备份

使用下面的命令来备份dbdata数据卷容器内的数据卷:

$ docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata

首先利用ubuntu镜像创建了一个容器worker。使用--volumes-from dbdata参数来让worker容器挂载dbdata容器的数据卷(即dbdata数据卷),使用-v  $(pwd):/backup参数来挂载本地的当前目录到worker容器的/backup目录。worker容器启动后,使用了tar cvf  /backup/backup.tar /dbdata命令来将/dbdata下内容备份为容器内的/backup/backup.tar,即宿主主机当前目录下的backup.tar。

2.恢复

如果要将数据恢复到一个容器,可以按照下面的步骤操作。

首先创建一个带有数据卷的容器dbdata2:

$ docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

然后创建另一个新的容器,挂载dbdata2的容器,并使用untar解压备份文件到所挂载的容器卷中:

$ docker run --volumes-from dbdata2 -v $(pwd):/backup --name worker ubuntu bash

cd /dbdata

tar xvf /backup/backup.tar

8、端口映射与容器关联

1.端口映射实现外部访问

1.从外部访问容器应用

在容器启动的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的

docker run –d –P training/webapp python app.py

   通过-P指定端口映射

   Docker会随机映射一个49000~49900的端口到内部容器开放的网络端口

  docker ps –l

  

访问主机随机映射端口即可访问容器内部也能够用提供的界面

2.     映射所有接口地址

Docker run –d –P 5000:5000 training/webapp python app.py

   绑定多个接口-p

   docker run –d –p 5000:5000 –p 3000:80 training./webapp python app.py

3.映射到指定地址的指定端口

docker run –d –p 127.0.0.1:5000:5000 training/webapp python app.py

4.映射到指定地址的任意端口

docker run –d –p 127.0.0.1::5000  training/webapp python app.py

使用udp标记来指定udp端口

docker run –d –p 127.0.0.1:5000:5000/udp  training/webapp python app.py

5.查看映射端口配置

docker port nostalgic_morse 5000

2.互联网机制实现便捷互访

1.自定义容器命名

   docker run –d –P –name web training/webapp python app.py

2容器互联

使用link参数可以让容器之间安全地进行交互

创建容器

docker run –d –name db training/postgres

删除之前的web

docker rm –f web

 创建一个新的web容器,并将容器建立互联关系:

docker run –d –P –name web –link db:db training/webapp python app.py

--link 格式 –link name:alias

Name连接容器的名字

Aliad别名

docker ps查看那容器连接

db容器的names列有db也有web/db

表示web容器连接到db容器,这允许web容器访问db容器的信息

Docker相当于两个互联的容器之间创建了一个虚拟通道,而且不用映射她们呢的端口到宿主主机上

Docker通过两种方式为容器公开信息

使用env命令来查看web容器的环境变量:

docker run –rm –name web2 –link db:db training/webapp env

Docker还添加host信息到父容器的/etc/hosts文件下面是父容器web的hosts文件

Docker run –t –i –rm –link db:db training/webapp /bin/bash

Cat /etc/hosts

9.使用Dockerfile创建镜像

1.     基本结构

Dockerfile由一行行命令语句组成,并且支持#开头注释行

一般而言,Dockerfile分为四个部门:基础镜像部分,维护者信息,镜像操作指令和容器启动时执行指令。

Node.js dockerfile

FROM ubuntu:trusty-20160819

MAINTAINER [email protected]

 

RUN echo 'APT::Install-Recommends 0;' >> /etc/apt/apt.conf.d/01norecommends \

 && echo 'APT::Install-Suggests 0;' >> /etc/apt/apt.conf.d/01norecommends \

 && apt-get update \

 && DEBIAN_FRONTEND=noninteractive apt-get install -y vim.tiny wget sudo net-tools ca-certificates unzip \

 && rm -rf /var/lib/apt/lists/*

 

RUN  \

  cd /opt && \

  wget http://nodejs.org/dist/v6.5.0/node-v6.5.0-linux-x64.tar.gz && \

  tar -xzf node-v6.5.0-linux-x64.tar.gz && \

  mv node-v6.5.0-linux-x64 node && \

  cd /usr/local/bin && \

  ln -s /opt/node/bin/* . && \

  DEBIAN_FRONTEND=noninteractive npm install -g nodemon --no-optional && \

  sudo ln -s /opt/node/lib/node_modules/nodemon/bin/nodemon.js /usr/bin/nodemon && \

  rm -f /opt/node-v6.5.0-linux-x64.tar.gz

 

WORKDIR   /src

 

CMD ["/bin/bash"]

2.     指令说明:

From:

指定所创建镜像的基础镜像,如果本地不存在,则默认回去Docker Hub下载指定镜像

格式 form <image>

     Form <image>:<tag>

     Form<image>@<digest>

Maintainer

指定维护者信息,格式为maintainer <name>

MAINTAINER [email protected]

Run

运行指定命令

格式:

Run <command>或者Run<”executable”,”param1”,”param2”>

每条Run指令将在当前镜像的基础上执行命令,并提交为新镜像。当命令较长的时,可以使用\换行

Run apt-get update \

    && apt-get install –y libsnappy-dev zlib1g-dev libbz2-dev \

    && rm –rf /var/cache/apt

CMD:

CMD指令用来指定启动容器时默认执行命令

CMD[“executable”,”param1”,”param2”]使用exec执行

LABEL:

用来指定生成镜像的元数据标签信息

LAEBL VERSION=”1.0”

EXPOSE:

声明镜像内服务所监听的端口

格式:

Expose <port>[port….]

Expose 22 80 8443

该指令只是起声明作用,并不会自动完成端口映射

ENV

指定环境变量,在镜像生成过程中会被后续Run指令使用,在镜像启动的容器中也会存在

格式ENV<key><value>或ENV<key>=<value>

ENV PG_MAJOR 9.3

ENV PG_VERSION 9.3.4

RUN curl –SL http://example.com/postgres-$PG_VERSION.tar.xz | tar –xJC /usr/src/postgress && …..

ENV PATH  /usr/local/postgres-$PG_MAJOR/bin:$PATH

ADD:

该命令将复制指定的<src>路径下的内容到容器中<dest>路径下

格式:

ADD<src><dest>

其中src可以式Dockerfile所在目录的一个相对路径,也可以是一个URL,还可以是一个tar文件

Copy

格式copy<src><dest>

ENTRYPOINT

指定镜像的默认入口命令,该入口命令会在启动容器的时候作为根命令执行,所有传入值作为命令的参数

每个Dockerfile只有一个ENTRYPOINT

ENTRYPOINT [“executable”,”param1”,”param2”]

ENTRYPOINT comand param1 param2

VOLUME:

创建一个数据挂载点 VOLUME[“/data”]

USER:

指定运行容器时用户名和UID,后续RUN等命令也会使用指定用户身份

USER daemon

WORKDIR

为后续RUN,CMD和ENTRYPOINT指令配置工作目录

格式

WORKDIR /path/to/workdir

ARG:

指定一些镜像内使用的参数,这些参数在执行docker build命令时才—build-arg<name>=<value>格式传入

Docker build –-build-arg<name>=<value>

.

ONBUILD

配置当所创建的镜像作为为其他镜像的基础镜像时,所需要执行的创建操作指令

..

ONBUILD ADD. /APP/SRC

ONBUILD RUN /usr/local/bin/python-build –dir /app/src

等价于

FROM image-A

ADD ./APP/SRC

RUN /usr/local/bin/python-build –dir /app/src

STOPSIGNAL

指定所创建镜像启动的容器接受退出的信号值。

STOPSIGNAL signal

HEALTHCHECK

配置所启动容器如何进行健康检查

HEALTHCHECK  [options] CMD command:根据所执行命令返回值是否为0来判断

HEALTHCHECK NONE;禁止基础镜像中的健康检查

SHELL

指定其他命令使用shell时的默认shell类型

SHELL[“executable”,”parameters”]

3.创建镜像:

编写完成后Dockerfile之后,可以通过docker build命令来创建镜像

例如:

指定dockerfile所在路径为/tmp/docker_builder/ ,并且希望生成镜像标签为build_repo/first_image可以使用下面的命令

Docker build –t build_repo/first_image /tmp/docker_builder

4.使用.dockerignore文件

可以通过.dockerignore文件(每一行添加一条一条匹配模式)来让Docker忽略匹配模式路径下的目录和文件,例如:

#comment

  */temp*

  */*/temp*

   Tmp?

~*

转载:

https://www.cnblogs.com/sharpest/p/8315791.html

猜你喜欢

转载自www.cnblogs.com/xiaoyou2018/p/10919017.html