欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。

文摘  Docker入门教程:Docker基本使用(一)镜像操作

Docker 本站 1143 0评论

Docker系统有两个程序:Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,管理着所有的容器。Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下,Docker服务端和客户端运行在一台机器上。


1.Docker基础命令


可以通过在终端输入Docker命令来查看所有的参数。

docker基础命令包含docker操作、镜像操作、容器操作以及其他相关操作,以下列举了一些常用的命令,更多请参考官方文档,或者使用–help命令查看。


Docker提供了很多命令来管理镜像、容器和仓库。包括:

· 从Docker Hub仓库中查找search、上传push、下载pull镜像。

· 查看本地已有镜像、容器信息的images、inspect和ps命令。

· 删除本地镜像和容器的rmi和rm命令。

· 基于已有容器创建镜像的commit命令和基于Dockerfile创建镜像build命令。

· 运行、进入容器的run、exec和attach命令。

· 镜像的保存和导入命令save和load,容器的导出导入命令export和import

具体命令的使用方法使用命令docker --help查看所有命令列表,使用docker COMMAND --help查看具体命令的信息


Docker 命令大全


容器生命周期管理:

run     start/stop/restart     kill     rm     pause/unpause     create     exec

容器操作:

ps     inspect     top     attach     events     logs     wait     export     port

容器rootfs命令:

commit     cp     diff

镜像仓库:

login     pull     push     search

本地镜像管理:

images     rmi     tag     build     history   save     import

查看信息和版本:

info     version


1)检查安装 Docker info

显示 Docker 系统信息,包括镜像和容器数。。

如果 Docker 没有安装,会提示command not found,如果 Docker 已经成功安装,则会有类似如下的提示:

$ docker info

Containers: 2

Images: 2

Storage Driver: aufs

 Root Dir: /var/lib/docker/aufs

 Backing Filesystem: extfs

 Dirs: 6

 Dirperm1 Supported: false

Execution Driver: native-0.2

Kernel Version: 3.13.0-24-generic

Operating System: Ubuntu 14.04 LTS

CPUs: 1

Total Memory: 979.6 MiB

Name: ubuntu

ID: PRLX:CY3O:TZ6P:4UAS:VDWM:MHWB:FB3V:TJBJ:GQ4J:Q453:GPOY:WZSI

WARNING: No swap limit support


Docker version :显示 Docker 版本信息。

语法

docker version [OPTIONS]

OPTIONS说明:

-f :指定返回值的模板文件。


实例

显示 Docker 版本信息。

$ docker version

Client:

 Version:      1.8.2

 API version:  1.20

......


2)升级Docker

如果想升级到最新版的Docker,就用 apt-get:

$ apt-get upgrade docker-engine


3)卸载Docker

$ apt-get purge docker-engine

$ apt-get autoremove # 自动删除依赖

$ rm -rf /var/lib/docker


2.Docker镜像操作


当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

下面我们来学习:

1、管理和使用本地 Docker 主机镜像

2、创建镜像


1)列出镜像列表

$ docker images           

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB

php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB

nginx               latest              6f8d099c3adc        12 days ago         182.7 MB

mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB

httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB

ubuntu              15.10               4e3b13c8a266        4 weeks ago         136.3 MB


语法

docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS说明:

-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);

--digests :显示镜像的摘要信息;

-f :显示满足条件的镜像;

--format :指定返回值的模板文件;

--no-trunc :显示完整的镜像信息;

-q :只显示镜像ID。

REPOSITORY:表示镜像的仓库源

TAG:镜像的标签

IMAGE ID:镜像ID

CREATED:镜像创建时间

SIZE:镜像大小


同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

所以,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:

$ docker run -t -i ubuntu:15.10 /bin/bash 

root@d77ccb2e5cca:/#

如果要使用版本为14.04的ubuntu系统镜像来运行容器时,命令如下:

$ docker run -t -i ubuntu:14.04 /bin/bash 

root@39e968165990:/# 


如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。

//查看本地镜像

docker images

//重命名本地镜像

docker tag ubuntu:latest ubuntu:16.04

//获取镜像详细信息,JSON格式

docker inspect 0ef2e08ed3fa

//获取镜像详细信息中某一项信息

docker inspect -f {{".Architecture"}} 0ef2e08ed3fa

docker inspect -f {{".RepoTags"}} 0ef2


2)获取一个新的镜像

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull命令来下载它。

$ docker pull ubuntu:13.10

13.10: Pulling from library/ubuntu

6599cadaf950: Pull complete 

23eda618d451: Pull complete 

Digest: sha256:15b79a6654811c8d992ebacdfbd5152fcf3d165e374e264076aa435214a947a3

Status: Downloaded newer image for ubuntu:13.10


下载完成后,我们可以直接使用这个镜像来运行容器。

$ docker run ubuntu:13.10


docker pull : 从镜像仓库中拉取或者更新指定镜像

语法

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

OPTIONS说明:

-a :拉取所有 tagged 镜像

--disable-content-trust :忽略镜像的校验,默认开启


docker pull NAME[:TAG] 如果不显式地指定TAG,则默认会选择latest标签,即下载仓库中最新版本的镜像。

//获取最新镜像

docker pull ubuntu 

//获取指定标签镜像

docker pull ubuntu:14.04

//获取指定仓库镜像

docker pull registry.hub.docker.com/ubuntu:latest

docker pull dl.dockerpool.com:5000/ubuntu


实例

从Docker Hub下载java最新版镜像。

docker pull java

从Docker Hub下载REPOSITORY为java的所有镜像。

docker pull -a java


3)查找镜像

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

$ docker search httpd


docker search : 从Docker Hub查找镜像

语法

docker search [OPTIONS] TERM

OPTIONS说明:

--automated :只列出 automated build类型的镜像;

--no-trunc :显示完整的镜像描述;

-s :列出收藏数不小于指定值的镜像。


//搜索指定名称镜像

docker search centos

docker search perconal*

//限制搜索结果数量,默认25行

docker search centos --limit 3

//是否截断描述部分输出,默认截断

docker search centos --no-trunc

docker search centos --no-trunc=false

//搜索指定星级以上镜像

docker search mysql -f stars=10


实例

从Docker Hub查找所有镜像名包含java,并且收藏数大于10的镜像

$ docker search -s 10 java

NAME                  DESCRIPTION                           STARS   OFFICIAL   AUTOMATED

java                  Java is a concurrent, class-based...   1037    [OK]       

anapsix/alpine-java   Oracle Java 8 (and 7) with GLIBC ...   115                [OK]

develar/java                                                 46                 [OK]

......

NAME:镜像仓库源的名称

DESCRIPTION:镜像的描述

OFFICIAL:是否docker官方发布


4)创建镜像

当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

1.从已经创建的容器中更新镜像,并且提交这个镜像

2.使用 Dockerfile 指令来创建一个新的镜像


a.更新镜像

更新镜像之前,我们需要使用镜像来创建一个容器。

$ docker run -t -i ubuntu:15.10 /bin/bash

root@e218edb10161:/# 

在运行的容器内使用 apt-get update 命令进行更新。

在完成操作之后,输入 exit命令来退出这个容器。

此时ID为e218edb10161的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器副本。

$ docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2

sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8

说明

-m:提交的描述信息

-a:指定镜像作者

e218edb10161:容器ID

runoob/ubuntu:v2:指定要创建的目标镜像名


docker commit :从容器创建一个新的镜像。

语法

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

OPTIONS说明:

-a :提交的镜像作者;

-c :使用Dockerfile指令来创建镜像;

-m :提交时的说明文字;

-p :在commit时,将容器暂停。


实例

将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。

runoob@runoob:~$ docker commit -a "runoob.com" -m "my apache" a404c6c174a2  mymysql:v1 

sha256:37af1236adef1544e8886be23010b66577647a40bc02c0885a6600b33ee28057

我们可以使用 docker images 命令来查看我们的新镜像mymysql:v1

~$ docker images mymysql:v1

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

mymysql             v1                  37af1236adef        15 seconds ago      329 MB


使用我们的新镜像 mymysql 来启动一个容器

$ docker run -t -i mymysql:v1 /bin/bash                            

root@1a9fbdeb5da3:/#


b.构建镜像

我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

$ cat Dockerfile 

FROM    centos:6.7

MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd

RUN     useradd runoob

RUN     /bin/echo 'runoob:123456' |chpasswd

RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local

EXPOSE  22

EXPOSE  80

CMD     /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

$ docker build -t runoob/centos:6.7 .

Sending build context to Docker daemon 17.92 kB

Step 1 : FROM centos:6.7

 ---> d95b5ca17cc3

Step 2 : MAINTAINER Fisher "fisher@sudops.com"

 ---> Using cache

 ---> 0c92299c6f03

Step 3 : RUN /bin/echo 'root:123456' |chpasswd

 ---> Using cache

 ---> 0397ce2fbd0a

Step 4 : RUN useradd runoob

......

参数说明:

-t :指定要创建的目标镜像名

.  :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

使用docker images 查看创建的镜像已经在列表中存在,镜像ID为860c279d2fec

$ docker images 

REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE

runoob/centos       6.7                 860c279d2fec        About a minute ago   190.6 MB

runoob/ubuntu       v2                  70bf1840fd7c        17 hours ago         158.5 MB

......


我们可以使用新的镜像来创建容器

$ docker run -t -i runoob/centos:6.7  /bin/bash

[root@41c28d18b5fb /]# id runoob

uid=500(runoob) gid=500(runoob) groups=500(runoob)

从上面看到新镜像已经包含我们创建的用户runoob


docker build 命令用于使用 Dockerfile 创建镜像。

语法

docker build [OPTIONS] PATH | URL | -

OPTIONS说明:

--build-arg=[] :设置镜像创建时的变量;

--cpu-shares :设置 cpu 使用权重;

--cpu-period :限制 CPU CFS周期;

--cpu-quota :限制 CPU CFS配额;

--cpuset-cpus :指定使用的CPU id;

--cpuset-mems :指定使用的内存 id;

--disable-content-trust :忽略校验,默认开启;

-f :指定要使用的Dockerfile路径;

--force-rm :设置镜像过程中删除中间容器;

--isolation :使用容器隔离技术;

--label=[] :设置镜像使用的元数据;

-m :设置内存最大值;

--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;

--no-cache :创建镜像的过程不使用缓存;

--pull :尝试去更新镜像的新版本;

--quiet, -q :安静模式,成功后只输出镜像 ID;

--rm :设置镜像成功后删除中间容器;

--shm-size :设置/dev/shm的大小,默认值是64M;

--ulimit :Ulimit配置。

--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

--network: 默认 default。在构建期间设置RUN指令的网络模式


实例

使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。

docker build -t runoob/ubuntu:v1 . 

使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像。

docker build github.com/creack/docker-firefox

也可以通过 -f Dockerfile 文件的位置:

$ docker build -f /path/to/a/Dockerfile .


c.docker import : 从归档文件中创建镜像。

语法

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

OPTIONS说明:

-c :应用docker 指令创建镜像;

-m :提交时的说明文字;


实例

从镜像归档文件my_ubuntu_v3.tar创建镜像,命名为runoob/ubuntu:v4

~$ docker import  my_ubuntu_v3.tar runoob/ubuntu:v4  

sha256:63ce4a6d6bc3fabb95dbd6c561404a309b7bdfc4e21c1d59fe9fe4299cbfea39

~$ docker images runoob/ubuntu:v4

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

runoob/ubuntu       v4                  63ce4a6d6bc3        20 seconds ago      142.1 MB


5)设置镜像标签

我们可以使用 docker tag 命令,为镜像添加一个新的标签。

$ docker tag 860c279d2fec runoob/centos:dev

docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。

使用 docker images 命令可以看到,ID为860c279d2fec的镜像多一个标签。

$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

runoob/centos       6.7                 860c279d2fec        5 hours ago         190.6 MB

runoob/centos       dev                 860c279d2fec        5 hours ago         190.6 MB

runoob/ubuntu       v2                  70bf1840fd7c        22 hours ago        158.5 MB

......


docker tag : 标记本地镜像,将其归入某一仓库。

语法

docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

实例

将镜像ubuntu:15.10标记为 runoob/ubuntu:v3 镜像。

~# docker tag ubuntu:15.10 runoob/ubuntu:v3

~# docker images   runoob/ubuntu:v3

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

runoob/ubuntu       v3                  4e3b13c8a266        3 months ago        136.3 MB


6)删除镜像

docker rmi : 删除本地一个或多少镜像。

语法

docker rmi [OPTIONS] IMAGE [IMAGE...]

OPTIONS说明:

-f :强制删除;

--no-prune :不移除该镜像的过程镜像,默认移除;


实例

强制删除本地镜像runoob/ubuntu:v4。

~# docker rmi -f runoob/ubuntu:v4

Untagged: runoob/ubuntu:v4

Deleted: sha256:1c06aa18edee44230f93a90a7d88139235de12cd4c089d41eed8419b503072be

Deleted: sha256:85feb446e89a28d58ee7d80ea5ce367eebb7cec70f0ec18aa4faa874cbd97c73


7)查看镜像的历史

docker history : 查看指定镜像的创建历史。

语法

docker history [OPTIONS] IMAGE

OPTIONS说明:

-H :以可读的格式打印镜像大小和日期,默认为true;

--no-trunc :显示完整的提交记录;

-q :仅列出提交记录ID。


实例

查看本地镜像runoob/ubuntu:v3的创建历史。

~# docker history runoob/ubuntu:v3

IMAGE             CREATED           CREATED BY                                      SIZE      COMMENT

4e3b13c8a266      3 months ago      /bin/sh -c #(nop) CMD ["/bin/bash"]             0 B                 

<missing>         3 months ago      /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/   1.863 kB            

......


8)登录/登出镜像仓库

docker login : 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub

docker logout : 登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub

语法

docker login [OPTIONS] [SERVER]

docker logout [OPTIONS] [SERVER]

OPTIONS说明:

-u :登陆的用户名

-p :登陆的密码


实例

登陆到Docker Hub

docker login -u 用户名 -p 密码

登出Docker Hub

docker logout


9)上传镜像

docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库

语法

docker push [OPTIONS] NAME[:TAG]

OPTIONS说明:

--disable-content-trust :忽略镜像的校验,默认开启


实例

上传本地镜像myapache:v1到镜像仓库中。

docker push myapache:v1


10)导出和导入镜像

可以使用docker save和docker load命令来导出和导入镜像

docker save : 将指定镜像保存成 tar 归档文件。

语法

docker save [OPTIONS] IMAGE [IMAGE...]

OPTIONS说明:

-o :输出到的文件。


实例

将镜像runoob/ubuntu:v3 生成my_ubuntu_v3.tar文档

$ docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3

$ ll my_ubuntu_v3.tar

-rw------- 1 runoob runoob 142102016 Jul 11 01:37 my_ubuntu_v3.ta


docker 容器导入导出有两种方法:

一种是使用 save 和 load 命令

使用例子如下:

docker save ubuntu:load>/root/ubuntu.tar

docker load<ubuntu.tar


一种是使用 export 和 import 命令

使用例子如下:

docker export 98ca36> ubuntu.tar

cat ubuntu.tar | sudo docker import - ubuntu:import

需要注意两种方法不可混用。


其他操作:

docker import http://example.com/example.tar  远程导入文件

docker login [options][server]  用来登陆自己的registry

docker inspect container/image  收集容器的信息(ip地址,端口等)

docker wait container  阻塞


参考网址:

http://www.runoob.com/docker/docker-image-usage.html 

https://www.cnblogs.com/senlinyang/p/8241745.html 

https://www.cnblogs.com/liuyongsheng/p/6724749.html


转载请注明: ITTXX.CN--分享互联网 » Docker入门教程:Docker基本使用(一)镜像操作

最后更新:2018-11-13 16:38:42

赞 (3) or 分享 ()
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽