资讯专栏INFORMATION COLUMN

docker的简介-安装-pull-push-Dockfile

why_rookie / 2811人阅读

摘要:安装还是在上,上建议别折腾。也就是说本地是空的。是否截断显示中间层镜像只是显示仓库一系列镜像的集合。的后台搜索然后直接上传镜像,会展开说。在本地构件一个新的镜像保存对容器修改,并再次使用。然后我们安装上了。

1.1docker概要

一个容器就是宿主机的一个进程。对,就是个进程。原理方面不大懂,但是
看更多linux 进程 文件管理 网络 等方面应该会加深理解。namespace+cgroupchroot

1.2安装docker

还是在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

2.2 拉取远程镜像

(可在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

然后我们安装上了。rzsz这两个兄弟

退出当前容器

[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上在实验下commitpush吧:

先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:32777



Welcome 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是什么 Docker是一款由DotCloud公司(现改名为Docker)基于Go语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发...

    BlackHole1 评论0 收藏0
  • Docker-Compose学习笔记(1)安装简介

    摘要:概述是一个用来定义和运行复杂应用的工具。使用,用户通过来进行构建。使用,不再需要使用脚本来启动容器。在配置文件中,所有的容器通过来定义,然后通过脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器。 概述 Docker Compose是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成...

    shiyang6017 评论0 收藏0
  • Docker-Compose学习笔记(1)安装简介

    摘要:概述是一个用来定义和运行复杂应用的工具。使用,用户通过来进行构建。使用,不再需要使用脚本来启动容器。在配置文件中,所有的容器通过来定义,然后通过脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器。 概述 Docker Compose是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成...

    zxhaaa 评论0 收藏0
  • Flux7 Docker 系列教程(一):Docker 简介

    摘要:本系列教程翻译自,系列共有九篇,本文译自第一篇。,一种新的容器化技术,因为轻量级和便携化而受到广泛关注。本篇文章是系列教程的第一篇。镜像只读的容器模板,简言之就是系统镜像文件。首先,向发出请求创建一个镜像并且指定容器内要运行的命令。 本系列教程翻译自 Flux7 Docker Tutorial Series,系列共有九篇,本文译自第一篇 Part 1: An Introduction。...

    zhaofeihao 评论0 收藏0
  • Flux7 Docker 系列教程(一):Docker 简介

    摘要:本系列教程翻译自,系列共有九篇,本文译自第一篇。,一种新的容器化技术,因为轻量级和便携化而受到广泛关注。本篇文章是系列教程的第一篇。镜像只读的容器模板,简言之就是系统镜像文件。首先,向发出请求创建一个镜像并且指定容器内要运行的命令。 本系列教程翻译自 Flux7 Docker Tutorial Series,系列共有九篇,本文译自第一篇 Part 1: An Introduction。...

    yacheng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<