Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。Docker 自开源后受到广泛的关注和讨论, 以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
左边传统的虚拟化技术,底层是服务器硬件,硬件上运行宿主机的操作系统,在宿主机
的操作系统之上,虚拟化出虚拟硬件设备,在虚拟硬件之上运行虚拟化操作系统,再在虚拟
的操作系统之上运行应用服务。而中间这段,虚拟化出来的操作系统大大占用了服务器的硬
件资源。而容器虚拟化技术就不同了,我们看一下右边这张图。在底层硬件上运行宿主机操作系
统,在宿主机上运行docker 引擎,无需虚拟化硬件,也不用操作系统,而是直接运行容器,
提供所需的应用服务,大大减降低了服务器资源的占用。
1、镜像(Image) Docker 镜像就是一个只读的模板。例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。 镜像可以用来创建 Docker 容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
2、容器(Container) Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root 用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。 *注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
3、仓库(Repository)
仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。仓库分为公开仓库(Public)和私有仓库(Private) 两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool 等,可以提供大陆用户更稳定快速的访问。当然,用户也可以在本地网络内创建一个私有仓库。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。 *注:Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。
用法: docker search TERM
参数:
--automated=false 仅显示自动创建的镜像
--no-trunc=false 输出信息不截断显示
-s, --stars=0 指定仅显示评价为指定星级以上的镜像
[root@docker ~]# docker search -s 500 nginx //搜索星级为500 以上的镜像
[root@docker ~]# docker info
[root@docker ~]# docker pull amber/nginx
[root@docker ~]# docker push amber/nginx
[root@docker ~]# docker run -it centos:1 /bin/bash
[root@fcbe47db440d /]#
[root@docker ~]# docker run -d centos:1 /bin/bash -c "while :; do echo hello; sleep 2; done"
b21e687d0719cb36c89a4325808bc03d42918ef51176235e9dfc50c57094236b
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b21e687d0719 centos:1 "/bin/bash -c 'while " About a minute ago Up About a minute high_brahmagupta
exit 或 ctrl + d //退出并停止容器
(2)先按ctrl + p 再按 ctrl + q //退出伪终端,容器后台运行
[root@docker ~]# docker run -it centos:1 /bin/bash
[root@353fc6f27cb7 /]#ctrl +p ; ctrl+q [root@docker ~]#
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
353fc6f27cb7 centos:1 "/bin/bash" 49 seconds ago Up 48 seconds berserk_einstein
b21e687d0719 centos:1 "/bin/bash -c 'while " 5 minutes ago Up 5 minutes high_brahmagupta
[root@docker ~]# docker attach 353 //输入容器ID,若没有重名的,输入第一个字母即可
[root@353fc6f27cb7 /]#
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b21e687d0719 centos:1 "/bin/bash -c 'while " 11 minutes ago Up 11 minutes high_brahmagupta
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
353fc6f27cb7 centos:1 "/bin/bash" 18 minutes ago Exited (127) 11 minutes ago berserk_einstein
b21e687d0719 centos:1 "/bin/bash -c 'while " 23 minutes ago Up 23 minutes high_brahmagupta
fcbe47db440d centos:1 "/bin/bash" 26 minutes ago Exited (127) 23 minutes ago nauseous_franklin
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
353fc6f27cb7 centos:1 "/bin/bash" 20 minutes ago Exited (127) 12 minutes ago berserk_einstein
b21e687d0719 centos:1 "/bin/bash -c 'while " 24 minutes ago Up 24 minutes high_brahmagupta
fcbe47db440d centos:1 "/bin/bash" 27 minutes ago Exited (127) 24 minutes ago nauseous_franklin
[root@docker ~]# docker rm -f b21
b21
[root@docker ~]# docker rm -f f
f
[root@docker ~]# docker rm -f 353
353
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 1 51f7df51ca40 30 minutes ago 196.7 MB
docker.io/nginx latest db079554b4d2 32 hours ago 181.8 MB
[root@docker ~]# docker rmi docker.io/nginx
Untagged: docker.io/nginx:latest
Untagged: docker.io/nginx@sha256:4296639ebdf92f035abf95fee1330449e65990223c899838283c9844b1aaac4c
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 1 51f7df51ca40 32 minutes ago 196.7 MB
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 1 385c6554f48e 19 seconds ago 196.7 MB
[root@docker ~]# docker create -it centos:1 /bin/bash
9bace61c06b5c4539e4d8668a04ff2762cf5aaad13731d3c2ac6b99d1e3cb517
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9bace61c06b5 centos:1 "/bin/bash" 12 seconds ago Created drunk_payne
[root@docker ~]# docker start 9ba
9ba
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9bace61c06b5 centos:1 "/bin/bash" About a minute ago Up 9 seconds drunk_payne
[root@docker ~]# docker stop 9ba
9ba
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker ~]# docker start 9ba
9ba
[root@docker ~]# docker kill 9ba
9ba
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9bace61c06b5 centos:1 "/bin/bash" 4 minutes ago Exited (137) 8 seconds ago drunk_payne
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 1 385c6554f48e 6 minutes ago 196.7 MB
[root@docker ~]# docker save -o centos.tar centos:1
[root@docker ~]# ls
anaconda-ks.cfg centos.tar mysql5.tar nginx.tar tomcat.tar
[root@docker ~]# docker rmi -f centos:1
Untagged: centos:1
Deleted: sha256:385c6554f48e0aaa488fd905e2f70b579ba47c98a9d4d44bf0235e0a8e3141ff
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@docker ~]# docker load < centos.tar
Loaded image: centos:1
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 1 385c6554f48e 15 minutes ago 196.7 MB
[root@docker ~]#
[root@docker ~]# docker run -it centos:1 /bin/bash
[root@42a1ab757ffd /]# touch aaa
[root@42a1ab757ffd /]# ls
aaa bin etc lib lost+found mnt proc run srv tmp var
anaconda-post.log dev home lib64 media opt root sbin sys usr
[root@42a1ab757ffd /]# exit
exit
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42a1ab757ffd centos:1 "/bin/bash" 45 seconds ago Exited (0) 29 seconds ago nauseous_varahamihira
9bace61c06b5 centos:1 "/bin/bash" 17 minutes ago Exited (137) 13 minutes ago drunk_payne
[root@docker ~]# docker export -o centos-aaa.tar 42a
[root@docker ~]# ls
anaconda-ks.cfg centos-aaa.tar centos.tar mysql5.tar nginx.tar tomcat.tar
[root@docker ~]# cat centos-aaa.tar |docker import - centos-aaa
sha256:99e1653378ed127eaeb8dd531fc7b4b5fc17b8bf095d9deeec5246f368dc4dcf
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos-aaa latest 99e1653378ed 13 seconds ago 196.7 MB
centos 1 385c6554f48e 21 minutes ago 196.7 MB
[root@docker ~]# docker run -it centos-aaa /bin/bash
[root@0dcb3999062c /]# ls
aaa bin etc lib lost+found mnt proc run srv tmp var
anaconda-post.log dev home lib64 media opt root sbin sys usr
仓库(Repository)是集中存放镜像的地方。
注册服务器才是存放仓库具体的服务器(Registry),每个服务器上都可以放置多个仓库,
而每个仓库下可以放置多个镜像,每个镜像上可以运行多个容器,每个容器上可以跑一个应
用或应用组。
仓库自身可以分为:公共仓库和私有仓库
比如共有仓库: 或国内的: dl.dockerpool
安装docker 后,可以通过官方提供的registry 镜像来简单搭建一套本地仓库环境
[root@docker ~]# vi /etc/sysconfig/docker
# INSECURE_REGISTRY='--insecure-registry'
INSECURE_REGISTRY='--insecure-registry 192.168.10.130:5000'
[root@docker ~]# systemctl restart docker.service
方法一:
方法二:
[root@docker ~]# mkdir -pv /opt/data/registry
mkdir: 已创建目录 "/opt/data" mkdir:
已创建目录 "/opt/data/registry"
[root@docker ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry 通过这种方式可以将上传的镜像放到本地的: /opt/data/registry
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb09700272a6 registry "/entrypoint.sh /etc/" 5 minutes ago Exited (2) 25 seconds ago jovial_poitras
[root@docker ~]# docker start bb0
bb0
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb09700272a6 registry "/entrypoint.sh /etc/" 3 minutes ago Up 3 minutes 0.0.0.0:5000->5000/tcp jovial_poitras
root@19bd142b0566:/# 192.168.10.160 - - [17/Feb/2017:10:22:06 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)" "-"
按ctrl+p 再按ctrl+q,使服务保持后台运行
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19bd142b0566 nginx "/bin/bash" 12 minutes ago Up 12 minutes 443/tcp, 0.0.0.0:5500->80/tcp adoring_ardinghelli
bb09700272a6 registry "/entrypoint.sh /etc/" 23 minutes ago Up 18 minutes 0.0.0.0:5000->5000/tcp jovial_poitras
[root@docker ~]# docker tag nginx 192.168.10.130:5000/nginx-test //将修改过的nginx 镜
像做标记封装,准备上传到私有仓库
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos-aaa latest 99e1653378ed 31 minutes ago 196.7 MB
centos 1 385c6554f48e 53 minutes ago 196.7 MB
docker.io/nginx latest db079554b4d2 33 hours ago 181.8 MB
192.168.10.130:5000/nginx-test latest db079554b4d2 33 hours ago 181.8 MB
docker.io/registry latest d1e32b95d8e8 4 weeks ago 33.17 MB
[root@docker ~]# docker push 192.168.10.130:5000/nginx-test //上传到私有仓库
The push refers to a repository [192.168.10.130:5000/nginx-test]
a82b6c66a6d4: Pushed
1941ca4a7a84: Pushed
a2ae92ffcd29: Pushed
latest: digest: sha256:9e81e4ce4899448e5e7aea69a72dfd1df989a7a0fe7365ad63be1133f05acf10 size: 948
另外打开一台机器装好docker
[root@docker-2 ~]# docker pull 192.168.10.131:5000/nginx-test //从私有仓库下载镜像
略。。。
本文发布于:2024-01-31 10:29:16,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170666815827864.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |