2025年4月1日 星期二 乙巳(蛇)年 正月初二 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 云技术 > Docker

Docker 镜像基础管理

时间:12-14来源:作者:点击数:11
城东书院 www.cdsy.xyz

一、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(拷贝文件)
  • ##############################################################################
城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐