摘要:安装还是在上,上建议别折腾。也就是说本地是空的。是否截断显示中间层镜像只是显示仓库一系列镜像的集合。的后台搜索然后直接上传镜像,会展开说。在本地构件一个新的镜像保存对容器修改,并再次使用。然后我们安装上了。
1.1docker概要
一个容器就是宿主机的一个进程。对,就是个进程。原理方面不大懂,但是
看更多linux 进程 文件管理 网络 等方面应该会加深理解。namespace+cgroup(chroot)
还是在linux上,win上建议别折腾。我这里是ubuntu,安装完docker你可以在容器里弄出个centos。里面在装docker,(不知道行不行的通。。)
配置需求
uname -i 64位
uname -r 内核版本大于3.10
可以直接apt-get install docker.io安装版本会比较低,不建议
ps aux |grep docker root 705 0.0 2.2 361808 17152 ? Ssl 14:28 0:01 /usr/bin/docker -d /usr/bin/docker -d //说明安装成功
卸载apt-get remove --purge docker.io
安装高版本(推荐) 把私有仓库添加apt-get
$ sudo su - root apt-get -y installapt-transport-https apt-keyadv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 bash -c "echo debhttps://get.docker.io/ubuntu docker main >/etc/apt/sources.list.d/docker.list" apt-get update apt-get -y install lxc-docker docker -v //查看docker版本 Docker version 1.7.0-dev, build 5e06332 ps -ef | grep docker root 17311 1 0 Feb13 ? 00:00:43 /usr/bin/docker -d
service docker stop start restart
1.3 简单理解docker镜像可以理解为一个目录,启动容器x的时候,chroot 到容器 x。
可以用docker info 查看。
cd var/lib/docker docker安装所在目录的aufs/mnt/* 每个容器目录都在这里有root根
镜像目录
目录a-》容器a
目录b=》容器b
docker images 命令查看目前所有镜像,初始化的时候肯定是空的了啊。也就是说本地registry是空的。
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
1.4举个redis例子
我们可以从docker官方registry拉取镜像用docker pull命令
docker pull redis:2.8.19
标识+tag(REPOSITORY:TAG)(redis:2.8.19)就肯定是一个唯一镜像
下面run起来这个 redis。
eg1:sudo docker run -d redis
可以查看docker help run
-i-t 交互式容器就是直接进入,适合临时性任务
-d后台,守护氏容器,大多数需要守护石
-name 为容器指定一个名称
eg2:sudo docker run -it centos:6 /bin/bash
带入到虚拟容器中。
exit 回到宿主机,退出当前容器.交互式容器需要 docker ps -a选项看到。不加a看不到关闭的
如果没有指定tag,就使用默认latest分支(tag),如果没有指定命令,就使用默认命令(redis是/entrypoint.sh redis -server)。守护石容器运行在后台,这样我们继续留在宿主机中
docker inspact【pid】 查看容器更详细信息,pid可根据docker ps[-a]得到。
注意:在启动docker的时候,只能启动docker images里有的镜像,如果没有,会自动拉取。但是网速慢的话还是先停止,我们有下面的加速器。下载这个redis完全是看他还小点。。
docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE redis 2.8.19 8c37ff647cf2 8 months ago 110.8 MB
启动为
root@tb:/home/tb# docker run -d redis:2.8.19 root@tb:/home/tb# docker inspect 6b24| grep IPAddress "IPAddress": "172.17.0.1",
查看具体某一项 docker inspect imageid,返回的是json格式,可以gerp查看具体某一项啦。
利用之前的docker redis 里面就可以set get key啦。
========================================================================
2.1 docker的镜像与仓库一些命令和概念拾遗:
docker info 命令查看docker 的存储驱动及对应信息。
docker images -af --no(是否截断image id)-a显示中间层镜像 -q只是显示imageid
respository 仓库:一系列镜像的集合。里面包含一个个的镜像
tag 镜像的标签:默认为latest,同一个镜像可以为不同标签
registry仓库,指的的docker镜像的存储仓库
docker images redis 查看redis的仓库
docker inspect pid视察检查某个镜像中的容器信息
docker rmi -f 强制删除镜像(imageid或者仓库名+tag)
docker rm -link
(可在https://hub.docker.com/注册 ,然后搜索:内有镜像评分和下载数量)
docker search -s 3 lnmp
docker pull domainer/centos-lnmp 这样会比较慢,推荐使用国内镜像加速
加速可参考:
https://dashboard.daocloud.io...
我是ubuntu 可以直接:
echo "DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=http://88c88c7c.m.daocloud.io"" | sudo tee -a /etc/default/docker
然后重启docker
sudo service docker restart
比如我想要个swoole的镜像。daocloud.io的后台搜索 swoole
然后直接 docker pull betashepherd/docker-swoole:1.7.15-stable
docker push 上传docker镜像,2.3会展开说。
2.3在本地构件一个新的镜像保存对容器修改,并再次使用。
软件形式打包,做分发。
docker commit 通过容器构件镜像
-a author -m message -p pause
具体就靠man啦
演示我把本地的一个镜像推送到dockerhub上:
目前镜像
docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE redis latest ff3dae0ffe3b 12 days ago 151.3 MB daocloud.io/library/nginx 1.9.9 813e3731b203 3 weeks ago 133.9 MB redis 2.8.19 8c37ff647cf2 8 months ago 110.8 MB domainer/centos-lnmp latest 754c2ab8ffc8 11 months ago 574.9 MB redis 2.8.9 e938c5d0ff85 14 months ago 110.8 MB
我们运行centos lnmp
docker run -it -p 80 --name tb_commit_test domainer/centos-lnmp /bin/bash [root@12fb650b9296 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root sbin selinux srv sys tmp usr var [root@12fb650b9296 /]# which nginx /usr/sbin/nginx
成功后就进入了这个镜像
在这个容器装个szrz吧,还是因为比较小。。
[root@12fb650b9296 /]# rz bash: rz: command not found [root@12fb650b9296 /]# yum install lrzsz -y
然后我们安装上了。rz和sz这两个兄弟
退出当前容器
[root@12fb650b9296 /]# exit exit root@tb:/home/tb#
docker ps -l 可以看到我们刚刚编辑的镜像
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 12fb650b9296 domainer/centos-lnmp "/bin/bash" 9 minutes ago Exited (0) 59 seconds ago tb docker commit -a "tb" -m "rzsz" 12fb domainer/centos-lnmp 1799960f6ccafa9488f2ab17a1f1600601eb73187295fbe2c542603c5955d2e0
返回的id为新生成的镜像的id,可以通过
docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE domainer/centos-lnmp latest 1799960f6cca 33 minutes ago 655.4 MB
因为上面的镜像我是从dockerhub上下载的,安装了rzsz后提交不上到daocloud,以为是**问题。下面我们重新拉取从国内的daocloud,并修改,然后上传到自己的镜像到daocloud中
拉取:
docker pull nickistre/ubuntu-lamp Pulling repository nickistre/ubuntu-lamp 5323e03e7da9: Pulling image (latest) from nickistre/ubuntu-lamp, mirror: http://624869e7.m.daocloud.io/v1/ 5323e03e7da9: Pulling image (latest) from nickistre/ubuntu-lamp
上传到到daocloud:
daocloud上传镜像 (收费的,收费的,收费的。上传不上去说权限限制。)
docker login daocloud.io
输入用户名密码邮箱
然后...(如果你开通了这个服务的话)就上传成功 了。
那我们还是在在hubdocker上在实验下commit 和push吧:
先pull一个nickistre/lamp的镜像,我们在上面安装一个nginx,然后上传上去。
root@tb:/home/tb# docker run -it -p 80 --name commit_test nickistre/ubuntu-lamp /bin/bash root@f4cf34e4cac6:/# cat /etc/issue Ubuntu 14.04.3 LTS l root@f4cf34e4cac6:/# which nginx root@f4cf34e4cac6:/# which apache2 /usr/sbin/apache2
这次我们安装个nginx
apt-get install nginx Reading package lists... Done Building dependency tree
...
安装好后
root@f4cf34e4cac6:/# which nginx /usr/sbin/nginx root@f4cf34e4cac6:/#
然后我们在容器中启动nginx
root@f4cf34e4cac6:/# service nginx status * nginx is not running root@f4cf34e4cac6:/# service nginx start root@f4cf34e4cac6:/# service nginx status * nginx is running
好,我们切换到宿主机,运行docker ps
root@tb:/home/tb# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f4cf34e4cac6 nickistre/ubuntu-lamp "/bin/bash" 6 minutes ago Up 6 minutes 0.0.0.0:32778->22/tcp, 0.0.0.0:32777->80/tcp, 0.0.0.0:32776->443/tcp commit_test
测试下看到80端口对应是32776
root@tb:/home/tb# curl 127.0.0.1:32777Welcome to nginx! Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.Thank you for using nginx.
嗯,nginx没问题,把修改好的容器提交为镜像
docker commit f4cf34e4cac6 yaxiaomu/lnamp
详细信息可以这么写:实际操作我没写
-a 作者名字
-m 镜像信息
docker commit -a "yaxiaomu" -m "nginx" commit_test /yaxiaomu/commit_test
都会返回一个新生成的镜像id
这样就没问题了。下面我们将更改上传到dockerhub中,yaxiaomu是我的dockerhub用户名
root@tb:/home/tb# docker push yaxiaomu/lnamp The push refers to a repository [yaxiaomu/lnamp] (len: 1) Sending image list Pushing repository yaxiaomu/lnamp (1 tags) 895b070402bd: Image already pushed, skipping 02e5bca4149b: Image already pushed, skipping b2ae0a712b39: Image already pushed, skipping af88597ec24b: Image already pushed, skipping 31ef599b27ee: Image successfully pushed ee168b5cc455: Image successfully pushed d348d7a11841: Image successfully pushed c94ca54a3ff4: Image successfully pushed ca7003051cdb: Image successfully pushed c21876831405: Image successfully pushed 4ec68505f54c: Image successfully pushed 8b14247b8658: Image successfully pushed 4a5230b7de4e: Image successfully pushed 614789f7a3f4: Image successfully pushed 9d1e26045261: Image successfully pushed 62cde6caea01: Image successfully pushed 82bfdf8409e4: Image successfully pushed 8bac6635505b: Image successfully pushed 05133d17b3c0: Image successfully pushed 7f6d12e6d8c5: Image successfully pushed aff2549596d0: Image successfully pushed 5323e03e7da9: Image successfully pushed ece7b4d33c19: Image successfully pushed Pushing tag for rev [ece7b4d33c19] on {https://cdn-registry-1.docker.io/v1/repositories/yaxiaomu/lnamp/tags/latest} root@tb:/home/tb#
虽然很漫长,这样是成功了,感觉速度好慢。。
2.4我们用docker bulid dockerfile 文件构件镜像(简介~)用Dockerfile安装镜像
DockerFile文件,直白点就是包含了一系列命令的文本文件,他里面包含一些基本镜像(中间件镜像),一些docker命令脚本,
通过build+参数的方式来构造镜像,build可以加载本地file,也可以加载远程file(如果网络不是问题的话)
这里列出个简单例子
先看dockerfile的一个例子
# Memcached # # VERSION 1.0 # use the ubuntu base image provided by dotCloud FROM ubuntu # make sure the package repository is up to date RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list RUN apt-get update # install memcached RUN apt-get install -y memcached
执行例子(注意自己配置Dockfle文件路径):
docker build -t yaxiaomu/ubuntu_memcache .
.代表是当前目录里有dockerfile 这个文件
更多Dockerfile参数
dockerfile安装实例
稍微深入一下docker
镜像加速201804更新
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/26491.html
摘要:容器镜像运行后,此时就实例化了一个容器。侧重的是应用级别,而虚拟机是彻底隔离整个运行环境。方便交付将应用以及运行环境打包成一个镜像,交付更简单高效。下载地址点击运行即可一如既往的下一步下一步完成安装。 Docker是什么 Docker是一款由DotCloud公司(现改名为Docker)基于Go语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发...
摘要:概述是一个用来定义和运行复杂应用的工具。使用,用户通过来进行构建。使用,不再需要使用脚本来启动容器。在配置文件中,所有的容器通过来定义,然后通过脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器。 概述 Docker Compose是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成...
摘要:概述是一个用来定义和运行复杂应用的工具。使用,用户通过来进行构建。使用,不再需要使用脚本来启动容器。在配置文件中,所有的容器通过来定义,然后通过脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器。 概述 Docker Compose是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成...
摘要:本系列教程翻译自,系列共有九篇,本文译自第一篇。,一种新的容器化技术,因为轻量级和便携化而受到广泛关注。本篇文章是系列教程的第一篇。镜像只读的容器模板,简言之就是系统镜像文件。首先,向发出请求创建一个镜像并且指定容器内要运行的命令。 本系列教程翻译自 Flux7 Docker Tutorial Series,系列共有九篇,本文译自第一篇 Part 1: An Introduction。...
摘要:本系列教程翻译自,系列共有九篇,本文译自第一篇。,一种新的容器化技术,因为轻量级和便携化而受到广泛关注。本篇文章是系列教程的第一篇。镜像只读的容器模板,简言之就是系统镜像文件。首先,向发出请求创建一个镜像并且指定容器内要运行的命令。 本系列教程翻译自 Flux7 Docker Tutorial Series,系列共有九篇,本文译自第一篇 Part 1: An Introduction。...
阅读 2772·2021-11-19 11:30
阅读 3057·2021-11-15 11:39
阅读 1782·2021-08-03 14:03
阅读 1984·2019-08-30 14:18
阅读 2042·2019-08-30 11:16
阅读 2148·2019-08-29 17:23
阅读 2596·2019-08-28 18:06
阅读 2532·2019-08-26 12:22