Docker 镜像基础管理

一、Docker 的安装

Docker安装:(Centos 6.x)

[root@localhost ~]# yum install epel-release

[root@localhost ~]# yum install docker-io

[root@localhost ~]# service docker start

[root@localhost ~]# docker version //输入docker version 验证安装是否成功

Docker安装:(Centos 7.x

最新版的Docker需要64位CentOS 7系统,并且分社区版(CE)和企业版(EE),一般选择免费的社区版即可

1.卸载旧版本(如果安装了的话)

[root@localhost ~]# yum remove docker docker-common docker-selinux docker-engine

2.安装

->最简单的安装方式是直接 yum install:

[root@localhost ~]# yum install docker

->如果想要安装最新的稳定版,可以使用下面的安装方式:

[root@localhost software]# wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.06.2.ce-1.el7.centos.x86_64.rpm

[root@localhost software]# ls

docker-ce-17.06.2.ce-1.el7.centos.x86_64.rpm

[root@localhost software]# yum install docker-ce-17.06.2.ce-1.el7.centos.x86_64.rpm

二、启动 Docker 服务

[root@localhost software]# systemctl start docker

[root@localhost software]# ps -aux | grep docker

可以看到Docker在后台启动了两个守护进程:dockerd 和 docker-containerd

三、Docker 体系结构

Docker 镜像基础管理

Docker的三个基本概念:镜像、容器、仓库

镜像(image):镜像相当于创建容器的一个模具,一个说明书,

容器(container):而容器就是一个实实在在运行的镜像实例,可以用可执行文件和进程来比喻镜像和容器的关系,

仓库(registry):而仓库就是用来存放镜像的,相当于git仓库,用来存放不同版本的镜像。

1、镜像(可以将镜像比作面向对象的类 Class)

Docker想要启动一个容器,则必须要先有一个镜像,镜像是创建容器的模板和源程序,

docker对镜像的管理灵感很大程度来源于git,比如镜像也有pull和push操作。

如同github上托管了数以万计的项目一样,Docker的官方镜像库Docker Hub(https://hub.docker.com/)

上也托管了几十万个公开的镜像供我们下载使用,可以说正是由于镜像的存在才让我们的Docker变得如此流行。

2、容器(可以将容器比作面向对象的实例 new Class())

容器(Container)是Docker中最重要的概念之一,他是镜像的运行实体,是一个应用运行和所需运行环境的结合体。

从现在开始,忘掉“臃肿”的虚拟机吧,对容器进行操作就跟直接操作应用一样简单、快速。

3、仓库(可以将仓库比作面向对象中的堆内存,用来存放镜像【class】的地方)

仓库(Repository)是Docker另一个重要的概念,是集中存放镜像的地方。

由于Docker中的镜像管理的灵感很大程度来源于Git,所以可以对比Git仓库来理解Docker仓库。

如同一个Git仓库含有多次提交和多个项目版本,一个Docker仓库也可以有多个版本的镜像。

四、Docker 命令

###################################镜像相关命令###########################################

1、docker search(搜索镜像,默认从官方镜像库hub.docker.com搜索)

[root@localhost ~]# docker search nginx

//-s 参数可以指定只搜索镜像最少获得的star数

2、docker pull(将镜像下载到本地)

[root@localhost software]# docker pull nginx

//由于最新的镜像可能并不稳定,所以我们在pull镜像时往往要加上特定的TAG来下载指定的版本

//docker pull mysql:5.6.37

3、docker images(列出本地镜像)

[root@localhost software]# docker images

4、docker inspect imageID/ContainerID(列出某个镜像/容器的详细信息,返回的是一个json格式文本)

[root@localhost software]# docker inspect imageID

5、docker history imageID(列出镜像各层的创建过程)

[root@localhost software]# docker history imageID

6、docker tag(给镜像打标签,相当于给本地的镜像重新起了个别名,方便我们操作)

[root@localhost software]#docker tag mysql:5.6.37 hellomysql:0.0.1

//给mysql起一个别名hellomysql

//虽然上面分别列出了mysql和 hellomysql,但是它们的镜像ID是一样的,并且目前它们指向的是同一个镜像文件,

//镜像文件并不是重新被复制了一份,你可以对比 git中的新建分支操作。

7、docker rmi(删除镜像)

[root@localhost ~]# docker rmi 036477bc0d5a

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

###################################容器相关命令###########################################

1、docker create(创建一个容器)

[root@localhost ~]#docker create -it centos:v7.0 "/bin/bash"

//-i 参数 保持标准输入打开,默认为false

//-t 参数 用来分配一个伪终端并绑定到容器的标准输入上,-i 和 -t 通常配合使用,让我们可以在容器中执行shell命令

2、docker ps(列出当前正在运行的容器)

[root@localhost software]# docker ps

//可以看到上面docker ps的信息没有显示全,有的被截断了 可以在命令加上 --no-trunc 参数强制完全显示

//-a 参数会列出所有的容器,包括已停止的

//-q 只列出容器的id

//从上面的结果也可以看出,docker create 命令只是创建了一个容器并没有启动它

3、docker run( 创建并启动一个容器)

//当然创建和启动容器也可以一步完成,使用docker run 命令,该命令相当于docker create + docker start命令

//docker run 命令支持的参数和docker create 基本一致。

[root@localhost software]# docker run -d -p 8080:80 nginx

//启动一个容器,并把容器中的80端口映射到宿主机的8080端口 -d表示让容器在后台运行

//docker run命令的执行步骤大致如下:

(1)检查本地是否存在指定的镜像,不存在就从公有仓库下载;

(2)利用镜像创建一个容器,并启动该容器;

(3)分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层;

(4)从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中;

(5)从网桥的地址池配置一个IP地址给容器;

(6)执行用户指定的应用程序;

(7)执行完毕后容器被自动终止。

//[root@localhost go]# docker run centos:v7.0 /bin/echo "hello world"

//上面的命令创建了一个centos容器,启动并执行COMMAND: /bin/echo "hello world"

//命令执行完之后结束运行,可以用docker ps -a 命令查看到一个处于停止状态的容器

//docker run 命令如果没有指定COMMAND,则会用镜像指定的默认COMMAND,如果镜像也没有指定COMMAND,则会抛出错误。

//--name指定容器名称,默认是自己生成的,注意--name时不能重复

//-it 以交互模式运行容器,为容器重新分配一个伪输入终端。

//-d 后台运行容器,并返回容器ID

//-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

4、docker logs

//对于运行在后台的容器(使用 docker run -d),容器的标准输出会被重定向写入相应的日志文件中,

//这时如果我们想要看这个容器的标准输出,可以使用 docker logs 命令

//比如现在在我的容器中有一个shell脚本 /usr/local/bin/hello.sh 内容如下

//[root@localhost ~]# docker run -d centos:hello-docker /bin/sh /usr/local/bin/hello.sh

//e2fa608635bddaca537a2a850f6d25259f6f54f98428be6a0fc96a771ad478f6

//就是每隔两秒打印一句 hello docker,现在我们后台启动这个容器,然后用 docker logs 命令查看输出

//[root@localhost ~]# docker logs -f e2f

5、docker start/stop(开始/停止容器运行)

[root@localhost software]# docker start 9af52c8b4dab

[root@localhost software]# docker stop 9af52c8b4dab

6、docker exec(docker attach ContainerID)

//对于容器来说,通常我们都是让其在后台运行,比如对于nginx来说,我们通常这样启动容器

//[root@localhost ~]# docker run -d -p 8080:80 nginx:latest nginx -g 'daemon off;'

//b0a3266aaf05a9b7b5a7d910716c37a32330f0a5f9a34481679619c7217b5bb9

//[root@localhost ~]# curl '127.0.0.1:8080'

//-d 参数以守护进程方式运行容器 -p 参数可以将容器的端口映射到宿主机的指定端口

//我们知道,一个容器通常只能运行一个COMMAND,这时如果我还想在容器中执行其他命令该怎么办呢,

//比如在nginx容器中运行bash,docker exec命令可以实现该功能

//[root@localhost ~]# docker exec -it b0a /bin/bash

//root@b0a3266aaf05:/# cd /etc/

//root@b0a3266aaf05:/etc# cat nginx/nginx.conf

//上面我们进入到容器中,查看了nginx的配置文件然后退出,整个过程没有影响到容器的运行。

7、docker rm(删除容器)

[root@localhost ~]# docker rm 724db6813f51

// 可以加 -f 参数,这样docker会先尝试终止容器运行,然后再删除容器

8、docker commit

//当我们在一个容器中做了一些更改之后,想要保存这些更改方便以后使用,我们可以使用 docker commit 提交更改,

//这样会在本地生成一个新的镜像,这个镜像保存了你之前所做的所有修改。

以Nginx镜像为例,在容器中创建一个文件,然后 docker commit:

[root@localhost sshd_ubuntu]# docker run -d -p 8080:80 nginx:latest

ffa8237fe81a34e13c0ef7c13ec0dd52775fee0e2e9f377e6924929ac4eb7915

[root@localhost sshd_ubuntu]# docker exec -it ffa /bin/bash

root@ffa8237fe81a:/# echo "Hello,docker!" > /usr/share/nginx/html/test.html

root@ffa8237fe81a:/# ls /usr/share/nginx/html/test.html

/usr/share/nginx/html/test.html

root@ffa8237fe81a:/# exit

root@localhost sshd_ubuntu]# curl '127.0.0.1:8080/test.html'

Hello,docker!

[root@localhost sshd_ubuntu]# docker commit -m "创建test.html" ffa nginx:myself

ffbf82fc975d8804bdd0f219e038be0c4f788303938671ae1db61be9bb6703e0

//这样就把我们刚刚的修改提交生成了一个新镜像 nginx:myself

9、docker export/import

有时我们需要将一个容器迁移到另一个容器上,这时我们使用docker提供的导入导出命令(docker import/export)

就可以很方便的将容器导出成备份文件,然后再从备份文件导入成镜像。

10、dock cp(拷贝文件)

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

以上是 Docker 镜像基础管理 的全部内容, 来源链接: utcz.com/p/233412.html

回到顶部