安装docker :目前推荐使用yum的方式:
写一个yum 源
yum update && yum clean all && yum makecache && yum repolist
yum install -y docker-engine (前提是安装必要的包 如:lib gcc)
chkconfig docker on
启动 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