当前位置: 澳门新濠3559 > 操作系统 > 正文

就理解了 Docker 的整个生命周期,看到一个问题

时间:2019-11-09 19:34来源:操作系统
学习 使用 docker 也可能有豆蔻梢头段时间了 可是在幼功去地点有个别东西总是轻巧忘记 # docker commit  --help Usage:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] Create a new image from a container's ch

学习 使用 docker 也可能有豆蔻梢头段时间了 可是在幼功去地点有个别东西总是轻巧忘记

# docker commit  --help

Usage:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:

-a, --author string    Author (e.g., "John Hannibal Smith ")

-c, --change list      Apply Dockerfile instruction to the created image

澳门新濠3559,--help             Print usage

-m, --message string   Commit message

-p, --pause            Pause container during commit (default true)

当大家运转四个容器的时候(假若不使用卷的话卡塔尔,我们做的其他公文修正都会被记录于器皿存款和储蓄层里。

Docker 提供了叁个docker commit命令,能够将容器的存款和储蓄层保存下去成为镜像。

换句话说,就是在原来镜像的根底上,再叠加上容器的存款和储蓄层,并构成新的镜像。

今后大家运转这几个新镜像的时候,就能够全体原有容器最终的文书变化。

将容器保存为镜像:

# docker commit

--author"Michael Gong"

--message"纠正了默认网页"

webserver

nginx:v2

参考:

应用 commit 驾驭镜像构成

https://github.com/yeasy/docker_practice/blob/master/image/commit.md

####################################################################

//
Docker的安装配置及运用详解 - 人生就是一场修行 - 博客频道 - CSDN.NET
http://blog.csdn.net/fgf00/article/details/51893771

基本概念

Docker 满含八个基本概念

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

先理解了那八个概念,就明白了 Docker 的全方位生命周期。

收拾以前看来的文书档案,看见三个题目 怎么将一个器皿导出成为tar,小编本认为是第生龙活虎保存成为镜像 再 save 举行封存

# docker export  --help

Usage:docker export [OPTIONS]CONTAINER

Export a container's filesystem as a tar archive

Options:

--help            Print usage

-o, --output string   Write to a file, instead of STDOUT

澳门新濠3559 1

1、docker安装与开发银行

 

 1 yum install -y epel-release
 2 yum install docker-io # 安装docker
 3 # 配置文件 /etc/sysconfig/docker
 4 
 5 chkconfig docker on  # 加入开机启动
 6 service docker start # 启动docker服务
 7 
 8 # 基本信息查看
 9 docker version # 查看docker的版本号,包括客户端、服务端、依赖的Go等
10 docker info # 查看系统(docker)层面信息,包括管理的images, containers数等
11 docker pull centos 下载
12 docker images [ centos ] 查看
13 docker run -i -t centos /bin/bash

 

搜求资料之后开采 而不是这么的

# docker import  --help

Usage:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

Import the contents from a tarball to create a filesystem image

Options:

-c, --change list      Apply Dockerfile instruction to the created image

--help             Print usage

-m, --message string   Set commit message for imported image

########################################################

Paste_Image.png

2、镜像的拿走与容器的施用

 

 1 # 搜索镜像
 2 docker search <image> # 在docker index中搜索image
 3 # 下载镜像
 4 docker pull <image>  # 从docker registry server 中下拉image
 5 # 查看镜像 
 6     docker images: # 列出images
 7     docker images -a # 列出所有的images(包含历史)
 8     docker rmi  <image ID>: # 删除一个或多个image
 9 
10 # 使用镜像创建容器
11     docker run -i -t sauloal/ubuntu14.04
12     docker run -i -t sauloal/ubuntu14.04 /bin/bash # 创建一个容器,让其中运行
13     bash 应用,退出后容器关闭
14 # 查看容器
15     docker ps :列出当前所有正在运行的container
16     docker ps -l :列出最近一次启动的container
17     docker ps -a :列出所有的container(包含历史,即运行过的container)
18     docker ps -q :列出最近一次运行的container ID
19 # 再次启动容器
20     docker start/stop/restart <container> #:开启/停止/重启container
21     docker start [container_id] #:再次运行某个container (包括历史container)
22     docker attach [container_id] #:连接一个正在运行的container实例(即实例须   
23              为start状态,可以多个窗口同时attach 一个container实例)
24     docker start -i <container> #:启动一个container并进入交互模式(相当于先
25          start,在attach)
26     docker run -i -t <image> /bin/bash #:使用image创建container并进入交互模
27              式, login shell是/bin/bash
28     docker run -i -t -p <host_port:contain_port> #:映射 HOST 端口到容器,方便
29           外部访问容器内服务,host_port 可以省略,省略表示把 container_port 映射到
30           一个动态端口。
31     #注:使用start是启动已经创建过得container,使用run则通过image开启一个新的
32           container。
33 
34 # 删除容器
35     docker rm <container...> #:删除一个或多个container
36     docker rm `docker ps -a -q` #:删除所有的container
37     docker ps -a -q | xargs docker rm #:同上, 删除所有的container

 

3.跻身容器 - nsenter 命令

应用 attach 命令一时候并不方便人民群众。当多少个窗口同不经常候 attach 到同一个容器的时候,全体窗口都会协同显示。当有些窗口因下令窒碍时,别的窗口也无能为力试行操作了。 
nsenter安装 
nsenter 工具在 util-linux 包2.23版本后含有。 要是系统中 util-linux 包未有该命令,能够遵照上边包车型客车不二等秘书技从源码安装。

 

1 cd /usr/src ; wget https://www.kernel.org/pub/linux/utils/util-linux/v2.28/util-linux-2.28.tar.gz
2 
3 ./configure --without-ncurses
4 
5 make nsenter && sudo cp nsenter /usr/local/bin

nsenter使用 
   nsenter 可以采访另八个进度的名字空间。nsenter 要平常职业索要有 root 权限。 
   为了连接到容器,你还亟需找到容器的第一个进程的 PID,能够因此上边包车型地铁一声令下获取。

PID=$(docker inspect --format "{{ .State.Pid }}" <container>)

   通过那些 PID,就可以源源不断到那一个容器:

nsenter --target $PID --mount --uts --ipc --net --pid

   更简便的,提议下载 .bashrc_docker,并将内容放到 .bashrc 中。

wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc

   这些文件中定义了无数方便使用 Docker 的吩咐,比方 docker-pid 能够获取有些容器的 PID;而 
   docker-enter 能够进去容器或直接在容器内施行命令。

echo $(docker-pid <container>)
docker-enter <container> ls
docker-enter <container> bash

自个儿画一张命令图

# docker save --help

Usage:docker save [OPTIONS] IMAGE [IMAGE...]

Save one or more images to a tar archive (streamed to STDOUT by default)

Options:

--help            Print usage

-o, --output string   Write to a file, instead of STDOUT

# docker load  --help

Usage:docker load [OPTIONS]

Load an image from a tar archive or STDIN

Options:

--help           Print usage

-i, --input string   Read from tar archive file, instead of STDIN

-q, --quiet          Suppress the load output


3、悠久化容器与镜像

澳门新濠3559 2

# docker load --help

Usage: docker load [OPTIONS]

Load an image from a tar archive or STDIN

Options:

就理解了 Docker 的整个生命周期,看到一个问题 怎么将一个容器导出成为tar。--help          Print usage

-i, --input string  Read from tar archive file, instead of STDIN

-q, --quiet          Suppress the load output

##########################################################

从地点可以看出:

docker export 适用于长久化容器,将叁个器皿导出为三个tar包

docker save 适用于长久化镜像,将叁个镜像导出为一个tar包

基本概念
Docker 包涵三个基本概念
镜像(Image)
容器(Container)
仓库(Repository)

3.1 通过容器生成新的镜像

运营中的镜像称为容器。你能够更改容器(举个例子删除三个文件卡塔尔,但这么些改良不会影响到镜像。可是,你接受docker commit 命令能够把三个正值周转的器皿造成三个新的镜像。

    docker commit <container> [repo:tag] # 将叁个container固化为五个新的image,前面包车型大巴repo:tag可选。

那边运用centos_latest.tar

二种办法的不同

对此docker save方法,会保留该镜像的具备历史记录

导出为tar:

# docker save   image_name:tag> /path/to/xxx.tar

导出带tag,那么被带入照旧带tag

#docker save   image_id>         /path/to/xxx.tar

导出不带tag,那么被导入tag为none

导入tar:

# docker   load   -i  /path/to/xxx.tar

#docker  load  <  /path/to/xxx.tar

对于doocker export 方法,不会保留历史记录,未有commit历史

导出为tar:

# docker export container_name  >  /path/xxx.tar

# docker export container_id         > /path/xxx.tar

导入tar:

#cat    /home/export.tar |  dockerimport-new_image_name:tag

参考:

http://blog.csdn.net/nivana999/article/details/40429237

https://docs.docker.com/reference/

https://www.gitbook.com/book/yeasy/docker_practice/details

SealYun - 创世容器

http://lameleg.com/article-list.html

Docker 从入门到实行

https://github.com/yeasy/docker_practice/blob/master/SUMMARY.md

Dockerfie 官方文书档案:

https://docs.docker.com/engine/reference/builder

Dockerfile 最棒试行文书档案:

https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices

先明了了那多少个概念,就精晓了 Docker 的漫天生命周期。
1、docker安装与开发银行
yum install -y epel-releaseyum install docker-io # 安装docker# 配置文件 /etc/sysconfig/dockerchkconfig docker on # 参与开机运行service docker start # 启动docker服务# 基本音讯查阅docker version # 查看docker的本子号,包涵顾客端、服务端、正视的Go等docker info # 查看系统(docker)层面新闻,包蕴管制的images, containers数等docker pull centos 下载docker images [ centos ] 查看docker run -i -t centos /bin/bash
1
2
3
4
5
6
7
8
9
10
11
12
13

3.2 悠久化容器

export命令用于长久化容器

    docker export <CONTAINER ID> > /tmp/export.tar

 

tar > images

docker load -i centos_latest.tar   
docker tag pid centos:latest

干什么是load?

因为当镜疑似save保存tar包就动用load引出

为何使用tag?

因为load导入的镜疑似从未称谓的,供给动用tag加标签 本事够运用

1
2
3
4
5
6
7
8
9
10
11
12
13

3.3 持久化镜像

Save命令用于持久化镜像

        docker save 镜像ID > /tmp/save.tar

 

3.4 导入悠久化container

删除container 2161509ff65e

        docker rm 2161509ff65e

导入export.tar文件

cat /tmp/export.tar | docker import - export:latest

images > container

docker run -dit centos:latest /bin/bash   //示例启动代码

那边容器就在运维了 docker ps,就可以见到

2、镜像的收获与容器的应用

3.5 导入持久化image

删除image daa11948e23d

docker rmi daa11948e23d

导入save.tar文件

docker load < /tmp/save.tar

对image打tag

docker tag daa11948e23d load:tag

container > images

docker commit pid new_centos:latest /bin/bash

生成镜像有二种办法 Dockerfile 以致commit

关于这两种方法有哪些分化 下一次再写吧

寻找镜像docker search <image> # 在docker index中搜索image# 下载镜像docker pull <image> # 从docker registry server 中下拉image# 查看镜像 docker images: # 列出images docker images -a # 列出富有的images(满含历史卡塔 尔(阿拉伯语:قطر‎ docker rmi <image ID>: # 删除多个或两个image

1
2
3
4
5
6
7
8

1
2
3
4
5
6
7
8

3.6 export-import与save-load的区别

导出后再导入(export-import)的镜像会舍弃全体的历史,而保留后再加载(save-load卡塔尔的镜像未有遗失历史和层(layer)。那意味使用导出后再导入的措施,你将不可能回滚到后面包车型客车层(layer),同期,使用保留后再加载的不二等秘书诀长久化整个镜像,就足以成功层回滚。(能够实行docker tag 来回滚从前的层卡塔尔国。

images> tar

docker save new_centos:latest > new_centos.tar

必然要加 > 不然会报错

利用镜像创造容器docker run -i -t sauloal/ubuntu14.04docker run -i -t sauloal/ubuntu14.04 /bin/bash # 创设一个器皿,让内部运维 bash 应用,退出后容器关闭docker run -itd --name centos_aways --restart=always centos #开创叁个称谓centos_aways的容器,自动重启# --restart参数:always始终重启;on-failure退出状态非0时重启;默感觉,no不重启# 查看容器 docker ps :列出当前享有正在运转的container docker ps -l :列出近日叁次开发银行的container docker ps -a :列出全部的container(包含历史,即运营过的container卡塔尔国 docker ps -q :列出近期叁遍运维的container ID# 再度启航容器 docker start/stop/restart <container> #:开启/停止/重启container docker start [container_id] #:再一次运行有个别container (包罗历史container卡塔 尔(英语:State of Qatar)#跻身正在运转的docker容器 docker exec -it [container_id] /bin/bash docker run -i -t -p <host_port:contain_port> #:映射 HOST 端口到容器,方便外界访谈容器内服务,host_port 可以简轻松单,省略表示把 container_port 映射到三个动态端口。# 删除容器 docker rm <container...> #:删除一个或多少个container docker rm docker ps -a -q #:删除全部的container docker ps -a -q | xargs docker rm #:同上, 删除全数的container

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

docker run 和 docker create 参数基本生龙活虎致,run是创造容器并后台运转,create是只开创容器。 docker run 也正是docker create 和 docker start
run创造容器:docker run -itdcreate创立: docker create -it -t, --tty Allocate a pseudo-TTY -i, --interactive Keep STDIN open even if not attached -d, --detach Run container in background and print container ID #run的参数
1
2
3
4
5

1
2
3
4
5

容器能源节制参数
-m 1024m --memory-swap=1024m # 约束内部存款和储蓄器最大应用(bug:超过后经过被杀死卡塔尔--cpuset-cpus="0,1" # 节制容器使用CPU
1
2

1
2

docker容器随系统自启参数
docker run --restart=always redis
1

1

no – 暗中认可值,要是容器挂掉不自动重启
on-failure – 当容器以非 0 码退出时重启容器 同时可肩负一个可选的最大重启次数参数 (e.g. on-failure:5).

always – 不管退出码是不怎么都要重启

docker run -itd --name test01 -p IP:sport:dport -m 1024m --memory-swap=1024m --cpuset-cpus="0,1" --restart=always <image ID> docker exec -it test01 bash # 踏入容器也得以用exec命令
1
2

1
2

查看容器状态音信
[root@localhost ~]# docker stats [root@localhost ~]# docker stats --no-stream
1
2

1
2

跻身容器 - nsenter 命令
nsenter安装 nsenter 工具在 util-Linux 包2.23版本后含有。 倘若系统中 util-linux 包未有该命令,能够依照上边包车型地铁不二诀要从源码安装。
cd /usr/src ; wget https://www.kernel.org/pub/linux/utils/util-linux/v2.28/util-linux-2.28.tar.gz./configure --without-ncursesmake nsenter && sudo cp nsenter /usr/local/bin
1
2
3

1
2
3

nsenter使用 nsenter 能够访谈另一个进程的名字空间。nsenter 要健康办事急需有 root 权限。 为了连接到容器,你还亟需找到容器的首先个进度的 PID,能够通过下边包车型地铁指令获取。
PID=$(docker inspect --format "{{ .State.Pid }}" <container>)
1

1

通过这些 PID,就可以接连到那一个容器:
nsenter --target $PID --mount --uts --ipc --net --pid
1

1

更简约的,提出下载 .bashrc_docker,并将内容放到 .bashrc 中。
wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc
1
2

1
2

其一文件中定义了众多方便使用 Docker 的命令,比方 docker-pid 能够获得有个别容器的 PID;而 docker-enter 能够进入容器或直接在容器内施行命令。
echo $(docker-pid <container>)docker-enter <container> lsdocker-enter <container> bash
1
2
3

1
2
3

3、长久化容器与镜像
3.1 通过容器生成新的镜像
运行中的镜像称为容器。你能够修正容器(例如删除三个文本卡塔 尔(阿拉伯语:قطر‎,但那一个校正不会潜移暗化到镜像。然而,你使用docker commit 命令能够把三个正在运行的器皿形成一个新的镜像。
docker commit <container> [repo:tag] # 将贰个container固化为两个新的image,前面的repo:tag可选。
1

1

3.2 漫长化容器
export命令用于悠久化容器
docker export <CONTAINER ID> > /tmp/export.tar
1

1

3.3 长久化镜像
Save命令用于持久化镜像
docker save 镜像ID > /tmp/save.tar
1

1

3.4 导入长久化Container
删除container 2161509ff65e
docker rm 2161509ff65e
1

1

导入export.tar文件
cat /tmp/export.tar | docker import - export:latest
1

1

3.5 导入长久化image
删除image daa11948e23d
docker rmi daa11948e23d
1

1

导入save.tar文件
docker load < /tmp/save.tar
1

1

对image打tag
docker tag daa11948e23d load:tag
1

1

3.6 export-import与save-load的区别
导出后再导入(export-import)的镜像会舍弃全体的野史,而保留后再加载(save-load卡塔尔国的镜像未有错失历史和层(layer)。那代表使用导出后再导入的主意,你将超小概回滚到事先的层(layer),同期,使用保留后再加载的议程长久化整个镜像,就可以完结层回滚。(能够实践docker tag 来回滚此前的层卡塔尔国。
3.7 一些此外命令
docker logs $CONTAINER_ID #翻看docker实例运维日志,确认保障护健康康运维 docker inspect $CONTAINELAND_ID #docker inspect <image|container> 查看image或container的尾部新闻 docker build <path> 搜索path路线下名称为的Dockerfile的配置文件,使用此安插生成新的image docker build -t repo[:tag] 同上,能够钦赐repo和可选的tag docker build - < <dockerfile> 使用钦赐的dockerfile配置文件,docker以stdin方式获得内容,使用此安插生成新的image docker port <container> <container port> 查看本地哪个端口映射到container的内定端口,其实用docker ps 也得以看来
1
2
3
4
5
6

1
2
3
4
5
6

部分利用技艺
docker文件贮存目录
Docker实际上把具有东西都放置/var/lib/docker路线下了。
[root@localhost docker]# ls -Fcontainers/ devicemapper/ execdriver/ graph/ init/ linkgraph.db repositories-devicemapper volumes/
1
2

1
2

containers目录当然正是存放容器(container卡塔 尔(英语:State of Qatar)了,graph目录存放镜像,文件层(file system layer卡塔尔国存放在graph/imageid/layer路线下,那样我们就足以看看文件层里到底有怎样东西,利用这种层级结构能够理解的看来文件层是哪些豆蔻年华层生机勃勃层叠合起来的。
转发请必须保留此出处:http://blog.csdn.net/fgf00/article/details/51893771
一张图总括 Docker 的命令

澳门新濠3559 3

那边写图片描述

3.7 一些此外命令

1 docker logs $CONTAINER_ID #查看docker实例运行日志,确保正常运行
2     docker inspect $CONTAINER_ID #docker inspect <image|container> 查看image或container的底层信息
3     docker build <path> 寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的image
4     docker build -t repo[:tag] 同上,可以指定repo和可选的tag
5     docker build - < <dockerfile> 使用指定的dockerfile配置文件,docker以stdin方式获取内容,使用此配置生成新的image
6     docker port <container> <container port> 查看本地哪个端口映射到container的指定端口,其实用docker ps 也可以看到

 

container > tar

docker export pid > centos_container.tar

export 将容器直接导出成为tar包

有的运用手艺

tar > images

docker import centos_container.tar centos:latest

docker文件寄存目录

Docker实际上把装有东西都置于/var/lib/docker路线下了。

 1 [root@localhost docker]# ls -F

2 containers/ devicemapper/ execdriver/ graph/ init/ linkgraph.db repositories-devicemapper volumes/ 

containers目录当然正是存放容器(container卡塔 尔(英语:State of Qatar)了,graph目录贮存镜像,文件层(file system layer卡塔 尔(英语:State of Qatar)存放在graph/imageid/layer路线下,那样大家就足以看看文件层里到底有怎么着东西,利用这种层级结构能够驾驭的阅览文件层是怎么一层后生可畏层叠合起来的。

 

 

docker save和docker export的区别

小结一下docker save和docker export的区分:

  1. docker save保存的是镜像(image卡塔尔国,docker export保存的是容器(container卡塔尔国;
  2. docker load用来载入镜像包,docker import用来载入容器包,但双边都会复苏为镜像;
  3. docker load不能够对载入的镜像重命名,而docker import可认为镜像钦点新名称。

一张图总计 Docker 的下令

 

澳门新濠3559 4

 

 

转载请必须保留此出处:

 

 

 

 

 

编辑:操作系统 本文来源:就理解了 Docker 的整个生命周期,看到一个问题

关键词: