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的三个基本概念:镜像、容器、仓库
镜像(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