安装docker :目前推荐使用yum的方式:

  1. 写一个yum 源

  2. yum update   && yum clean all && yum makecache && yum repolist

  3. yum install -y docker-engine (前提是安装必要的包 如:lib  gcc)

  4. chkconfig docker on


  5. 启动 docker

    后续的docker 命令可以参考 --help


docker pull ubuntu:14.04 :下载官方镜像

docker p_w_picpaths -q :只显示镜像id 

ps:对于后续处理脚本很有用

dokcer rm $(docker ps -a -q) :  移除掉运行停止的docker。 

docker rmi p_w_picpaths_name/p_w_picpaths_id : 移除docker 镜像


个人比较喜欢将pull的镜像放在本地,推荐一个官方的registry库:registry.docker-cn.com(说实话现在网上各种信息知识很杂,非常不系统,可能找了很多文档却不是自己需要的.之前找过不少关于registry图像化界面的安装,是基于harbor的。但也是基于docker的。图形化registry网页版架构包含 db   proxy  harbor administrator  log ui 有两个版本 offline和online 安装成功后登陆页面认证失败,无论是http还是https安装方式,查看日志/var/log/harbor/proxy, docker在安装后默认创建docker内部的网络组织,本地无法做转发,所以报502 ,通过docker ps 命令 发现本地的80端口转发是正常的,所以这也是本人感觉匪夷所思的地方,希望大家在看到该文章后,能提供一些解决方案,欢迎来喷,文章留言或者私信都可,万分感谢!!!

将官方加载的p_w_picpath存入本地的registry

1. docker tag    regsitry_name  127.0.0.1:5000/library/xxx(tag 可以任意)

2. docker push 127.0.0.1:5000/xxxx

3.  在 registry 页面刷新下,会看到上传的p_w_picpath

4 之后就可以pull了,是在本地的

浏览器如何看到本地push的镜像: 127.0.0.1:5000/v2/_catalog

ps  首先pull官方的registry镜像,registry的镜像是纯文本界面,

执行 :docker run -v /root/p_w_picpaths:/var/lib/registry  -p 5000:5000 --name=registry  --restart=always 镜像的名称

dockerfile:创建镜像和环境一步到位

内容:

from:来自哪个镜像

maintainer:维护者信息

run:run

run apt-get    xxxxx

cmd: 只能有一条cmd命令,只会执行最后一条。若启动容器时制定了运行的命令,则会覆盖掉cmd指定的命令。

expose : expose

分配制定端口

env:指定环境变量,后续被run使用

eg :  env  pg_major 9.6

add:复制指定的src 到容器的dest

格式: add 源 目的

copy:复制本地的src到容器的dest

格式:add

entrypoint:每个dockerfile只能有一个,只有最后一有效,容器启动后执行的命令。

eg:entrypoint ["executable" ,"param1","param2"]

volume:创建一个可以从本地主机或其他容器挂载的挂载点,用于存放数据。

eg:volume ["/data"]

user:运行容器指定的用户名

eg: user daemon

workdir  :为后续的run cmd  entrypoint 配置工作目录

workdir /a

workdir /b

onbuild :配置当前创建的镜像为其他镜像的基础的镜像时。所执行的操作命令

onbuild add . /app/src

onbuild run  /usr/local/bin/python-build --dir /app/src

注意:from 参数要指定基础镜像,tag建议为onbuild-xxx

supervisor:用于管理进程

可用于启动多个进程,把启动命令放在一个启动脚本,启动时直接启动这个脚本,所以需要安装管理进程工具。

1.创建一个dockerfile文件,  在某个目录下

dockerfile内容

FROM uburntu:14.04

MAINTAINER [email protected]

RUN apt-get update

RUN apt-get upgrade -y

RUN apt-get install -y --force-yes perl-base=5.14.2-6ubuntu2

RUN apt-get install -y apache2-common

RUN apt-get install -y openssh-server apache2 supservisor

RUN  mkdir -p /var/run/sshd

RUN mkdir -p /var/log/supervisor

COPY supersivord.conf /etc/supervisor/conf.d/supervisord.conf

EXPOSE  22 80

2.supervisor 配置文件

[supervisor]

nodaemon=true

[program:sshd]

command=/usr/sbin/sshd -D

[program:apache2]

command=/bin/bash  -c "source /etc/apache2/envvars && exec /usr/sbin/apache...

3.执行

docker build -t tomcat/xxx .

"." 代表在当前目录 ,-t  代表tag 可以任意 不能漏

4.启动

docker run -it -p 22 -p 80 test/supervisord

supervisor 是一个管理docker里服务的配置工具,可以实现批量启动后者关闭进程。

如何在一个纯净的docker镜像搭建自己的服务环境:

以mysql举例:

docker  pull  p_w_picpaths_name(也可以是具体registry具体的url:IP/library/xxx)

docker p_w_picpaths

docker run -v /xxx:/xxxx   --name mysql  -d   p_w_picpaths_name /bin/bash

这时已经进入到docker容器中 :

部分镜像没有yum源 这时候的-v可以填写yum源 ,主要是指定本地的yum源放挂载在docker的某个目录下,当然也可以添加多个-v ,指定mysql数据日志等目录

以安装 mariadb为例: (在容器中执行:)

yum update && yum clean all && yum makecache && yum repolist 

yum install -y mariadb

exit

docker commit  contain_id (这时已经生成一个全新的镜像)

启动docker :docker run -it -v /xx:/xxx -p 3306:3306  -d --name=xxxx   --restart=always p_w_picpaths_name