docker
什么是docker?
Docker是Docker.inc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在GitHub上,基于Go语言并遵从Apache2.0协议开源(可以商业)。
Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。
Docker是通过内核虚拟化技术(namespaces及cgroups等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机VM额外的操作系统开销,提高资源利用率。
比较了Docker和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复制本地主机的操作系统,而传统方式则是在硬件层面实现。
Docker 内部
要理解 Docker 内部构建,需要理解以下三种部件:
Docker镜像 - Docker p_w_picpaths
Docker仓库 - Docker registeries
Docker容器 - Docker containers
Docker 镜像
Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS 来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker是如此的轻量。当你改变了一个Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新 的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。
Docker 仓库
Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker 仓库也有公有和私有的概念。公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。Docker 仓库是 Docker 的分发部分。
Docker 容器
Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分
Docker的工作模式
学习Docker的源码并不是一个枯燥的过程,反而可以从中理解Docker架构的设计原理。
Docker对使用者来讲是一个C/S模式的架构,而Docker的后端是一个非常松耦合的架构,模块各司其职,并有机组合,支撑Docker的运行。
用户是使用DockerClient与Docker Daemon建立通信,并发送请求给后者。
而Docker Daemon作为Docker架构中的主体部分,首先提供Server的功能使其可以接受Docker Client的请求;而后Engine执行Docker内部的一系列工作,每一项工作都是以一个Job的形式的存在。
Job的运行过程中,当需要容器镜像时,则从Docker Registry中下载镜像,并通过镜像管理驱动graphdriver将下载镜像以Graph的形式存储;当需要为Docker创建网络环境时,通过网络管理驱动networkdriver创建并配置Docker容器网络环境;当需要限制Docker容器运行资源或执行用户指令等操作时,则通过execdriver来完成。而libcontainer是一项独立的容器管理包,networkdriver以及execdriver都是通过libcontainer来实现具体对容器进行的操作。当执行完运行容器的命令后,一个实际的Docker容器就处于运行状态,该容器拥有独立的文件系统,独立并且安全的运行环境等。
Dcoerk八中应用场景
1、简化配置,统一配置,通过镜像快速启动(Simplifying)
2、代码流水线管理,开发环境->测试环境->预生产环境->灰度发布->正式发布,docker在这里实现了快速迁移(Code Oioeline Management)
3、开发效率,对开发人员,有了镜像,直接启动容器即可(Developer Productivity)
4、应用隔离,相对于虚拟机的完全隔离会占用资源,docker会比较节约资源(App lsolation)
5、服务器整合,一台服务器跑多个docker容器,提高服务器的利用率(Server Consolidation)
6、调试能力,debug调试(DebuggingCapabilties)
7、多租户,一个租户多个用户,类似于阿里公有云的一个project下多个用户(Multi-tenancy)
8、快速部署,不需要启动操作系统,实现秒级部署(Rapid Deplovment)
Docker八种开发模式
1.共享基础容器
2.共享卷开发容器
3.开发工具容器
4.不同环境下测试容器
5.构建容器
6.安装容器
7.盒子中默认服务容器
8.基础设施/粘合剂容器
Docker九个基本事实
1.容器不同于虚拟机
2.容器不如虚拟机来得成熟
3.容器可以在几分之一秒内启动
4.容器已在大规模环境证明了自身的价值
5.IT人员称容器为轻量级
6.容器引发了安全问题
7.Docker已成为容器的代名词,但它不是唯一的提供者
8.容器能节省IT人力,加快更新
9.容器仍面临一些没有解决的问题
使用Docker理由
作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式具有众多的优势。
首先,Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。其次,Docker对系统资源的利用率很低,一台主机上可以同时运行数千个Docker容器。
至于为什么要使用Docker:
1、技术储备
相对大公司这个非常重要,如果你们都在用,他们不用就落后了,等到完全成熟以后就跟不上了。
2、无技术栈和技术债
没有任何Openstack或者saltstack,服务down了就down了,所有的服务都是松耦合。
3、跟上潮流(提升自我,装逼)
面试的时候大家都会Docker,你不会是不是落后了。
4、符合当前业务
虽然Docker很优秀,但是,大多数处在第二种状态,很少有符合自己的业务
Docker改变了什么
● 面向产品:产品交付
● 面向开发:简化环境配置
● 面向测试:多版本测试
● 面向运维:环境一致性
● 面向架构:自动化扩容(微服务)
Docker更快速的交付和部署
对于开发和人员来说,最希望的就是一次创建和配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。Docker可以快速创建容器,快速迭代应用程序,并让整个过程全称可见,使团队中的其他成员更容易理解应用程序是如何创建和工作。Docker容器很轻很快!容器的启动时间是秒级的,大量第节约开发、测试、部署的时间。
Docker更高效的虚拟化
Docker容器的运行不需要额外的Hypervisor支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
Docker更轻松的迁移和扩展
Docker容器几乎可以字啊任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
Docker更简单的管理
使用Docker,只需要小小的修改,就可以替代往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
Docker与虚拟化
Docker与虚拟化
类别 | Docker | OpenStack | 结论 |
部署难度 | 非常简单 | 组件多,部署复杂 | 因为平台是对已有的线上生产环境进行改造,必须选择侵入性较小的容器化技术 |
启动速度 | 秒级 | 分钟级 | 面对流量峰值,速度就是一切 |
执行性能 | 和物理系统几乎一致 | VM会占用一些资源 | 微博核心业务对服务SLA要求非常苛刻 |
镜像体积 | 镜像是MB级别 | 虚拟机镜像是GB级别 | 当集群大规模部署时,体积小就代表更大的并发调度量 |
管理效率 | 管理简单 | 组件相互依赖,管理复杂 | 生产系统集群可控性是核心竞争力 |
隔离性 | 隔离性高 | 彻底隔离 | |
可管理性能 | 单进程、不建议启动SSH | 完整的系统管理 | |
网络连接 | 比较弱 | 借助Neutron可以灵活组建各类网络架构 |
Docker三大核心概念
Docker镜像(p_w_picpath)
Docker镜像就是一个只读的模板。
例如:一个镜像可以包含一个完整的CentOS操作系统环境,里面仅安装了Apache或用户需要的其他应用程序。
镜像可以用来创建Docker容器。
Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
Docker容器(container)
Docker利用容器来运行应用。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。
可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
注意:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
Docker仓库(repository)
仓库是集中存放镜像文件的场所。有时候把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是DockerHub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供大陆用户更稳定快读的访问。
当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下载在另外一台机器上使用这个镜像时候,只需需要从仓库上pull下来就可以了。
注意:Docker仓库的概念跟Git类似,注册服务器可以理解为GitHub这样的托管服务。
Docker企业实战
系统环境
[root@docker~]# cat/etc/redhat-release #查看版本号
CentOSLinux release 7.2.1511 (Core)
[root@docker ~]# uname -r #查看Linux内核
c3.10.0-229.el7.x86_64
[root@docker ~]#yum install -y docker
#安装docker(CentOS7系统CentOS-Extras库中已带Docker)
[root@docker~]#systemctlstart docker
#启动docker
[root@docker~]#systemctlenable docker
#加入开机自启动
[root@docker~]# dockerversion
#查看docker版本信息
Client:#docker客户端版本信息
Version:1.8.2-el7.centos
API version:1.20
PackageVersion: docker-1.8.2-10.el7.centos.x86_64
Go version:go1.4.2
Git commit:a01dc02/1.8.2
Built:
OS/Arch:linux/amd64
Server:#docker服务端版本信息
Version:1.8.2-el7.centos
API version:1.20
PackageVersion:
Go version:go1.4.2
Git commit:a01dc02/1.8.2
Built:
OS/Arch:linux/amd6
Docker基础命令
[root@docker~]# docker–help
Usage:docker [OPTIONS] COMMAND [arg…]
dockerdaemon [ –help | … ]
docker [–help | -v | –version ]
Aself-sufficient runtime for containers.
Options:
–config=~/.docker Location of client configfiles #客户端配置文件的位置
-D, –debug=falseEnable debug mode #启用Debug调试模式
-H, –host=[]Daemon socket(s) to connect to #守护进程的套接字(Socket)连接
-h, –help=falsePrint usage #打印使用
-l, –log-level=infoSet the logging level #设置日志级别
–tls=false Use TLS; implied by –tlsverify #
–tlscacert=~/.docker/ca.pem Trust certssigned only by this CA #信任证书签名CA
–tlscert=~/.docker/cert.pem Path to TLScertificate file #TLS证书文件路径
–tlskey=~/.docker/key.pem Path to TLS keyfile #TLS密钥文件路径
–tlsverify=false Use TLS and verify theremote #使用TLS验证远程
-v, –version=falsePrint version information and quit #打印版本信息并退出
Commands:
attach Attach to a running container #当前shell下attach连接指定运行镜像
build Build an p_w_picpath from a Dockerfile #通过Dockerfile定制镜像
commit Create a new p_w_picpath from acontainer’s changes #提交当前容器为新的镜像
cp Copy files/folders from a container toa HOSTDIR or to STDOUT #从容器中拷贝指定文件或者目录到宿主机中
create Create a new container #创建一个新的容器,同run 但不启动容器
diff Inspect changes on a container’s filesystem #查看docker容器变化
events Get real time events from theserver #从docker服务获取容器实时事件
exec Run a command in a running container#在已存在的容器上运行命令
export Export a container’s filesystem as a tar archive #导出容器的内容流作为一个tar归档文件(对应import)
history Show the history of an p_w_picpath #展示一个镜像形成历史
p_w_picpaths List p_w_picpaths #列出系统当前镜像
import Import the contents from a tarballto create a filesystem p_w_picpath #从tar包中的内容创建一个新的文件系统映像(对应export)
info Display system-wide information #显示系统相关信息
inspect Return low-level information on acontainer or p_w_picpath #查看容器详细信息
kill Kill a running container #kill指定docker容器
load Load an p_w_picpath from a tar archive orSTDIN #从一个tar包中加载一个镜像(对应save)
login Register or log in to a Dockerregistry #注册或者登陆一个docker源服务器
logout Log out from a Docker registry #从当前Docker registry退出
logs Fetch the logs of a container #输出当前容器日志信息
pause Pause all processes within acontainer #暂停容器
port List port mappings or a specificmapping for the CONTAINER #查看映射端口对应的容器内部源端口
ps List containers #列出容器列表
pull Pull an p_w_picpath or a repository from aregistry #从docker镜像源服务器拉取指定镜像或者库镜像
push Push an p_w_picpath or a repository to aregistry #推送指定镜像或者库镜像至docker源服务器
rename Rename a container #重命名容器
restart Restart a running container #重启运行的容器
rm Remove one or more containers #移除一个或者多个容器
rmi Remove one or more p_w_picpaths #移除一个或多个镜像(无容器使用该镜像才可以删除,否则需要删除相关容器才可以继续或者-f强制删除)
run Run a command in a new container #创建一个新的容器并运行一个命令
save Save an p_w_picpath(s) to a tar archive #保存一个镜像为一个tar包(对应load)
search Search the Docker Hub for p_w_picpaths #在docker hub中搜索镜像
start Start one or more stoppedcontainers #启动容器
stats Display a live stream ofcontainer(s) resource usage statistics #统计容器使用资源
stop Stop a running container #停止容器
tag Tag an p_w_picpath into a repository #给源中镜像打标签
top Display the running processes of acontainer #查看容器中运行的进程信息
unpause Unpause all processes within acontainer #取消暂停容器
version Show the Docker versioninformation #查看容器版本号
wait Block until a container stops, thenprint its exit code #截取容器停止时的退出状态值
Run ‘docker COMMAND –help’ for moreinformation on a command.
#运行docker命令在帮助可以获取更多信息
安装docker
第一步:下载yum安装包
yum install docker -y
第二步:加入开机自启动
systemctl enable docker
第三步:更改配置文件
登录阿里云网站寻找镜像地址
修改配置文件 在固定的行添加上--registry-mirror=https://2b2oi9ju.mirror.aliyuncs.com
vim /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
Wants=docker-storage-setup.service
Requires=docker-cleanup.timer
[Service]
Type=notify
NotifyAccess=all
KillMode=process
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd-current --registry-mirror=https://2b2oi9ju.mirror.aliyuncs.com\
--add-runtimedocker-runc=/usr/libexec/docker/docker-runc-current \
--default-runtime=docker-runc \
--exec-opt native.cgroupdriver=systemd \
--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
$OPTIONS\
$DOCKER_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \
$ADD_REGISTRY \
$BLOCK_REGISTRY \
$INSECURE_REGISTRY
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal
MountFlags=slave
[Install]
WantedBy=multi-user.target
第四步:
重启一下
systemctl daemon-reload
第五步:
打开docker
systemctlstart docker
第六步:检查docker状态,是否打开成功
[root@centos7 ~]# systemctlstatus docker
● docker.service - Docker Application ContainerEngine
Loaded:loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset:disabled)
Active: active(running) since Fri 2017-07-14 09:15:30 CST; 5min ago
Docs:http://docs.docker.com
Main PID: 6093(dockerd-current)
CGroup:/system.slice/docker.service
├─6093 /usr/bin/dockerd-current --registry-mirror=http...
└─6097 /usr/bin/docker-containerd-current -l unix:///v...
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Jul 14 09:15:30 centos7 systemd[1]: Started DockerApplication C....
Jul 14 09:15:30 centos7 dockerd-current[6093]:time="2017-07-14T0...
Hint: Some lines were ellipsized, use -l to showin full.
下载alpine镜像
docker pull alpine
查找 nginx 镜像文件
[root@centos7 ~]# docker search nginx
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/nginx Officialbuild of Nginx. 6411 [OK]
docker.io docker.io/jwilder/nginx-proxy Automated Nginx reverseproxy for docker c... 1064 [OK]
docker.io docker.io/richarvey/nginx-php-fpm Container running Nginx +PHP-FPM capable ... 406 [OK]
docker.io docker.io/jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginxas... 200 [OK]
docker.io docker.io/kong Open-sourceMicroservice & API Management ... 88 [OK]
docker.io docker.io/webdevops/php-nginx Nginx with PHP-FPM 85 [OK]
docker.io docker.io/bitnami/nginx Bitnami nginx DockerImage 30 [OK]
docker.io docker.io/linuxserver/nginx An Nginx container,brought to you by Linu... 20
docker.io docker.io/tutum/nginx Base Docker Image to runNginx server 10
docker.io docker.io/webdevops/nginx Nginx container 8 [OK]
docker.io docker.io/blacklabelops/nginx Dockerized Nginx ReverseProxy Server. 5 [OK]
docker.io docker.io/nginxdemos/nginx-ingress NGINX Ingress Controller forKubernetes 5
docker.io docker.io/1science/nginx Nginx Docker p_w_picpathsthat include Consul Te... 4 [OK]
docker.io docker.io/ixbox/nginx Nginx on AlpineLinux. 3 [OK]
docker.io docker.io/nvucinic/nginx Simple nginxp_w_picpath 3
docker.io docker.io/phpdockerio/nginx Note: p_w_picpath is nowdeprecated, here only t... 2 [OK]
docker.io docker.io/pebbletech/nginx-proxy nginx-proxy sets up acontainer running ng... 1 [OK]
docker.io docker.io/schmunk42/nginx Legacy nginxp_w_picpath 1
docker.io docker.io/xutongle/nginx nginx http 1 [OK]
docker.io docker.io/jenkler/nginx Docker Nginxpackage 0
docker.io docker.io/mailu/nginx Mailu nginxfrontend 0 [OK]
docker.io docker.io/tcaxias/nginx Nginx container toserver static content w... 0 [OK]
docker.io docker.io/travix/nginx NGinx reverseproxy 0 [OK]
docker.io docker.io/vukor/nginx Build for Nginx. Projectavailable on http... 0 [OK]
docker.io docker.io/watsco/nginx nginx:1.11-alpine 0 [OK]
下载nginx镜像文件
docker pull nginx
查看本机下载好的镜像
docker p_w_picpaths
导出操作
docker save nginx >/tmp/nginx.tar.gz
[root@centos7 ~]# cd /tmp/
[root@centos7 tmp]# ll
total 108608
-rw-r--r-- 1 root root 111210496 Jul 14 09:57 nginx.tar.gz
drwx------ 2 root root 6 Jul 14 09:15tmp.hB45j5rpnN
[root@centos7 tmp]# tar xf nginx.tar.gz
tar: manifest.json: implausibly old time stamp1970-01-01 08:00:00
tar: repositories: implausibly old time stamp1970-01-01 08:00:00
删除镜像的操作(能不用尽量不用)
docker rmi nginx
导入镜像的操作
docker load < /tmp/nginx.tar.gz
镜像的常见操作五个操作步骤
1 搜索
2 下载
3 导入
4 导出
5 删除
默认存储的目录/var/lib/docker/
更换存储目录
--graph=/opt/docker
dns服务
默认docker是采用宿主机的dns
可以采用--dns=xxxx的方式制定
docker daemon --help 查看docker 的帮助
dockerrun alpine sh
(run = cleate+ start)
进入容器
dockerrun -it alpine sh
docker run- 运行一个容器
-t 分配一个(伪)tty(link is external)
-i 交互模式 (sowe can interact with it)
正在运行的容器有那些
docker ps
想要退出但是还想容器正在运行的方法
按住ctrl不放手,按一下p 按一下q 就好了。
显示所有的容器(不管关闭还是打开)
docker ps -a
[root@centos7 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1a7da0cfb507 alpine "sh" 3minutes ago Exited (0) 3 minutesago reverent_darwin
a5059f339762 alpine "sh" 3minutes ago Exited (0) 3 minutesago compassionate_rosalind
28d29bfdbe90 alpine "sh" 5minutes ago Up 5 minutes condescending_chandrasekhar
805ae1d79c82 alpine "sh" 10 minutes ago Exited (0) 6 minutes ago elegant_ramanujan
5b0339fee0d8 alpine "sh" 10minutes ago Exited (0) 10 minutesago drunk_cori
073ab3b420bc alpine "sh" 10 minutes ago Exited (0) 10 minutes ago goofy_swirles
删除容器(删除前面-a查到的ID号就可以)
docker rm 073ab3b420bc
正在运行的容器删不了的话
docker rm -f ID号(加上-f强制删除)
指定容器名进行创建容器
docker run -it --name mynginx nginx
inspect查看容器的详细信息
docker inspect mynginx
--rm退出时自动进行删除
docker run -it --rm --name mynginx nginx
进入容器进行操作的三种方式
方法一:
attach 不推荐
docker attcah 容器名/ID 这种实时操作,别的终端也能看见你操作的内容
方法二:
exec 比较推荐
docker exec -it 容器名/ID sh
优点: 不会对其他用户有影响(操作层面)
第三种:
通过查看容器的空间进行进入
得先安装 yum install util-linux命令
开两个xshell窗口 一个执行下面的打开容器的命令
[root@centos7 docker]# docker run -it --rm --name mynginx nginx
另一个编写一个脚本
[root@centos7 ~]# cat docker_in.sh
#!/bin/bash
pid=`docker inspect --format"``.`State`.`Pid`" $1`
nsenter -t $pid -m -u -i -n -p
sh docker_in.sh 容器名/ID
这样就进入了容器
后台运行容器的操作命令
docker run -it -d --name mynginx nginx
查看当前访问的日志(只能查看最后一条)
docker logs mynginx
临时开一终端,实时查看当前访问的日志
docker logs -f mynginx
杀死容器
docker kill xxx
关闭容器
docker stop xxx
-v 挂载
docker run -it --rm -v/opt/nginx:/usr/share/nginx/html -p80:80 nginx
删除的话需要加v
docker rm -fv 容器名/ID
docker 镜像制作
简单的制作镜像的方式
以centos为基础
先执行
docker pull centos
然后在run一个容器
docker run -it centos bash
就进入了容器
下载wget的yum源
cd /etc/yum.repos.d/
yum install wget -y
rm -rf *
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-7.repo
下载nginx 服务,因为我们要做一个nginx镜像
yum install nginx -y
下载完成后修改配置文件
vi /etc/nginx/nginx.conf
在user nginx;
添加 daemon off;
[root@d4bbca6b4a94 yum.repos.d]# cat/etc/nginx/nginx.conf
# For more information on configuration, see:
# *Official English Documentation: http://nginx.org/en/docs/
# *Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
daemon off;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
nginx -t检查
在执行 nginx
如果卡的不动说明执行成功了。
docker commit --help 查看帮助
[root@centos7 ~]# docker commit --help
Usage: dockercommit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new p_w_picpath from a container's changes
Options:
-a,--author string Author (e.g.,"John Hannibal Smith <hannibal@a-team.com>")
-c,--change value Apply Dockerfileinstruction to the created p_w_picpath (default [])
--help Print usage
-m,--message string Commit message
-p,--pause Pause container duringcommit (default true)
-a,作者字符串作者(例如,“John Hannibal Smith的”,“他的团队”
-c——更改值将Dockerfile指令应用到创建的映像(默认)
——帮助打印使用
-m,消息字符串提交消息
-p,在提交期间暂停暂停容器(默认true)
容器制作镜像的过程
添加镜像
docker commit -m 'add nginx p_w_picpaths' 容器名/ID 镜像名:TAG号(自己可以添加)
docker commit -m 'add nginx p_w_picpaths' mynginx lsy/my_nginx:V1
检查镜像是否添加成功
添加完成后docker p_w_picpaths查看 是否添加成功
[root@centos7 ~]# docker commit -m 'add nginx p_w_picpaths'mynginx lsy/my_nginx:V1
sha256:5f22d143d7d83723af8025cbb0cbdc8fdb882cd2613a9594759957633402b12d
[root@centos7 ~]# docker p_w_picpaths
REPOSITORY TAG IMAGE ID CREATED SIZE
lsy/my_nginx V1 5f22d143d7d8 10 seconds ago 107.5 MB
docker.io/nginx latest e4e6d42c70b3 2 daysago 107.5 MB
docker.io/centos latest 36540f359ca3 8 daysago 192.5 MB
docker.io/alpine latest 7328f6f8b418 2 weeksago 3.962 MB
启动自己做的镜像
docker run -d --name 自己起名字镜像的名字后面跟着执行的命令(默认没有执行的命令)
docker run -d --name lsy_nginx lsy/my_nginx:V1 nginx
[root@centos7 ~]# docker run -d --name lsy_nginxlsy/my_nginx:V1 nginx
[root@centos7 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8624ad43cf1f lsy/my_nginx:V1 "nginx" 16 seconds ago Exited (0) 15 seconds ago lsy_nginx
57f7e7bb9bb3 nginx "nginx -g'daemon off" 23 minutes ago Up 23 minutes 80/tcp mynginx
d4bbca6b4a94 centos "bash" 41 minutes ago Up 41 minutes amazing_knuth
2fa04440346b centos "bash" 55 minutes ago Exited (0) 43minutes ago awesome_jones
083631b830a7 centos "bash" About an hour ago Exited (130)About an hour ago berserk_montalcini
上传镜像
[root@centos7 ~]# docker search lsy0109lsy
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/lsy0109lsy/lsy0109lsy 自己的镜像 0
[root@centos7 ~]# docker search lsy0109lsy/lsy0109lsy
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/lsy0109lsy/lsy0109lsy 自己的镜像 0
第一步
docker login
输入账号 密码
第二步:
docker p_w_picpaths
获取制作的镜像的ID
第三步:
docker tag 镜像的ID 后面跟自己在Docker Hub注册的账号的域名
第四步:
docker push后面跟自己在Docker Hub注册的账号的域名
这个时候就会上传你的镜像到网站
自己的操作过程记录
docker login
输入自己的账户和密码
docker p_w_picpaths
docker tag lsy/my_nginx:V1 docker.io/lsy0109lsy/my_nginx
docker push docker.io/lsy0109lsy/my_nginx
[root@centos7 ~]# docker pushdocker.io/lsy0109lsy/my_nginx
The push refers to a repository[docker.io/lsy0109lsy/my_nginx]
0cb915ddfd19: Layer already exists
473c450db44d: Layer already exists
57842ac5be45: Layer already exists
54522c622682: Layer already exists
latest: digest:sha256:0a07f792e691c9356fdbe01b31091ec5ef7fb92130b0cc0a06b7d15be8652965 size:1155
先执行把容器上传到镜像
docker commit -m "add new nginx dockerp_w_picpaths" my_nginx lsy/nginx:V1
查看镜像是否上传成功,并记录一下ID号下面访问的时候会用到
[root@docker1 ~]# docker p_w_picpaths
REPOSITORY TAG IMAGE ID CREATED SIZE
lsy/nginx V1 f4a4e312ac8d 4 minutes ago 381.8 MB
docker.io/centos latest 36540f359ca3 10 days ago 192.5 MB
docker.io/alpine latest 7328f6f8b418 2 weeks ago 3.962 MB
在访问 镜像的nginx服务
docker run -p 80:80 --name nginx --rm f4a4e312ac8dnginx
打开网页看是否显示(输入主机的IP地址)
类别 | Docker | Openstack |
部署难度 | 非常简单 | 组件多,部署复杂 |
启动速度 | 秒级 | 分钟级 |
执行性能 | 和物理系统几乎一致 | VM会占用一些资源 |
镜像体积 | 镜像是MB级别 | 虚拟机镜像GB级别 |
管理效率 | 管理简单 | 组件相互依赖,管理复杂 |
隔离性 | 隔离性高 | 彻底隔离 |
可管理性 | 单进程 | 完整的系统管理 |
网络连接 | 比较弱 | 借助Neutron可以灵活组件各类网络架构 |