本文目录
- docker 云和 docker hub的区别
- 如何查看dockerhub的所有镜像
- 如何提交docker镜像到DockerHub
- DockerHub里的镜像太多了,怎么选择
- 如何使用 的 docker hub缓存服务
- 如何创建本地docker hub
- docker hub怎么上传自己的镜像
docker 云和 docker hub的区别
1. docker version显示 Docker 版本信息。2. docker info显示 Docker 系统信息,包括镜像和容器数。3. docker searchdocker search termdocker search -s django从 Docker Hub 中搜索符合条件的镜像。--automated 只列出 automated build类型的镜像;--no-trunc 可显示完整的镜像描述;-s 40 列出收藏数不小于40的镜像。4. docker pulldocker pull docker pull laozhu/telescope:latest从 Docker Hub 中拉取或者更新指定镜像。-a 拉取所有 tagged 镜像 。5. docker loginroot@moon:~# docker loginUsername: usernamePassword: ****Email: user@domain.comLogin Succeeded按步骤输入在 Docker Hub 注册的用户名、密码和邮箱即可完成登录。6. docker logout运行后从指定服务器登出,默认为官方服务器。7. docker imagesdocker images 列出本地所有镜像。其中 对镜像名称进行关键词查询。-a 列出所有镜像(含过程镜像);-f 过滤镜像,如: -f 只列出满足dangling=true 条件的镜像;--no-trunc 可显示完整的镜像ID;-q 仅列出镜像ID。--tree 以树状结构列出镜像的所有提交历史。8. docker ps列出所有运行中容器。-a 列出所有容器(含沉睡镜像);--before=“nginx“ 列出在某一容器之前创建的容器,接受容器名称和ID作为参数;--since=“nginx“ 列出在某一容器之后创建的容器,接受容器名称和ID作为参数;-f 列出满足exited=《int》 条件的容器;-l 仅列出最新创建的一个容器;--no-trunc 显示完整的容器ID;-n=4 列出最近创建的4个容器;-q 仅列出容器ID;-s 显示容器大小。9. docker rmidocker rmi docker rmi nginx:latest postgres:latest python:latest从本地移除一个或多个指定的镜像。-f 强行移除该镜像,即使其正被使用;--no-prune 不移除该镜像的过程镜像,默认移除。10. docker rmdocker rm docker rm nginx-01 nginx-02 db-01 db-02sudo docker rm -l /webapp/redis-f 强行移除该容器,即使其正在运行;-l 移除容器间的网络连接,而非容器本身;-v 移除与容器关联的空间。11. docker historydocker history “o“》 《image》查看指定镜像的创建历史。--no-trunc 显示完整的提交记录;-q 仅列出提交记录ID。12. docker start|stop|restartdocker start|stop “p“》|restart 启动、停止和重启一个或多个指定容器。-a 待完成-i 启动一个容器并进入交互模式;-t 10 停止或者重启容器的超时时间(秒),超时后系统将杀死进程。13. docker killdocker kill “o“》杀死一个或多个指定容器进程。-s “KILL“ 自定义发送至容器的信号。14. docker eventsdocker events docker events --since= “s2“》“20141020“docker events --until= “s2“》“20120310“从服务器拉取个人动态,可选择时间区间。15. docker savedocker save -i “debian.tar“docker save 》 “debian.tar“将指定镜像保存成 tar 归档文件, docker load 的逆操作。保存后再加载(saved-loaded)的镜像不会丢失提交历史和层,可以回滚。-o “debian.tar“ 指定保存的镜像归档。16. docker loaddocker load docker load 《 debian.tardocker load -i “debian.tar“从 tar 镜像归档中载入镜像, docker save 的逆操作。保存后再加载(saved-loaded)的镜像不会丢失提交历史和层,可以回滚。-i “debian.tar“ 指定载入的镜像归档。17. docker exportdocker export 《container》docker export nginx-01 》 export.tar将指定的容器保存成 tar 归档文件, docker import 的逆操作。导出后导入(exported-imported))的容器会丢失所有的提交历史,无法回滚。18. docker importdocker import url|- “o“》cat export.tar “p“》| docker import - imported-nginx:latestdocker import -a stdin 指定标准输入输出内容类型,可选 STDIN/STDOUT / STDERR 三项;-d 后台运行容器,并返回容器ID;-i 以交互模式运行容器,通常与 -t 同时使用;-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;--name=“nginx-lb“ 为容器指定一个名称;--dns 8.8.8.8 指定容器使用的DNS服务器,默认和宿主一致;--dns-search example.com 指定容器DNS搜索域名,默认和宿主一致;-h “mars“ 指定容器的hostname;-e username=“ritchie“ 设置环境变量;--env-file= 从指定文件读入环境变量;--cpuset=“0-2“ or --cpuset=“0,1,2“绑定容器到指定CPU运行;-c 待完成-m 待完成--net=“bridge“ 指定容器的网络连接类型,支持 bridge /host / nonecontainer:《name|id》 四种类型;--link= 待完成--expose= 待完成
如何查看dockerhub的所有镜像
让我们通过进一步学习Docker镜像来继续我们的Docker之旅。Docker镜像是由文件系统叠加而成。最底端是一个引导文件系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。Docker用户几乎永远不会和引导文件系统有什么交互。实际上,当一个容器启动后,它将会被移到内存中,而引导文件系统则会被卸载(unmount),以留出更多的内存供initrd磁盘镜像使用。到目前为止,Docker看起来还很像一个典型的Linux虚拟化栈。实际上,Docker镜像的第二层是root文件系统rootfs,它位于引导文件系统之上。rootfs可以是一种或多种操作系统(如Debian或者Ubuntu文件系统)。在传统的Linux引导过程中,root文件系统会最先以只读的方式加载,当引导结束并完成了完整性检查之后,它才会被切换为读写模式。但是在Docker里,root文件系统永远只能是只读状态,并且Docker利用联合加载(union mount)技术又会在root文件系统层上加载更多的只读文件系统。联合加载指的是一次同时加载多个文件系统,但是在外面看起来只能看到一个文件系统。联合加载会将各层文件系统叠加到一起,这样最终的文件系统会包含所有底层的文件和目录。Docker将这样的文件系统称为镜像。一个镜像可以放到另一个镜像的顶部。位于下面的镜像称为父镜像(parent image),可以依次类推,直到镜像栈的最底部,最底部的镜像称为基础镜像(base image)。最后,当从一个镜像启动容器时,Docker会在该镜像的最顶层加载一个读写文件系统。我们想在Docker中运行的程序就是在这个读写层中执行的。这听上去有点儿令人迷惑,我们最好还是用一张图来表示一下,如图4-1所示。图4-1 Docker文件系统层当Docker第一次启动一个容器时,初始的读写层是空的。当文件系统发生变化时,这些变化都会应用到这一层上。比如,如果想修改一个文件,这个文件首先会从该读写层下面的只读层复制到该读写层。该文件的只读版本依然存在,但是已经被读写层中的该文件副本所隐藏。通常这种机制被称为写时复制(copy on write),这也是使Docker如此强大的技术之一。每个只读镜像层都是只读的,并且以后永远不会变化。当创建一个新容器时,Docker会构建出一个镜像栈,并在栈的最顶端添加一个读写层。这个读写层再加上其下面的镜像层以及一些配置数据,就构成了一个容器。在上一章我们已经知道,容器是可以修改的,它们都有自己的状态,并且是可以启动和停止的。容器的这种特点加上镜像分层框架(image-layering framework),使我们可以快速构建镜像并运行包含我们自己的应用程序和服务的容器。创建Docker Hub账号构建镜像中很重要的一环就是如何共享和发布镜像。可以将镜像推送到Docker Hub或者用户自己的私有Registry中。为了完成这项工作,需要在Docker Hub上创建一个账号,可以从或者如果原来已经存在settings.xml文件了,
如何提交docker镜像到DockerHub
初次安装部署好docker后,大多数镜像可以从DockerHub 提取,但是大多数人都希望自己可以完全自定义一个镜像,那么这里需要一个第三方工具 febootstrap epel6的源提供febootstrap的RPM包 yum install docker-io febootstrap -y service docker start chkconfig docker --level35 on复制代码 制作CentOS6.6镜像目录 febootstrap -i yum -i iputils -i iproute -i bash -i vim-minimal -i coreutils -i tar -i net-tools centos6 base 《a href=““ target=“_blank“》《/a》 -u 《a href=““ target=“_blank“》《/a》复制代码 -i 表示镜像里面安装的RPM包(包括一些人为有必要的软件包) centos6 表示镜像的版本说明 base 表示生成的镜像目录 后面之后了系统安装源和更新源为USTC 安装执行后,会开始一系列的RPM包下载安装,过程与yum类似,安装完成后当前目录会多了base目录,里面就是一个镜像的系统文件 进入base目录等于进入镜像的根目录 # cd base/ # ls bin boot dev etc home lib lib64 media mnt opt proc root sbin selinux srv sys tmp usr var复制代码 可以像一般的系统文件一样先做一些修改配置,例如配置第三方yum源等等 把base目录把所有文件打包成二进制文件后导入docker创建为镜像 cd ~/root/base/ && tar -c . | docker import - centos6:base复制代码 docker images 可以查看镜像的信息 一个基本centos镜像创建完毕,下面再利用Dokcerfile制作mysql镜像 cat Dockerfile FROM centos6:base MAINTAINER Lion “lioncui@163.com“ VOLUME /var/lib/mysql RUN yum install mysql-server mysql -y RUN echo -ne “NETWORKING=yes\\nHOSTNAME=mysql“ 》 /etc/sysconfig/network RUN echo -ne “bind-address = 0.0.0.0\\ndefault-storage-engine=innodb\\ninnodb_file_per_table\\n\collation-server=utf8_general_ci\\ninit-connect=’SET NAMES utf8’\\ncharacter-set-server = utf8“ 》 insert RUN sed -i “/user=mysql/r insert“ /etc/my.cnf && rm -f insert RUN echo -ne “/usr/bin/mysql_install_db\\n/usr/bin/mysqld_safe“ 》》 /opt/mysql_start RUN chmod 777 /opt/mysql_start ENV PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin: WORKDIR /opt EXPOSE 3306 CMD /bin/sh -c mysql_start复制代码 FROM 声明以centos:base镜像为基础 MAINTAINER 声明镜像的维护者信息 VOLUME 挂载本地目录到容器里/var/lib/mysql目录(这是mysql默认的数据保存目录) 由于我希望数据可以持久化防止因为容器误删除而丢失,所以映射到宿主本地目录 RUN 在镜像中执行安装mysql 在新镜像中写入HOSTNAME信息,因为mysql启动过程需要network文件 在my.cnf配置文件插入一些修改配置 创建启动脚本 声明环境变量 制定默认工作目录 EXPOSE 声明容器需要暴露的端口号 CMD 是指镜像生成容器后自动执行的命令,类似docker exec,这里是自动启动mysql服务 根据Dockerfile创建mysql服务镜像 docker build --rm=true -t mysql:frist . 查看镜像的树状关系可以发现,mysql:frist是以centos:base为父镜像
DockerHub里的镜像太多了,怎么选择
有官方的直接用官方的,也就是标注official的,official的肯定可以用,但未必好用;如果没有官方的就选starts最多的,这种要么是封装的比较早,要么是封装的比较好;但最多的时候,我都是拉下来个裸操作系统,更新源后,按照我自己的思路重新封装新的image,我也知道这样不太符合docker精神,在现阶段讲我认为是最合适的选择毕竟生态还是早期,官方都是简单封装下不怎么好用,相比之下,一些docker运营商比如daocloud和时速云封装的镜像要更好用一些
如何使用 的 docker hub缓存服务
推荐使用Dockerfile方式。服务的管理使用的是supervisord, 因为dockerfile里只会有一个cmd生效,如果我想通过ssh去管理容器还要有mysql服务的启动起来 cmd的方式就无法实现,当然容器不需要以sshd的方式去管理,这些也都是看自己怎么去使用,比如说我想备份容器里的数据 我完全可以使用 –volumes-from 《容器name》 , 重启使用 docker restart 《容器id》, 我个人也是使用ssh习惯了 所以依赖的镜像把ssh服务栽进去了。# docker 版本:复制代码代码如下:# docker versionClient version: 1.6.0-rc5Client API version: 1.18Go version (client): go1.4.2Git commit (client): fc4825dOS/Arch (client): linux/amd64Server version: 1.6.0-rc5Server API version: 1.18Go version (server): go1.4.2Git commit (server): fc4825dOS/Arch (server): linux/amd64
如何创建本地docker hub
如何创建本地dockerhubdocker是一个非常好用的虚拟化工具。下面给出建立私有dockerhub的方法。docker将私有hub的环境打包在registryimage中执行指令:dockerrun-p5000:5000registry这条指令启动一个基于registryimage的cotainer。并将host主机的port5000绑定到虚拟机的端口5000。这样,对该host主机端口5000的任何访问都转移到虚拟机中。上传image:首先给image赋予一个tagdockertag$ID$IP:$port/$name如dockertagb832n2b87192.168.1.1:5000/vimID为image的ID,IP为host主机的IP,name为该image的名字dockerpush192.168.1.1:5000/vim下载image:dockerpull192.168.1.1:5000/vim
docker hub怎么上传自己的镜像
首先注册docker的账户,然后使用docker login登录。使用docker push可以将自己的镜像上传上去了。